자습서: 연결된 Azure Resource Manager 템플릿 만들기Tutorial: Create linked Azure Resource Manager templates

연결된 Azure Resource Manager 템플릿을 만드는 방법을 알아봅니다.Learn how to create linked Azure Resource Manager templates. 연결된 템플릿을 사용하여 하나의 템플릿이 다른 템플릿을 호출하도록 할 수 있습니다.Using linked templates, you can have one template call another template. 템플릿 모듈화에 적합합니다.It is great for modularizing templates. 이 자습서에서는 가상 머신, 가상 네트워크 및 스토리지 계정을 포함한 다른 종속 리소스를 만드는 자습서: 종속 리소스가 있는 Azure Resource Manager 템플릿 만들기에서 사용하는 것과 동일한 템플릿을 사용합니다.In this tutorial, you use the same template used in Tutorial: Create Azure Resource Manager templates with dependent resources, which creates a virtual machine, a virtual network, and other dependent resource including a storage account. 스토리지 계정 리소스 만들기를 연결된 템플릿으로 구분합니다.You separate the storage account resource creation to a linked template.

연결된 템플릿을 호출하는 것은 함수를 호출하는 것과 같습니다.Calling a linked template is like making a function call. 매개 변수 값을 연결된 템플릿에 전달하는 방법과 연결된 템플릿에서 "반환 값"을 가져오는 방법도 알아봅니다.You also learn how to pass parameter values to the linked template, and how to get "return values" from the linked template.

이 자습서에서 다루는 작업은 다음과 같습니다.This tutorial covers the following tasks:

  • 빠른 시작 템플릿 열기Open a QuickStart template
  • 연결된 템플릿 만들기Create the linked template
  • 연결된 템플릿 업로드Upload the linked template
  • 연결된 템플릿에 연결Link to the linked template
  • 종속성 구성Configure dependency
  • 템플릿 배포Deploy the template
  • 추가 사례Additional practices

자세한 내용은 Azure 리소스를 배포할 때 연결된 템플릿 및 중첩된 템플릿 사용을 참조하세요.For more information, see Use linked and nested templates when deploying Azure resources.

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.If you don't have an Azure subscription, create a free account before you begin.

참고

이 문서는 새 Azure PowerShell Az 모듈을 사용하도록 업데이트되었습니다.This article has been updated to use the new Azure PowerShell Az module. AzureRM 모듈은 적어도 2020년 12월까지 버그 수정을 수신할 예정이므로 계속 사용하셔도 됩니다.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. 새 Az 모듈 및 AzureRM 호환성에 대한 자세한 내용은 새 Azure PowerShell Az 모듈 소개를 참조하세요.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az 모듈 설치 지침은 Azure PowerShell 설치를 참조하세요.For Az module installation instructions, see Install Azure PowerShell.

필수 조건Prerequisites

이 문서를 완료하려면 다음이 필요합니다.To complete this article, you need:

빠른 시작 템플릿 열기Open a Quickstart template

Azure 퀵 스타트 템플릿은 Resource Manager 템플릿용 저장소입니다.Azure QuickStart Templates is a repository for Resource Manager templates. 템플릿을 처음부터 새로 만드는 대신 샘플 템플릿을 찾아서 사용자 지정할 수 있습니다.Instead of creating a template from scratch, you can find a sample template and customize it. 이 자습서에 사용되는 템플릿의 이름은 Deploy a simple Windows VM입니다.The template used in this tutorial is called Deploy a simple Windows VM. 이 템플릿은 자습서: 종속 리소스가 있는 Azure Resource Manager 템플릿 만들기에서 사용한 대로 Cloud Shell 배포 방법을 사용합니다.This is the same template used in Tutorial: Create Azure Resource Manager templates with dependent resources. 다음으로 사용될 동일한 두 개의 템플릿 복사본을 저장합니다.You save two copies of the same template to be used as:

  • 기본 템플릿: 스토리지 계정을 제외하고 모든 리소스를 만듭니다.The main template: create all the resources except the storage account.
  • 연결된 템플릿: 스토리지 계정을 만듭니다.The linked template: create the storage account.
  1. Visual Studio Code에서 파일>파일 열기를 차례로 선택합니다.From Visual Studio Code, select File>Open File.

  2. 파일 이름에서 다음 URL을 붙여넣습니다.In File name, paste the following URL:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-windows/azuredeploy.json
    
  3. 열기를 선택하여 파일을 엽니다.Select Open to open the file.

  4. 템플릿에 5개 리소스가 정의되어 있습니다.There are five resources defined by the template:

  5. 파일>다른 이름으로 저장을 선택하여 파일 복사본을 로컬 컴퓨터에 azuredeploy.json이라는 이름으로 저장합니다.Select File>Save As to save a copy of the file to your local computer with the name azuredeploy.json.

  6. 파일>이름으로 저장을 선택하여 linkedTemplate.json이라는 이름으로 다른 파일의 복사본을 만듭니다.Select File>Save As to create another copy of the file with the name linkedTemplate.json.

