연습 - 연결 및 중첩된 ARM 템플릿 배포

완료됨

참고

처음으로 샌드박스를 활성화하고 약관에 동의하면 Microsoft 계정이 Microsoft Learn 샌드박스라는 새로운 Azure 디렉터리와 연결됩니다. 사용자는 Concierge Subscription이라는 특수 구독에 추가됩니다.

여기서는 제공된 샌드박스 환경에서 두 개의 연결된 템플릿을 포함하는 템플릿을 배포합니다.

이 연습에서는 Visual Studio Code용 Azure Resource Manager 도구를 사용합니다. Visual Studio Code에서 해당 확장을 설치해야 합니다.

제공된 Azure 샌드박스 구독을 사용하여 테스트 환경 설정

이 단원에서 각 배포를 수행하려면 Visual Studio Code 터미널에서 Azure 계정에 로그인해야 합니다.

샌드박스를 활성화한 동일한 계정에 로그인해야 합니다.

Azure에 로그인

  1. Visual Studio Code의 터미널에서 다음 명령을 실행하여 Azure에 로그인합니다. 이 명령을 실행하면 계정에 로그인할 수 있는 브라우저가 열립니다.

    Connect-AzAccount
    
  2. 로그인하면 터미널에 계정과 연결된 구독 목록이 표시됩니다. 샌드박스를 활성화한 경우 컨시어지 구독이 해당 목록에 있습니다.

  3. 구독 ID를 복사합니다. 다음 명령은 읽기 쉬운 테이블 형식으로 구독 및 해당 ID를 나열합니다. 구독 ID는 두 번째 열입니다. Concierge Subscription을 찾고 두 번째 열을 복사합니다. cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0과 같이 표시됩니다.

    Get-AzSubscription
    
  4. 활성 구독을 Concierge Subscription으로 변경합니다. {Your subscription ID}를 이전 명령에서 얻은 컨시어지 구독의 ID로 대체해야 합니다.

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

기본 리소스 그룹 설정

이제 샌드박스 환경에서 생성된 리소스 그룹을 기본 리소스 그룹으로 설정해야 합니다. 해당 작업을 수행하려면 먼저 다음 명령을 사용하여 리소스 그룹 이름을 가져와야 합니다.

Get-AzResourceGroup

이 명령에는 이전 명령에서 가져온 리소스 이름을 사용합니다. learn-a73131a1-b618-48b8-af70-21af7ca420c4과 같이 표시됩니다. 이 명령을 사용하면 연습의 나머지 Azure PowerShell 명령에서 해당 매개 변수를 생략할 수 있습니다.

참고 항목

일반적으로 PowerShell 또는 Azure CLI 명령을 사용하여 템플릿을 배포하는 경우 대상 리소스 그룹 이름을 지정해야 합니다. 이 모듈의 연습에서는 배포 컨텍스트를 설정하여 요구 사항을 무시합니다. Set-AzDefault PowerShell 명령을 사용하여 다음 단계에서 샌드박스 리소스 그룹 이름을 지정합니다.

Set-AzDefault -ResourceGroupName {Resource Group Name}

연결된 템플릿 배포

이 연습에서는 두 개의 연결된 템플릿을 포함하는 템플릿을 검토하고 배포합니다.

  1. ARM 템플릿에 연결된 템플릿을 추가하려면 Microsoft.Resources/deployments 리소스 및 templateLink 속성(템플릿 위치로 구성됨)을 추가합니다.

  2. 다음 샘플 템플릿에서는 두 개의 변수가 GitHub 리포지토리에 있는 원격 또는 외부 템플릿을 정의합니다.

    템플릿을 검토하고 연결된 템플릿이 배포되는 위치와 방법을 정의하는 "type": "Microsoft.Resources/deployments" 섹션을 확인합니다.

    첫 번째 연결된 템플릿은 스토리지 계정을 배포합니다. 부모 매개 변수를 사용하고 스토리지 템플릿을 배포합니다.

    두 번째 연결된 템플릿은 스토리지 배포에 따라 달라지고 가상 네트워크 템플릿을 배포하도록 구성됩니다.

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
        {
            "name": "storage",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "location": { "value": "[resourceGroup().location]" }
                }
            }
        },
        {
            "name": "identity",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/deployments','storage')]"
            ],
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template-2')]",
                    "contentVersion": "1.0.0.0"
                }
            }
        }
    ],
    "outputs": {}
    }
    
  3. 이전 템플릿의 콘텐츠를 복사하고 로컬 디렉터리의 파일에 붙여넣습니다. 예를 들어 C:\JSON\linkedtemplate.json을 사용합니다.

  4. 파일을 로컬로 저장한 후 다음 PowerShell 명령을 사용하여 마지막 단원에서 설명한 리소스 그룹 수준에서 파일을 배포합니다. 즉, New-AzResourceGroupDeployment를 사용합니다.

        $templateFile="C:\JSON\linkedtemplate.json"
        $today=Get-Date -Format "MM-dd-yyyy"
        $DeploymentName="DeployLinkedTemplate-"+"$today"
    
        New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile
    

    완료된 후 다음 예와 같은 결과가 표시됩니다.

    연결된 템플릿 배포의 결과.

  5. 결과의 유효성을 검사합니다.

    1. Azure Portal로 이동하여 샌드박스 구독에 있는지 확인합니다. 확인하려면 페이지의 오른쪽 위에 있는 아바타를 선택합니다. 디렉터리 전환을 선택합니다. 목록에서 Microsoft Learn 샌드박스 디렉터리를 선택합니다.

    2. 왼쪽 창에서 리소스 그룹을 선택합니다.

    3. [샌드박스 리소스 그룹 이름]을 선택합니다.

    4. 개요 영역에서 배포가 성공한 것을 확인할 수 있습니다. ‘3 성공’을 선택하여 배포 세부 정보를 확인합니다. 이전 단원의 연습을 수행했는지 여부에 따라 완료된 배포가 더 많을 수 있습니다.

    배포 하나가 나열되고 성공한 상태가 포함된 배포의 Azure Portal 인터페이스.

    하나의 템플릿을 배포했지만 포털의 배포 창에 세 개의 배포가 나열됩니다. 세 개의 배포는 주 템플릿 및 두 개의 연결된 템플릿에 해당합니다.

    리소스가 나열되지 않은 특정 배포의 Azure Portal 인터페이스.

Azure에 로그인

  1. Visual Studio Code의 터미널에서 다음 명령을 실행하여 Azure에 로그인합니다. 이 명령을 실행하면 계정에 로그인할 수 있는 브라우저가 열립니다.

    az login
    
  2. 로그인하면 터미널에 계정과 연결된 구독의 JSON 목록이 표시됩니다. 샌드박스를 활성화한 경우 컨시어지 구독이 해당 목록에 있습니다.

  3. 구독 ID를 복사합니다. 다음 명령은 구독과 해당 ID를 나열합니다. 구독 ID는 세 번째 열입니다. Concierge Subscription을 찾고 세 번째 열을 복사합니다. cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0과 같이 표시됩니다.

    az account list -o table
    
  4. 활성 구독을 Concierge Subscription으로 변경합니다. {Your subscription ID}를 이전 명령에서 얻은 컨시어지 구독의 ID로 대체해야 합니다.

    az account set -s {Your subscription ID}
    

기본 리소스 그룹 설정

이제 샌드박스 환경에서 생성된 리소스 그룹을 기본 리소스 그룹으로 설정해야 합니다. 해당 작업을 수행하려면 먼저 다음 명령을 사용하여 리소스 그룹 이름을 가져와야 합니다.

az group list -o table

이 명령에서는 이전 명령에서 얻은 리소스 그룹의 이름을 사용합니다. learn-a73131a1-b618-48b8-af70-21af7ca420c4와 같이 표시됩니다. 이 기본값을 설정하면 이 연습의 나머지 Azure CLI 명령에서 해당 매개 변수를 생략할 수 있습니다.

참고 항목

일반적으로 Azure CLI 명령을 사용하여 템플릿을 배포하는 경우 대상 리소스 그룹 이름을 지정해야 합니다. 이 모듈의 연습에서는 배포 컨텍스트를 설정하여 요구 사항을 무시합니다. az configure Azure CLI 명령을 사용하여 다음 단계에서 샌드박스 리소스 그룹 이름을 지정합니다.

az configure --defaults group={Resource Group Name}

