Verwenden von verknüpften und geschachtelten Vorlagen bei der Bereitstellung von Azure-RessourcenUsing linked and nested templates when deploying Azure resources

Um Ihre Lösung bereitzustellen, können Sie entweder eine Einzelvorlage oder eine Hauptvorlage mit vielen verwandten Vorlagen verwenden.To deploy your solution, you can use either a single template or a main template with many related templates. Bei der verwandten Vorlage kann es sich entweder um eine separate Datei handeln, auf die aus der Hauptvorlage verwiesen wird, oder um eine Vorlage, die in der Hauptvorlage geschachtelt ist.The related template can be either a separate file that is linked to from the main template, or a template that is nested within the main template.

Bei kleinen bis mittelgroßen Lösungen lässt sich eine Einzelvorlage einfacher verstehen und verwalten.For small to medium solutions, a single template is easier to understand and maintain. Sie können alle Ressourcen und Werte in einer einzelnen Datei anzeigen.You can see all the resources and values in a single file. In erweiterten Szenarien können Sie mithilfe verknüpfter Vorlagen die Lösung in Zielkomponenten unterteilen und Vorlagen wiederverwenden.For advanced scenarios, linked templates enable you to break down the solution into targeted components, and reuse templates.

Bei Verwendung verknüpfter Vorlagen erstellen Sie eine Hauptvorlage, in der die Parameterwerte während der Bereitstellung empfangen werden.When using linked templates, you create a main template that receives the parameter values during deployment. Die Hauptvorlage enthält alle verknüpften Vorlagen und übergibt bei Bedarf Werte an diese Vorlagen.The main template contains all the linked templates and passes values to those templates as needed.

Ein entsprechendes Tutorial finden Sie unter Tutorial: Erstellen verknüpfter Azure Resource Manager-Vorlagen.For a tutorial, see Tutorial: create linked Azure Resource Manager templates.

Hinweis

Für verknüpfte oder geschachtelte Vorlagen können Sie nur den Bereitstellungsmodus Inkrementell verwenden.For linked or nested templates, you can only use Incremental deployment mode.

Zum Verknüpfen mit einer anderen Vorlage fügen Sie der Hauptvorlage eine Bereitstellungsressource hinzu.To link to another template, add a deployments resource to your main template.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2018-05-01",
    "name": "linkedTemplate",
    "properties": {
        "mode": "Incremental",
        <nested-template-or-external-template>
    }
  }
]

Die Eigenschaften, die Sie für die Bereitstellungsressource angeben, variieren in Abhängigkeit davon, ob Sie eine externe Vorlage verknüpfen oder eine Inlinevorlage mit der Hauptvorlage schachteln.The properties you provide for the deployment resource vary based on whether you're linking to an external template or nesting an inline template in the main template.

Geschachtelte VorlageNested template

Verwenden Sie zum Schachteln der Vorlage mit der Hauptvorlage die template-Eigenschaft, und geben Sie die Vorlagensyntax an.To nest the template within the main template, use the template property and specify the template syntax.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2018-05-01",
    "name": "nestedTemplate",
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "name": "[variables('storageName')]",
            "location": "West US",
            "kind": "StorageV2",
            "sku": {
                "name": "Standard_LRS"
            }
          }
        ]
      }
    }
  }
]

Hinweis

Für geschachtelte Vorlagen können Sie keine Parameter oder Variablen verwenden, die in der geschachtelten Vorlage definiert sind.For nested templates, you cannot use parameters or variables that are defined within the nested template. Sie können Parameter und Variablen über die Hauptvorlage verwenden.You can use parameters and variables from the main template. Im vorherigen Beispiel wird mit [variables('storageName')] kein Wert aus der geschachtelten Vorlage abgerufen, sondern aus der Hauptvorlage.In the preceding example, [variables('storageName')] retrieves a value from the main template, not the nested template. Diese Einschränkung gilt nicht für externe Vorlagen.This restriction does not apply to external templates.

Wenn zwei Ressourcen in einer geschachtelten Vorlage definiert sind und eine Ressource von der anderen abhängig ist, handelt es sich bei dem Wert der Abhängigkeit einfach um den Namen der abhängigen Ressource:For two resources defined inside a nested template and one resource depends on the other, the value of the dependency is simply the name of the dependent resource:

