Azure 리소스를 배포할 때 연결 및 중첩된 템플릿 사용Using linked and nested templates when deploying Azure resources

솔루션을 배포하려면 단일 템플릿 또는 많은 관련 템플릿이 있는 주 템플릿 중 하나를 사용할 수 있습니다.To deploy your solution, you can use either a single template or a main template with many related templates. 관련 템플릿은 주 템플릿에 연결된 별도 파일이거나 주 템플릿 내에 중첩된 템플릿일 수 있습니다.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.

중소기업에게는 단일 템플릿이 더 간편하게 이해하고 유지 관리할 수 있습니다.For small to medium solutions, a single template is easier to understand and maintain. 모든 리소스 및 값을 단일 파일에서 볼 수 있습니다.You can see all the resources and values in a single file. 고급 시나리오의 경우 연결된 템플릿을 통해 솔루션을 대상 구상 요소로 분리하고 템플릿을 재사용할 수 있습니다.For advanced scenarios, linked templates enable you to break down the solution into targeted components, and reuse templates.

연결된 템플릿을 사용할 때는 배포 중에 매개 변수 값을 받는 기본 템플릿을 만듭니다.When using linked templates, you create a main template that receives the parameter values during deployment. 기본 템플릿은 연결된 모든 템플릿을 포함하여 필요에 따라 해당 템플릿에 값을 전달합니다.The main template contains all the linked templates and passes values to those templates as needed.

자습서의 경우 자습서: 연결된 Azure Resource Manager 템플릿 만들기를 참조하세요.For a tutorial, see Tutorial: create linked Azure Resource Manager templates.

참고

연결된 템플릿 또는 중첩된 템플릿의 경우 증분 배포 모드만 사용할 수 있습니다.For linked or nested templates, you can only use Incremental deployment mode.

다른 템플릿에 연결하려면 배포 리소스를 기본 템플릿에 추가합니다.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>
    }
  }
]

배포 리소스에 제공하는 속성은 외부 템플릿에 연결하는지 또는 기본 템플릿에 인라인 템플릿을 중첩하는지 여부에 따라 달라집니다.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.

중첩된 템플릿Nested template

템플릿을 주 템플릿 내에 중첩하려면 template 속성을 사용하고 템플릿 구문을 지정합니다.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"
            }
          }
        ]
      }
    }
  }
]

참고

중첩된 템플릿의 경우, 중첩된 템플릿 내에 정의된 매개 변수 또는 변수를 사용할 수 없습니다.For nested templates, you cannot use parameters or variables that are defined within the nested template. 주 템플릿의 매개 변수 및 변수를 사용할 수 있습니다.You can use parameters and variables from the main template. 앞의 예제에서 [variables('storageName')]은 중첩된 템플릿이 아닌 주 템플릿에서 값을 검색합니다.In the preceding example, [variables('storageName')] retrieves a value from the main template, not the nested template. 이러한 제한은 외부 템플릿에 적용되지 않습니다.This restriction does not apply to external templates.

중첩 된 템플릿 내에 정의 된 두 리소스에 대해 한 리소스가 다른 리소스에 종속 되는 경우 종속성의 값은 단순히 종속 리소스의 이름입니다.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')]"
],

중첩 된 템플릿에 배포한 reference 리소스에 대해 중첩 된 템플릿의 출력 섹션에서 함수를 사용할 수 없습니다.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. 중첩된 템플릿에서 배포된 리소스의 값을 반환하려면 중첩된 템플릿을 연결된 템플릿으로 변환합니다.To return the values for a deployed resource in a nested template, convert your nested template to a linked template.

중첩된 템플릿에는 표준 템플릿과 동일한 속성이 필요합니다.The nested template requires the same properties as a standard template.

외부 템플릿 및 외부 매개 변수External template and external parameters

외부 템플릿과 매개 변수 파일에 연결하려면 templateLinkparametersLink를 사용합니다.To link to an external template and parameter file, use templateLink and parametersLink. 템플릿에 연결할 때 Resource Manager 서비스가 해당 템플릿에 액세스할 수 있어야 합니다.When linking to a template, the Resource Manager service must be able to access it. 로컬 네트워크에서만 사용 가능한 파일이나 로컬 파일은 지정할 수 없습니다.You can't specify a local file or a file that is only available on your local network. http 또는 https 중 하나를 포함하는 URI 값만 제공할 수 있습니다.You can only provide a URI value that includes either http or https. 한 가지 옵션은 연결된 템플릿을 스토리지 계정에 배치하고 해당 항목의 URI를 사용하는 것입니다.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"
    }
    }
  }
]