연결된 템플릿 만들기Create the linked template

연결된 템플릿은 스토리지 계정을 만듭니다.The linked template creates a storage account. 연결된 템플릿을 독립 실행형 템플릿으로 사용하여 스토리지 계정을 만들 수 있습니다.The linked template can be used as a standalone template to create a storage account. 이 자습서에서 연결된 템플릿은 두 개의 매개 변수를 사용하고 값을 기본 템플릿으로 다시 전달합니다.In this tutorial, the linked template takes two parameters, and passes a value back to the main template. 이 "반환" 값은 outputs 요소에서 정의됩니다.This "return" value is defined in the outputs element.

  1. 파일이 열려 있지 않은 경우 Visual Studio Code에서 linkedTemplate.json을 엽니다.Open linkedTemplate.json in Visual Studio Code if the file is not opened.

  2. 다음과 같이 변경합니다.Make the following changes:

    • location 이외의 모든 매개 변수를 제거합니다.Remove all the parameters other than location.

    • storageAccountName이라는 매개 변수를 추가합니다.Add a parameter called storageAccountName.

      "storageAccountName":{
        "type": "string",
        "metadata": {
            "description": "Azure Storage account name."
        }
      },
      

      스토리지 계정 이름과 위치는 기본 템플릿에서 연결된 템플릿으로 매개 변수로 전달됩니다.The storage account name and location are passed from the main template to the linked template as parameters.

    • variables 요소 및 모든 변수 정의를 제거합니다.Remove the variables element, and all the variable definitions.

    • 스토리지 계정 이외의 모든 리소스를 제거합니다.Remove all the resources other than the storage account. 총 4개의 리소스를 제거합니다.You remove a total of four resources.

    • 스토리지 계정 리소스의 name 요소 값을 다음으로 업데이트합니다.Update the value of the name element of the storage account resource to:

        "name": "[parameters('storageAccountName')]",
      
    • 출력 요소를 업데이트하면 다음과 같이 표시됩니다.Update the outputs element, so it looks like:

      "outputs": {
        "storageUri": {
            "type": "string",
            "value": "[reference(parameters('storageAccountName')).primaryEndpoints.blob]"
          }
      }
      

      storageUri는 기본 템플릿에서 가상 머신 리소스 정의에 필요합니다.storageUri is required by the virtual machine resource definition in the main template. 출력 값으로 기본 템플릿에 값을 다시 전달합니다.You pass the value back to the main template as an output value.

      완료되면 템플릿은 다음과 같습니다.When you are done, the template shall look like:

      {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "storageAccountName": {
            "type": "string",
            "metadata": {
              "description": "Azure Storage account name."
            }
          },
          "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
              "description": "Location for all resources."
            }
          }
        },
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[parameters('storageAccountName')]",
            "location": "[parameters('location')]",
            "apiVersion": "2018-07-01",
            "sku": {
              "name": "Standard_LRS"
            },
            "kind": "Storage",
            "properties": {}
          }
        ],
        "outputs": {
          "storageUri": {
            "type": "string",
            "value": "[reference(parameters('storageAccountName')).primaryEndpoints.blob]"
          }
        }
      }
      
  3. 변경 내용을 저장합니다.Save the changes.

연결된 템플릿 업로드Upload the linked template