"dependsOn": [
  "[variables('storageAccountName')]"
],

Die Funktion reference kann nicht im Ausgabeabschnitt einer geschachtelten Vorlage für eine Ressource verwendet werden, die Sie in der geschachtelten Vorlage bereitgestellt haben.You can't use the reference function in the outputs section of a nested template for a resource you have deployed in the nested template. Um die Werte für eine bereitgestellte Ressource in einer geschachtelten Vorlage zurückzugeben, konvertieren Sie Ihre geschachtelte Vorlage in eine verknüpfte Vorlage.To return the values for a deployed resource in a nested template, convert your nested template to a linked template.

Die geschachtelten Vorlage erfordert dieselben Eigenschaften wie eine Standardvorlage.The nested template requires the same properties as a standard template.

Externe Vorlage und externe ParameterExternal template and external parameters

Um eine externe Vorlage und Parameterdatei zu verknüpfen, verwenden Sie templateLink und parametersLink.To link to an external template and parameter file, use templateLink and parametersLink. Beim Verknüpfen mit einer Vorlage muss der Resource Manager-Dienst auf die verknüpfte Vorlage zugreifen können.When linking to a template, the Resource Manager service must be able to access it. Sie können keine lokale Datei und keine Datei angeben, die nur in Ihrem lokalen Netzwerk verfügbar ist.You can't specify a local file or a file that is only available on your local network. Sie können nur einen URI-Wert bereitstellen, der entweder http oder https enthält.You can only provide a URI value that includes either http or https. Eine Option besteht darin, die verknüpfte Vorlage in einem Speicherkonto zu platzieren und den URI für dieses Element zu verwenden.One option is to place your linked template in a storage account, and use the URI for that item.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2018-05-01",
    "name": "linkedTemplate",
    "properties": {
    "mode": "Incremental",
    "templateLink": {
        "uri":"https://mystorageaccount.blob.core.windows.net/AzureTemplates/newStorageAccount.json",
        "contentVersion":"1.0.0.0"
    },
    "parametersLink": {
        "uri":"https://mystorageaccount.blob.core.windows.net/AzureTemplates/newStorageAccount.parameters.json",
        "contentVersion":"1.0.0.0"
    }
    }
  }
]

Sie müssen die contentVersion-Eigenschaft für die Vorlage oder die Parameter nicht angeben.You don't have to provide the contentVersion property for the template or parameters. Wenn Sie keinen Wert für die Inhaltsversion bereitstellen, wird die aktuelle Version der Vorlage bereitgestellt.If you don't provide a content version value, the current version of the template is deployed. Wenn Sie einen Wert für die Inhaltsversion angeben, muss diese mit der Version in der verknüpften Vorlage übereinstimmen. Andernfalls tritt bei der Bereitstellung ein Fehler auf.If you provide a value for content version, it must match the version in the linked template; otherwise, the deployment fails with an error.

Externe Vorlage und InlineparameterExternal template and inline parameters

Alternativ können Sie den Parameter inline bereitstellen.Or, you can provide the parameter inline. Sie können nicht sowohl Inlineparameter als auch einen Link auf eine Parameterdatei verwenden.You can't use both inline parameters and a link to a parameter file. Bei der Bereitstellung tritt ein Fehler auf, wenn sowohl parametersLink als auch parameters angegeben sind.The deployment fails with an error when both parametersLink and parameters are specified.

Um einen Wert von der Hauptvorlage an die verknüpfte Vorlage zu übergeben, verwenden Sie parameters.To pass a value from the main template to the linked template, use parameters.

"resources": [
  {
     "type": "Microsoft.Resources/deployments",
     "apiVersion": "2018-05-01",
     "name": "linkedTemplate",
     "properties": {
       "mode": "Incremental",
       "templateLink": {
          "uri":"https://mystorageaccount.blob.core.windows.net/AzureTemplates/newStorageAccount.json",
          "contentVersion":"1.0.0.0"
       },
       "parameters": {
          "StorageAccountName":{"value": "[parameters('StorageAccountName')]"}
        }
     }
  }
]

Verwenden von „copy“Using copy

Wenn Sie mehrere Instanzen einer Ressource mit einer geschachtelten Vorlage erstellen möchten, fügen Sie das Element „copy“ auf der Ebene der Ressource Microsoft.Resources/deployments hinzu.To create multiple instances of a resource with a nested template, add the copy element at the level of the Microsoft.Resources/deployments resource.