연결된 템플릿 배포

이 연습에서는 두 개의 연결된 템플릿을 포함하는 템플릿을 검토하고 배포합니다.

  1. ARM 템플릿에 연결된 템플릿을 추가하려면 Microsoft.Resources/deployments 리소스 및 templateLink 속성(템플릿 위치로 구성됨)을 추가합니다.

  2. 다음 샘플 템플릿에서는 두 개의 변수가 GitHub 리포지토리에 있는 원격 또는 외부 템플릿을 정의합니다.

    템플릿을 검토하고 연결된 템플릿이 배포되는 위치와 방법을 정의하는 "type": "Microsoft.Resources/deployments" 섹션을 확인합니다.

    첫 번째 연결된 템플릿은 스토리지 계정을 배포합니다. 부모 매개 변수를 사용하고 스토리지 템플릿을 배포합니다.

    두 번째 연결된 템플릿은 스토리지 배포에 따라 달라지고 가상 네트워크 템플릿을 배포하도록 구성됩니다.

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
      {
          "name": "storage",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template')]",
                  "contentVersion": "1.0.0.0"
              },
              "parameters": {
                  "location": { "value": "[resourceGroup().location]" }
              }
          }
      },
      {
          "name": "identity",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "dependsOn": [
              "[resourceId('Microsoft.Resources/deployments','storage')]"
          ],
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template-2')]",
                  "contentVersion": "1.0.0.0"
              }
          }
      }
    ],
    "outputs": {}
    }
    
  3. 이전 템플릿의 콘텐츠를 복사하고 로컬 디렉터리의 파일에 붙여넣습니다. 예를 들어 C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json을 사용합니다.

  4. 해당 파일을 로컬에 저장한 후 다음 Azure CLI 명령을 사용하여 리소스 그룹 수준에서 배포합니다. 즉, az deployment group create를 사용합니다.

    templateFile=/mnt/c/Users/<UserName>/json/linkedtemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-3-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile
    

    완료된 후 다음 예제와 같은 결과가 표시됩니다. "provisioningState" 값을 확인하여 배포에 성공했는지 확인합니다.

    {- Finished ..
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-3-2020-08-19",
      "properties": {
        "correlationId": "f127f689-badf-4063-ad55-dff549e63e48",
        "debugSetting": null,
        "dependencies": [
          {
            "dependsOn": [
              {
                "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/storage",
                "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
                "resourceName": "storage",
                "resourceType": "Microsoft.Resources/deployments"
              }
            ],
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/identity",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
            "resourceName": "identity",
            "resourceType": "Microsoft.Resources/deployments"
          }
        ],
        "duration": "PT16.4639167S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Network/virtualNetworks/vnet-001",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          },
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          }
        ],
        "outputs": {},
        "parameters": {
          "name": {
            "type": "String",
            "value": "linkeddemo001"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Resources",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  null
                ],
                "properties": null,
                "resourceType": "deployments"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "12700491000282730217",
        "templateLink": null,
        "timestamp": "2020-08-19T21:07:18.729310+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    
  5. 결과의 유효성을 검사합니다.

    1. Azure Portal로 이동하여 샌드박스 구독에 있는지 확인합니다. 확인하려면 페이지의 오른쪽 위에 있는 아바타를 선택합니다. 디렉터리 전환을 선택합니다. 목록에서 Microsoft Learn 샌드박스 디렉터리를 선택합니다.

    2. 왼쪽 창에서 리소스 그룹을 선택합니다.

    3. [샌드박스 리소스 그룹 이름]을 선택합니다.

    4. 개요 영역에 배포가 성공한 것을 확인할 수 있습니다. ‘3 성공’을 선택하여 배포 세부 정보를 확인합니다. 이전 단원의 연습을 수행했는지 여부에 따라 완료된 배포가 더 많을 수 있습니다.

    배포 하나가 나열되고 성공한 상태가 포함된 배포의 Azure Portal 인터페이스.

    하나의 템플릿을 배포했지만 포털의 배포 창에 세 개의 배포가 나열됩니다. 세 개의 배포는 주 템플릿 및 두 개의 연결된 템플릿에 해당합니다.

    리소스가 나열되지 않은 특정 배포의 Azure Portal 인터페이스.