템플릿 또는 매개 변수에 대한 contentVersion 속성을 제공하지 않아도 됩니다.You don't have to provide the contentVersion property for the template or parameters. 콘텐츠 버전 값을 제공하지 않으면 현재 버전의 템플릿이 배포됩니다.If you don't provide a content version value, the current version of the template is deployed. 콘텐츠 버전 값을 제공하는 경우에는 연결된 템플릿의 버전과 일치해야 합니다. 그렇지 않으면 오류와 함께 배포에 실패합니다.If you provide a value for content version, it must match the version in the linked template; otherwise, the deployment fails with an error.

외부 템플릿 및 인라인 매개 변수External template and inline parameters

또는 매개 변수를 인라인으로 제공할 수 있습니다.Or, you can provide the parameter inline. 인라인 매개 변수와 매개 변수 파일에 대한 링크를 둘 다 사용할 수는 없습니다.You can't use both inline parameters and a link to a parameter file. parametersLinkparameters를 둘 다 지정하면 오류를 발생하며 배포가 실패합니다.The deployment fails with an error when both parametersLink and parameters are specified.

기본 템플릿의 값을 연결된 템플릿에 전달하려면 매개 변수를 사용합니다.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')]"}
        }
     }
  }
]

Copy 사용Using copy

중첩 된 템플릿을 사용 하 여 리소스의 여러 인스턴스를 만들려면 Microsoft .resources/배포 리소스 수준에 copy 요소를 추가 합니다.To create multiple instances of a resource with a nested template, add the copy element at the level of the Microsoft.Resources/deployments resource.

다음 예제 템플릿에서는 중첩 된 템플릿과 함께 copy를 사용 하는 방법을 보여 줍니다.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
            //}
          }
        ]
      }
    }
  }
]

앞의 예제에서는 템플릿 링크에 대한 하드 코딩된 URL 값을 보여 주었습니다.The previous examples showed hard-coded URL values for the template links. 이 방법은 간단한 템플릿에는 적용될 수 있지만 대규모 모듈식 템플릿 집합으로 작업하는 경우에는 가능하지 않습니다.This approach might work for a simple template but it doesn't work well when working with a large set of modular templates. 대신, 주 템플릿에 대한 기본 URL을 보관하는 정적 변수를 만든 다음 해당 기본 URL에서 연결된 템플릿에 대한 URL을 동적으로 만들 수 있습니다.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. 이 방식의 경우 주 템플릿에서만 정적 변수를 변경하면 되므로 템플릿을 쉽게 이동하거나 분기할 수 있다는 장점이 있습니다.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. 주 템플릿은 분해된 템플릿 전체에서 올바른 URI를 전달합니다.The main template passes the correct URIs throughout the decomposed template.

다음 예제에서는 기본 URL을 사용하여 연결된 템플릿에 대한 두 개의 URL을 만드는 방법을 보여 줍니다(sharedTemplateUrlvmTemplate).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')]"
}

또한 deployment() 를 사용하여 현재 템플릿에 대한 기본 URL을 가져올 수 있으며 동일한 위치에 있는 다른 템플릿에 대한 URL를 가져올 수 있습니다.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. 이 방법은 템플릿 위치가 변경되거나 템플릿 파일에서 URL 하드 코딩을 방지하려는 경우 유용합니다.This approach is useful if your template location changes or you want to avoid hard coding URLs in the template file. templateLink 속성은 URL을 사용하여 원격 템플릿을 연결할 때만 반환됩니다.The templateLink property is only returned when linking to a remote template with a URL. 로컬 템플릿을 사용하는 경우 이 속성을 사용할 수 없습니다.If you're using a local template, that property isn't available.

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

연결된 템플릿에서 값 가져오기Get values from linked template

연결된 템플릿에서 출력 값을 가져오려면 "[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]".

연결된 템플릿에서 출력 속성을 가져올 때 속성 이름에 대시를 포함할 수 없습니다.When getting an output property from a linked template, the property name can't include a dash.

다음 예에서는 연결된 템플릿을 참조하고 출력 값을 가져오는 방법을 보여 줍니다.The following examples demonstrate how to reference a linked template and retrieve an output value. 연결된 템플릿이 간단한 메시지를 반환합니다.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"
        }
    }
}

주 템플릿은 연결된 템플릿을 배포하고 반환된 값을 가져옵니다.The main template deploys the linked template and gets the returned value. 배포 리소스를 이름으로 참조하고 연결된 템플릿에서 반환한 속성의 이름을 사용합니다.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]"
        }
    }
}

다른 리소스 형식과 마찬가지로 연결된 템플릿과 기타 리소스 간에 종속성을 설정할 수 있습니다.Like other resource types, you can set dependencies between the linked template and other resources. 따라서 다른 리소스에 연결된 템플릿의 출력 값이 필요한 경우 연결된 템플릿이 먼지 배포되었는지 확인해야 합니다.Therefore, when other resources require an output value from the linked template, make sure the linked template is deployed before them. 또는 연결된 템플릿이 다른 리소스에 종속될 경우 연결된 템플릿 이전에 다른 리소스가 배포되었는지 확인해야 합니다.Or, when the linked template relies on other resources, make sure other resources are deployed before the linked template.