In der folgenden Beispielvorlage wird die Verwendung von „copy“ mit einer geschachtelten Vorlage veranschaulicht.The following example template shows how to use copy with a nested template.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2018-05-01",
    "name": "[concat('nestedTemplate', copyIndex())]",
    // yes, copy works here
    "copy":{
      "name": "storagecopy",
      "count": 2
    },
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "name": "[concat(variables('storageName'), copyIndex())]",
            "location": "West US",
            "kind": "StorageV2",
            "sku": {
              "name": "Standard_LRS"
            }
            // no, copy doesn't work here
            //"copy":{
            //  "name": "storagecopy",
            //  "count": 2
            //}
          }
        ]
      }
    }
  }
]

Die vorherigen Beispiele zeigen hartcodierte URL-Werte für die Vorlagenlinks.The previous examples showed hard-coded URL values for the template links. Dieser Ansatz funktioniert zwar bei einfachen Vorlagen, er funktioniert jedoch nicht gut bei der Arbeit mit einer großen Anzahl von modularen Vorlagen.This approach might work for a simple template but it doesn't work well when working with a large set of modular templates. Stattdessen können Sie eine statische Variable erstellen, die eine Basis-URL für die Hauptvorlage speichert, und dann aus dieser Basis-URL dynamisch URLs für die verknüpften Vorlagen erstellen.Instead, you can create a static variable that stores a base URL for the main template and then dynamically create URLs for the linked templates from that base URL. Der Vorteil dieses Ansatzes besteht darin, dass Sie die Vorlage problemlos verschieben oder verzweigen können, da Sie nur die statische Variable in der Hauptvorlage ändern müssen.The benefit of this approach is you can easily move or fork the template because you only need to change the static variable in the main template. Die Hauptvorlage übergibt die richtigen URIs an die zerlegten Vorlagen.The main template passes the correct URIs throughout the decomposed template.

Das folgende Beispiel zeigt, wie Sie eine Basis-URL verwenden können, um zwei URLs für verknüpfte Vorlagen (sharedTemplateUrl und vmTemplate) zu erstellen.The following example shows how to use a base URL to create two URLs for linked templates (sharedTemplateUrl and vmTemplate).

"variables": {
    "templateBaseUrl": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/postgresql-on-ubuntu/",
    "sharedTemplateUrl": "[concat(variables('templateBaseUrl'), 'shared-resources.json')]",
    "vmTemplateUrl": "[concat(variables('templateBaseUrl'), 'database-2disk-resources.json')]"
}

Sie können auch deployment() verwenden, um die Basis-URL für die aktuelle Vorlage zu erhalten. Mit dieser können Sie die URL für die anderen Vorlagen am gleichen Speicherort abrufen.You can also use deployment() to get the base URL for the current template, and use that to get the URL for other templates in the same location. Diese Vorgehensweise ist hilfreich, wenn sich der Speicherort der Vorlage ändert oder wenn Sie es vermeiden möchten, URLs in der Vorlagendatei hart zu codieren.This approach is useful if your template location changes or you want to avoid hard coding URLs in the template file. Die Eigenschaft „templateLink“ wird nur zurückgegeben, wenn auf eine Remotevorlage mit einer URL verwiesen wird.The templateLink property is only returned when linking to a remote template with a URL. Wenn Sie eine lokale Vorlage verwenden, ist diese Eigenschaft nicht verfügbar.If you're using a local template, that property isn't available.

"variables": {
    "sharedTemplateUrl": "[uri(deployment().properties.templateLink.uri, 'shared-resources.json')]"
}

Abrufen von Werten aus einer verknüpften VorlageGet values from linked template

Um einen Ausgabewert aus einer verknüpften Vorlage abzurufen, rufen Sie den Eigenschaftswert mit einer der folgenden ähnlichen Syntax ab: "[reference('deploymentName').outputs.propertyName.value]".To get an output value from a linked template, retrieve the property value with syntax like: "[reference('deploymentName').outputs.propertyName.value]".

Wenn Sie eine Ausgabeeigenschaft von einer verknüpften Vorlage abrufen, kann der Name der Eigenschaft keinen Bindestrich enthalten.When getting an output property from a linked template, the property name can't include a dash.