기본 템플릿과 연결된 템플릿은 배포를 실행하는 위치에서 액세스할 수 있어야 합니다.The main template and the linked template need to be accessible from where you run the deployment. 이 자습서에서는 자습서: 종속 리소스가 있는 Azure Resource Manager 템플릿 만들기에서 사용한 대로 Cloud Shell 배포 방법을 사용합니다.In this tutorial, you use the Cloud shell deployment method as you used in Tutorial: Create Azure Resource Manager templates with dependent resources. 기본 템플릿(azuredeploy.json)이 셸에 업로드됩니다.The main template (azuredeploy.json) is uploaded to the shell. 연결된 템플릿(linkedTemplate.json)은 어딘가에서 안전하게 공유되어야 합니다.The linked template (linkedTemplate.json) must be shared somewhere securely. 다음 PowerShell 스크립트는 Azure Storage 계정을 만들고, 템플릿을 Storage 계정에 업로드한 다음, 템플릿 파일에 대해 제한된 액세스 권한을 부여하는 SAS 토큰을 생성합니다.The following PowerShell script creates an Azure Storage account, uploads the template to the Storage account, and then generates a SAS token to grant limited access to the template file. 자습서를 간단히 하기 위해 스크립트는 공유 위치에서 완성된 연결된 템플릿을 다운로드합니다.To simplify the tutorial, the script downloads a completed linked template from a shared location. 만든 연결된 템플릿을 사용하려면 Cloud Shell을 사용하여 연결된 템플릿을 업로드한 다음, 사용자 고유의 연결된 템플릿을 사용하도록 스크립트를 수정합니다.If you want to use the linked template you created, you can use the Cloud shell to upload your linked template, and then modify the script to use your own linked template.

참고

스크립트는 SAS 토큰을 8시간 이내에 사용하도록 제한합니다.The script limits the SAS token to be used within eight hours. 이 자습서를 완료하는 데 더 많은 시간이 필요한 경우 만료 시간을 늘립니다.If you need more time to complete this tutorial, increase the expiry time.

$projectNamePrefix = Read-Host -Prompt "Enter a project name:"   # This name is used to generate names for Azure resources, such as storage account name.
$location = Read-Host -Prompt "Enter a location (i.e. centralus)"

$resourceGroupName = $projectNamePrefix + "rg"
$storageAccountName = $projectNamePrefix + "store"
$containerName = "linkedtemplates" # The name of the Blob container to be created.

$linkedTemplateURL = "https://armtutorials.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json" # A completed linked template used in this tutorial.
$fileName = "linkedStorageAccount.json" # A file name used for downloading and uploading the linked template.

# Download the tutorial linked template
Invoke-WebRequest -Uri $linkedTemplateURL -OutFile "$home/$fileName"

# Create a resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location

# Create a storage account
$storageAccount = New-AzStorageAccount `
    -ResourceGroupName $resourceGroupName `
    -Name $storageAccountName `
    -Location $location `
    -SkuName "Standard_LRS"

$context = $storageAccount.Context

# Create a container
New-AzStorageContainer -Name $containerName -Context $context

# Upload the linked template
Set-AzStorageBlobContent `
    -Container $containerName `
    -File "$home/$fileName" `
    -Blob $fileName `
    -Context $context

# Generate a SAS token
$templateURI = New-AzStorageBlobSASToken `
    -Context $context `
    -Container $containerName `
    -Blob $fileName `
    -Permission r `
    -ExpiryTime (Get-Date).AddHours(8.0) `
    -FullUri

echo "You need the following values later in the tutorial:"
echo "Resource Group Name: $resourceGroupName"
echo "Linked template URI with SAS token: $templateURI"
  1. 사용해 보세요 녹색 단추를 선택하여 Azure Cloud Shell 창을 엽니다.Select the Try It green button to open the Azure cloud shell pane.
  2. 복사를 선택하여 PowerShell 스크립트를 복사합니다.Select Copy to copy the PowerShell script.
  3. 셸 창(군청색 부분) 내의 아무 곳을 마우스 오른쪽 단추로 클릭한 다음, 붙여넣기를 선택합니다.Right-click anywhere inside the shell pane (the navy blue part), and then select Paste.
  4. 셸 창의 끝에 있는 두 개의 값(리소스 그룹 이름 및 연결된 템플릿 URI)을 적어 둡니다.Make a note of the two values (Resource Group Name and Linked template URI) at the end of the shell pane. 이러한 값은 자습서의 뒷부분에서 필요합니다.You need the values later in the tutorial.
  5. 포커스 모드 종료를 선택하여 셸 창을 닫습니다.Select Exit focus mode to close the shell pane.