다음 예제에서는 공개 IP 주소를 배포하고 리소스 ID를 반환하는 템플릿을 보여 줍니다.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'))]"
        }
    }
}

Load Balancer를 배포할 때 이전 템플릿의 공개 IP 주소를 사용하려면 템플릿에 연결하고 배포 리소스에서 종속성을 추가합니다.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. Load Balancer의 공개 IP 주소는 연결된 템플릿에서 값을 출력하도록 설정됩니다.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')]"}
                }
            }
        }
    ]
}

배포 기록의 연결 및 중첩된 템플릿Linked and nested templates in deployment history

Resource Manager는 각 템플릿을 배포 기록에서 별도 배포로 처리합니다.Resource Manager processes each template as a separate deployment in the deployment history. 따라서 3개의 연결 또는 중첩된 템플릿이 있는 주 템플릿은 배포 기록에 다음과 같이 나타납니다.Therefore, a main template with three linked or nested templates appears in the deployment history as:

배포 기록

기록에서 이러한 개별 항목을 사용하여 배포 후 출력 값을 가져올 수 있습니다.You can use these separate entries in the history to retrieve output values after the deployment. 다음 템플릿은 공개 IP 주소를 만들고 해당 IP 주소를 출력합니다.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]"
        }
    }
}

다음 템플릿은 위에 템플릿에 연결됩니다.The following template links to the preceding template. 세 개의 공개 IP 주소를 만듭니다.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())]"}
              }
            }
        }
    ]
}

배포 후 다음 PowerShell 스크립트를 통해 출력 값을 검색할 수 있습니다.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)"
}

또는 Bash 셸의 Azure CLI 스크립트: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

외부 템플릿 보호Securing an external template

연결된 템플릿은 외부에서 사용할 수 있어야 하지만 일반에 공개할 필요는 없습니다.Although the linked template must be externally available, it doesn't need to be generally available to the public. 스토리지 계정 소유자만 액세스할 수 있는 프라이빗 스토리지 계정에 템플릿을 추가할 수 있습니다.You can add your template to a private storage account that is accessible to only the storage account owner. 그런 다음 배포하는 동안 액세스할 수 있도록 공유 액세스 서명(SAS) 토큰을 만듭니다.Then, you create a shared access signature (SAS) token to enable access during deployment. 링크된 템플릿 URI에 SAS 토큰을 추가합니다.You add that SAS token to the URI for the linked template. 토큰이 보안 문자열로 전달되었지만 SAS 토큰을 포함한 링크된 템플릿 URI가 배포 작업에 로그됩니다.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. 노출을 최소화하려면 토큰에 만료 날짜를 설정합니다.To limit exposure, set an expiration for the token.

매개 변수 파일은 SAS 토큰으로 액세스를 제한할 수 있습니다.The parameter file can also be limited to access through a SAS token.

현재 Azure Storage 방화벽뒤에 있는 저장소 계정의 템플릿에 연결할 수 없습니다.Currently, you can't link to a template in a storage account that is behind an Azure Storage firewall.

다음 예제에서는 템플릿에 연결할 때 SAS 토큰을 전달하는 방법을 보여 줍니다.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": {
  }
}

PowerShell에서는 다음 명령을 사용하여 컨테이너용 토큰을 얻고 템플릿을 배포합니다.In PowerShell, you get a token for the container and deploy the templates with the following commands. containerSasToken 매개 변수는 템플릿에 정의됩니다.Notice that the containerSasToken parameter is defined in the template. 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

Bash 셸의 Azure CLI에서는 컨테이너용 토큰을 얻고 다음 코드를 사용하여 템플릿을 배포합니다.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

예제 템플릿Example templates

다음 예제에서는 연결된 템플릿의 일반적인 사용 방법을 보여 줍니다.The following examples show common uses of linked templates.

기본 템플릿Main template 연결된 템플릿Linked template DescriptionDescription
Hello WorldHello World 연결된 템플릿linked template 연결된 템플릿에서 문자열을 반환합니다.Returns string from linked template.
공용 IP 주소가 있는 Load BalancerLoad Balancer with public IP address 연결된 템플릿linked template 연결된 템플릿에서 공용 IP 주소를 반환하고 부하 분산 장치에서 해당 값을 설정합니다.Returns public IP address from linked template and sets that value in load balancer.
여러 IP 주소Multiple IP addresses 연결된 템플릿linked template 연결된 템플릿에서 여러 공용 IP 주소를 만듭니다.Creates several public IP addresses in linked template.

다음 단계Next steps