In den folgenden Beispielen wird veranschaulicht, wie Sie auf eine verknüpfte Vorlage verweisen und einen Ausgabewert abrufen.The following examples demonstrate how to reference a linked template and retrieve an output value. Die verknüpfte Vorlage gibt eine einfache Nachricht zurück.The linked template returns a simple message.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [],
    "outputs": {
        "greetingMessage": {
            "value": "Hello World",
            "type" : "string"
        }
    }
}

Die Hauptvorlage stellt die verknüpfte Vorlage bereit und ruft den zurückgegebenen Wert ab.The main template deploys the linked template and gets the returned value. Beachten Sie, dass sie durch den Namen auf die Bereitstellungsressource verweist und den Namen der von der verknüpften Vorlage zurückgegebenen Eigenschaft verwendet.Notice that it references the deployment resource by name, and it uses the name of the property returned by the linked template.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "linkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[uri(deployment().properties.templateLink.uri, 'helloworld.json')]",
                    "contentVersion": "1.0.0.0"
                }
            }
        }
    ],
    "outputs": {
        "messageFromLinkedTemplate": {
            "type": "string",
            "value": "[reference('linkedTemplate').outputs.greetingMessage.value]"
        }
    }
}

Wie andere Ressourcentypen können Sie Abhängigkeiten zwischen der verknüpften Vorlage und anderen Ressourcen festlegen.Like other resource types, you can set dependencies between the linked template and other resources. Wenn also andere Ressourcen einen Ausgabewert aus der verknüpften Vorlage benötigen, stellen Sie sicher, dass die verknüpfte Vorlage vor ihnen bereitgestellt wird.Therefore, when other resources require an output value from the linked template, make sure the linked template is deployed before them. Wenn andererseits die verknüpfte Vorlage von anderen Ressourcen abhängig ist, sorgen Sie dafür, dass andere Ressourcen vor der verknüpften Vorlage bereitgestellt werden.Or, when the linked template relies on other resources, make sure other resources are deployed before the linked template.

Im folgenden Beispiel ist eine Vorlage dargestellt, die eine öffentliche IP-Adresse bereitstellt und die Ressourcen-ID zurückgibt:The following example shows a template that deploys a public IP address and returns the resource ID:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "publicIPAddresses_name": {
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Network/publicIPAddresses",
            "apiVersion": "2018-11-01",
            "name": "[parameters('publicIPAddresses_name')]",
            "location": "eastus",
            "properties": {
                "publicIPAddressVersion": "IPv4",
                "publicIPAllocationMethod": "Dynamic",
                "idleTimeoutInMinutes": 4
            },
            "dependsOn": []
        }
    ],
    "outputs": {
        "resourceID": {
            "type": "string",
            "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
        }
    }
}

Um beim Bereitstellen eines Lastenausgleichs die öffentliche IP-Adresse aus der vorherigen Vorlage zu verwenden, verknüpfen Sie die Vorlage, und fügen Sie eine Abhängigkeit von der Bereitstellungsressource hinzu.To use the public IP address from the preceding template when deploying a load balancer, link to the template and add a dependency on the deployment resource. Die öffentliche IP-Adresse des Lastenausgleichs wird auf den Ausgabewert von der verknüpften Vorlage festgelegt.The public IP address on the load balancer is set to the output value from the linked template.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "loadBalancers_name": {
            "defaultValue": "mylb",
            "type": "string"
        },
        "publicIPAddresses_name": {
            "defaultValue": "myip",
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Network/loadBalancers",
            "apiVersion": "2018-11-01",
            "name": "[parameters('loadBalancers_name')]",
            "location": "eastus",
            "properties": {
                "frontendIPConfigurations": [
                    {
                        "name": "LoadBalancerFrontEnd",
                        "properties": {
                            "privateIPAllocationMethod": "Dynamic",
                            "publicIPAddress": {
                                "id": "[reference('linkedTemplate').outputs.resourceID.value]"
                            }
                        }
                    }
                ],
                "backendAddressPools": [],
                "loadBalancingRules": [],
                "probes": [],
                "inboundNatRules": [],
                "outboundNatRules": [],
                "inboundNatPools": []
            },
            "dependsOn": [
                "linkedTemplate"
            ]
        },
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "linkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[uri(deployment().properties.templateLink.uri, 'publicip.json')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters":{
                    "publicIPAddresses_name":{"value": "[parameters('publicIPAddresses_name')]"}
                }
            }
        }
    ]
}