실제로 기본 템플릿을 배포할 때 SAS 토큰을 생성하고 SAS 토큰에 더 짧은 시간 범위의 만료 시간을 지정하여 보안을 강화합니다.In practice, you generate a SAS token when you deploy the main template, and give the SAS token expiry a smaller window to make it more secure. 자세한 내용은 배포하는 동안 SAS 토큰 제공을 참조하세요.For more information, see Provide SAS token during deployment.

연결된 템플릿 호출Call the linked template

기본 템플릿은 azuredeploy.json이라고 합니다.The main template is called azuredeploy.json.

  1. 열려 있지 않은 경우 Visual Studio Code에서 azuredeploy.json을 엽니다.Open azuredeploy.json in Visual Studio Code if it is not opened.

  2. 템플릿에서 스토리지 계정 리소스 정의를 삭제합니다.Delete the storage account resource definition from the template:

    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "apiVersion": "2018-07-01",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    },
    
  3. 스토리지 계정 정의가 있던 위치로 다음 json 코드 조각을 추가합니다.Add the following json snippet to the place where you had the storage account definition:

    {
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "properties": {
          "mode": "Incremental",
          "templateLink": {
              "uri":"https://armtutorials.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json"
          },
          "parameters": {
              "storageAccountName":{"value": "[variables('storageAccountName')]"},
              "location":{"value": "[parameters('location')]"}
          }
      }
    },
    

    다음 세부 사항에 주의하세요.Pay attention to these details:

    • 기본 템플릿의 Microsoft.Resources/deployments 리소스는 다른 템플릿에 연결하는 데 사용됩니다.A Microsoft.Resources/deployments resource in the main template is used to link to another template.
    • deployments 리소스는 linkedTemplate이라는 이름을 갖습니다.The deployments resource has a name called linkedTemplate. 이 이름은 종속성 구성에 사용됩니다.This name is used for configuring dependency.
    • 연결된 템플릿을 호출할 때 증분 배포 모드만 사용할 수 있습니다.You can only use Incremental deployment mode when calling linked templates.
    • templateLink/uri는 연결된 템플릿 URI를 포함합니다.templateLink/uri contains the linked template URI. 연결된 템플릿(SAS 토큰이 있는 템플릿)을 업로드할 때 얻을 수 있는 URI로 값을 업데이트합니다.Update the value to the URI you get when you upload the linked template (the one with a SAS token).
    • parameters를 사용하여 기본 템플릿의 값을 연결된 템플릿에 전달합니다.Use parameters to pass values from the main template to the linked template.
  4. 연결된 템플릿(SAS 토큰이 있는 값)을 업로드할 때 얻은 값으로 uri 요소의 값을 업데이트했는지 확인합니다.Make sure you have updated the value of the uri element to the value you got when you upload the linked template (the one with a SAS token). 실제로 URI를 매개 변수에 제공하려고 합니다.In practice, you want to supply the URI with a parameter.

  5. 수정된 템플릿을 저장합니다.Save the revised template

종속성 구성Configure dependency

자습서: 종속 리소스가 있는 Azure Resource Manager 템플릿 만들기를 다시 생각해 보면 가상 머신 리소스는 스토리지 계정에 따라 달라집니다.Recall from Tutorial: Create Azure Resource Manager templates with dependent resources, the virtual machine resource depends on the storage account:

Azure Resource Manager 템플릿 종속성 다이어그램