Verknüpfte und geschachtelte Vorlagen im BereitstellungsverlaufLinked and nested templates in deployment history

Der Resource Manager verarbeitet jede Vorlage als separate Bereitstellung im Bereitstellungsverlauf.Resource Manager processes each template as a separate deployment in the deployment history. Daher wird eine Hauptvorlage mit drei verknüpften oder geschachtelten Vorlagen im Bereitstellungsverlauf wie folgt angezeigt:Therefore, a main template with three linked or nested templates appears in the deployment history as:

Bereitstellungsverlauf

Über diese separaten Einträge im Verlauf können Sie nach der Bereitstellung Ausgabewerte abrufen.You can use these separate entries in the history to retrieve output values after the deployment. Mit der folgenden Vorlage wird eine öffentliche IP-Adresse erstellt und die IP-Adresse ausgegeben:The following template creates a public IP address and outputs the IP address:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "publicIPAddresses_name": {
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Network/publicIPAddresses",
            "apiVersion": "2018-11-01",
            "name": "[parameters('publicIPAddresses_name')]",
            "location": "southcentralus",
            "properties": {
                "publicIPAddressVersion": "IPv4",
                "publicIPAllocationMethod": "Static",
                "idleTimeoutInMinutes": 4,
                "dnsSettings": {
                    "domainNameLabel": "[concat(parameters('publicIPAddresses_name'), uniqueString(resourceGroup().id))]"
                }
            },
            "dependsOn": []
        }
    ],
    "outputs": {
        "returnedIPAddress": {
            "type": "string",
            "value": "[reference(parameters('publicIPAddresses_name')).ipAddress]"
        }
    }
}

Die folgende Vorlage wird mit der vorherigen Vorlage verknüpft.The following template links to the preceding template. Es werden drei öffentliche IP-Adressen erstellt.It creates three public IP addresses.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "[concat('linkedTemplate', copyIndex())]",
            "copy": {
                "count": 3,
                "name": "ip-loop"
            },
            "properties": {
              "mode": "Incremental",
              "templateLink": {
                "uri": "[uri(deployment().properties.templateLink.uri, 'static-public-ip.json')]",
                "contentVersion": "1.0.0.0"
              },
              "parameters":{
                  "publicIPAddresses_name":{"value": "[concat('myip-', copyIndex())]"}
              }
            }
        }
    ]
}

Nach der Bereitstellung können Sie die Ausgabewerte mit dem folgenden PowerShell-Skript abrufen:After the deployment, you can retrieve the output values with the following PowerShell script:

$loopCount = 3
for ($i = 0; $i -lt $loopCount; $i++)
{
    $name = 'linkedTemplate' + $i;
    $deployment = Get-AzResourceGroupDeployment -ResourceGroupName examplegroup -Name $name
    Write-Output "deployment $($deployment.DeploymentName) returned $($deployment.Outputs.returnedIPAddress.value)"
}

Oder ein Azure CLI-Skript in einer Bash-Shell:Or, Azure CLI script in a Bash shell:

#!/bin/bash

for i in 0 1 2;
do
    name="linkedTemplate$i";
    deployment=$(az group deployment show -g examplegroup -n $name);
    ip=$(echo $deployment | jq .properties.outputs.returnedIPAddress.value);
    echo "deployment $name returned $ip";
done

Sichern einer externen VorlageSecuring an external template

Obwohl die verknüpfte Vorlage extern verfügbar sein muss, muss sie nicht allgemein der Öffentlichkeit zur Verfügung stehen.Although the linked template must be externally available, it doesn't need to be generally available to the public. Sie können Ihre Vorlage einem privaten Speicherkonto hinzufügen, auf das nur der Speicherkontobesitzer Zugriff hat.You can add your template to a private storage account that is accessible to only the storage account owner. Anschließend erstellen Sie ein SAS-Token (Shared Access Signature), um den Zugriff während der Bereitstellung zu ermöglichen.Then, you create a shared access signature (SAS) token to enable access during deployment. Sie fügen dieses SAS-Token dem URI für die verknüpfte Vorlage hinzu.You add that SAS token to the URI for the linked template. Obwohl das Token als sichere Zeichenfolge übergeben wird, wird der URI der verknüpften Vorlage samt SAS-Token in den Bereitstellungsvorgängen protokolliert.Even though the token is passed in as a secure string, the URI of the linked template, including the SAS token, is logged in the deployment operations. Legen Sie ein Ablaufdatum für das Token fest, um den Zugriff zu beschränken.To limit exposure, set an expiration for the token.

Für die Parameterdatei kann auch die Einschränkung gelten, dass der Zugriff nur mithilfe eines SAS-Tokens möglich ist.The parameter file can also be limited to access through a SAS token.

Derzeit ist es nicht möglich, eine Verknüpfung mit einer Vorlage in einem Speicherkonto zu erstellen, das sich hinter einer Azure Storage-Firewall befindet.Currently, you can't link to a template in a storage account that is behind an Azure Storage firewall.

Im folgenden Beispiel wird veranschaulicht, wie ein SAS-Token beim Verknüpfen mit einer Vorlage übergeben wird:The following example shows how to pass a SAS token when linking to a template:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "containerSasToken": { "type": "string" }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "name": "linkedTemplate",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[concat(uri(deployment().properties.templateLink.uri, 'helloworld.json'), parameters('containerSasToken'))]",
          "contentVersion": "1.0.0.0"
        }
      }
    }
  ],
  "outputs": {
  }
}

In PowerShell rufen Sie ein Token für den Container ab und stellen die Vorlagen mit folgenden Befehlen bereit.In PowerShell, you get a token for the container and deploy the templates with the following commands. Beachten Sie, dass der Parameter containerSasToken in der Vorlage definiert ist.Notice that the containerSasToken parameter is defined in the template. Es handelt sich nicht um einen Parameter im Befehl New-AzResourceGroupDeployment.It isn't a parameter in the New-AzResourceGroupDeployment command.

Set-AzCurrentStorageAccount -ResourceGroupName ManageGroup -Name storagecontosotemplates
$token = New-AzStorageContainerSASToken -Name templates -Permission r -ExpiryTime (Get-Date).AddMinutes(30.0)
$url = (Get-AzStorageBlob -Container templates -Blob parent.json).ICloudBlob.uri.AbsoluteUri
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateUri ($url + $token) -containerSasToken $token

Für die Azure CLI in einer Bash-Shell rufen Sie ein Token für den Container ab und stellen die Vorlagen mit folgendem Code bereit:For Azure CLI in a Bash shell, you get a token for the container and deploy the templates with the following code:

#!/bin/bash

expiretime=$(date -u -d '30 minutes' +%Y-%m-%dT%H:%MZ)
connection=$(az storage account show-connection-string \
    --resource-group ManageGroup \
    --name storagecontosotemplates \
    --query connectionString)
token=$(az storage container generate-sas \
    --name templates \
    --expiry $expiretime \
    --permissions r \
    --output tsv \
    --connection-string $connection)
url=$(az storage blob url \
    --container-name templates \
    --name parent.json \
    --output tsv \
    --connection-string $connection)
parameter='{"containerSasToken":{"value":"?'$token'"}}'
az group deployment create --resource-group ExampleGroup --template-uri $url?$token --parameters $parameter

BeispielvorlagenExample templates

Die folgenden Beispiele zeigen gängige Nutzungsszenarien für verknüpften Vorlagen.The following examples show common uses of linked templates.

HauptvorlageMain template Verknüpfte VorlageLinked template BESCHREIBUNGDescription
Hello WorldHello World Verknüpfte Vorlagelinked template Gibt eine Zeichenfolge aus der verknüpften Vorlage zurück.Returns string from linked template.
Lastenausgleich mit öffentlicher IP-AdresseLoad Balancer with public IP address Verknüpfte Vorlagelinked template Gibt die öffentliche IP-Adresse aus der verknüpften Vorlage zurück und legt diesen Wert im Lastenausgleichsmodul fest.Returns public IP address from linked template and sets that value in load balancer.
Mehrere IP-AdressenMultiple IP addresses Verknüpfte Vorlagelinked template Erstellt verschiedene öffentliche IP-Adressen in der verknüpften Vorlage.Creates several public IP addresses in linked template.

Nächste SchritteNext steps