스토리지 계정은 이제 연결된 템플릿에서 정의되므로 Microsoft.Compute/virtualMachines 리소스의 다음 두 요소를 업데이트해야 합니다.Because the storage account is defined in the linked template now, you must update the following two elements of the Microsoft.Compute/virtualMachines resource.

  • dependOn 요소를 다시 구성합니다.Reconfigure the dependOn element. 스토리지 계정 정의가 연결된 템플릿으로 이동합니다.The storage account definition is moved to the linked template.

  • properties/diagnosticsProfile/bootDiagnostics/storageUri 요소를 다시 구성합니다.Reconfigure the properties/diagnosticsProfile/bootDiagnostics/storageUri element. 연결된 템플릿 만들기에서 출력 값을 추가했습니다.In Create the linked template, you added an output value:

    "outputs": {
        "storageUri": {
            "type": "string",
            "value": "[reference(parameters('storageAccountName')).primaryEndpoints.blob]"
            }
    }
    

    기본 템플릿에서 이 값은 필수입니다.This value is required by the main template.

  1. 열려 있지 않은 경우 Visual Studio Code에서 azuredeploy.json을 엽니다.Open azuredeploy.json in Visual Studio Code if it is not opened.

  2. 가상 머신 리소스 정의를 확장하고, 다음 스크린샷에 표시된 대로 dependsOn을 업데이트합니다.Expand the virtual machine resource definition, update dependsOn as shown in the following screenshot:

    종속성을 구성하는 Azure Resource Manager 연결된 템플릿

    linkedTemplate은 배포 리소스의 이름입니다.linkedTemplate is the name of the deployments resource.

  3. 이전 스크린샷과 같이 properties/diagnosticsProfile/bootDiagnostics/storageUri를 업데이트합니다.Update properties/diagnosticsProfile/bootDiagnostics/storageUri as shown in the previous screenshot.

  4. 수정된 템플릿을 저장합니다.Save the revised template.

템플릿 배포Deploy the template

배포 절차는 템플릿 배포 섹션을 참조하세요.Refer to the Deploy the template section for the deployment procedure. 연결된 템플릿을 저장하는 스토리지 계정과 동일한 리소스 그룹 이름을 사용합니다.Use the same resource group name as the storage account for storing the linked template. 이렇게 하면 다음 섹션에서 리소스를 더 쉽게 정리할 수 있습니다.It makes it easier to clean up resources in the next section. 보안을 강화하려면 가상 머신 관리자 계정에 생성된 암호를 사용합니다.To increase security, use a generated password for the virtual machine administrator account. 필수 조건을 참조하세요.See Prerequisites.

리소스 정리Clean up resources

Azure 리소스가 더 이상 필요하지 않은 경우 리소스 그룹을 삭제하여 배포한 리소스를 정리합니다.When the Azure resources are no longer needed, clean up the resources you deployed by deleting the resource group.

  1. Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택합니다.From the Azure portal, select Resource group from the left menu.
  2. 이름으로 필터링 필드에서 리소스 그룹 이름을 입력합니다.Enter the resource group name in the Filter by name field.
  3. 해당 리소스 그룹 이름을 선택합니다.Select the resource group name. 리소스 그룹에 총 6개의 리소스가 표시됩니다.You shall see a total of six resources in the resource group.
  4. 위쪽 메뉴에서 리소스 그룹 삭제를 선택합니다.Select Delete resource group from the top menu.

추가 사례Additional practice

프로젝트를 향상시키려면 완성된 프로젝트를 다음과 같이 추가로 변경합니다.To improve the project, make the following additional changes to the completed project:

  1. 매개 변수를 통해 연결된 템플릿 URI 값을 가져오도록 기본 템플릿(azuredeploy.json)을 수정합니다.Modify the main template (azuredeploy.json) so that it takes the linked template URI value via a parameter.
  2. 연결된 템플릿을 업로드할 때 SAS 토큰을 생성하는 대신, 기본 템플릿을 배포할 때 토큰을 생성합니다.Instead of generating a SAS token when you upload the linked template, generate the token when you deploy the main template. 자세한 내용은 배포하는 동안 SAS 토큰 제공을 참조하세요.For more information, see Provide SAS token during deployment.

다음 단계Next steps

이 자습서에서는 템플릿을 기본 템플릿과 연결된 템플릿으로 모듈화했습니다.In this tutorial, you modularized a template into a main template and a linked template. 가상 머신 확장을 사용하여 배포 후 작업을 수행하는 방법은 다음을 참조하세요.To learn how to use virtual machine extensions to perform post deployment tasks, see: