연습 - copy를 사용하여 반복 줄이기

완료됨

이 마지막 연습에서는 스토리지 계정을 계속 사용합니다. 이번에는 copy 구문을 사용하여 단일 정의에서 여러 스토리지 계정을 프로비저닝합니다.

Copy는 단일 중앙 위치를 제공하며 요구 사항이 변경될 때 이를 업데이트해야 합니다.

ARM 템플릿 만들기

여기서는 스토리지 계정 리소스를 정의하는 ARM(Azure Resource Manager) 템플릿을 만듭니다. 템플릿은 copy를 사용하여 동일한 리소스의 비슷한 버전을 지정된 횟수만큼 만듭니다.

  1. Visual Studio Code에서 azuredeploy.json이 포함된 디렉터리에서 copy.json이라는 파일을 만듭니다.

  2. copy.json에 다음 내용을 추가합니다.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageCount": {
          "type": "int",
          "defaultValue": 1,
          "metadata": {
            "description": "the number of storage accounts copies being deployed"
          }
        },
        "storageAccountName": {
          "type": "string",
          "defaultValue": "storage",
          "metadata": {
            "description": "the name of the storage account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[concat(parameters('storageAccountName'), copyIndex())]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "storageaccount1"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          },
          "copy": {
            "name": "storagecopy",
            "count": "[parameters('storageCount')]"
          }
        }
      ],
      "outputs": {}
    }
    

storageCount 매개 변수는 만들 복사본 수를 정의합니다.

resources에서 스토리지 계정 리소스를 확인합니다. 스토리지 계정 이름을 고유하게 만들기 위해 템플릿은 copyIndex()를 사용하여 스토리지 계정 이름에 현재 인덱스를 추가합니다.

copy 섹션은 storageCount 매개 변수에서 만들 복사본 수를 읽습니다.

템플릿 배포

여기서는 이전과 같이 템플릿을 배포합니다. 배포 단계가 두 개의 비슷한 스토리지 계정을 프로비전합니다.

  1. 스토리지 계정 이름을 포함하는 PowerShell 변수를 만듭니다.

    $STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
    
  2. 다음 New-AzResourceGroupDeployment 명령을 실행하여 템플릿을 배포합니다.

    New-AzResourceGroupDeployment `
    -TemplateFile "./copy.json" `
    -storageAccountName $STORAGE_ACCT_NAME `
    -storageCount 2
    

    여기서는 storageCount2로 설정하여 두 개의 스토리지 계정을 프로비저닝합니다.

배포 확인

출력에는 두 개의 스토리지 계정이 생성된 것으로 표시되지만 여기서는 Get-AzResource 명령을 실행하여 출력 리소스에 초점을 맞춥니다.

다음 Get-AzResource 명령을 실행하여 리소스가 배포되었는지 확인합니다.

Get-AzResource -Name tailwindsa* -ResourceGroupName <rgn>resource group name</rgn> | Select-Object -Property Name,ResourceId

tailwindsa* 인수는 리소스에 지정한 이름 접두사와 일치하는 식별자만 표시하도록 지정합니다.

출력은 다음과 비슷합니다.

Name                 ResourceId
----                 ----------
tailwindsa1852777810 /subscriptions/11112222-3333-4444-5555-1111222233334444/resourceGroups/<rgn>resoure group</rgn>/providers/Microsoft.Storage/storageAccount…
tailwindsa1852777811 /subscriptions/11112222-3333-4444-5555-1111222233334444/resourceGroups/<rgn>resoure group</rgn>/providers/Microsoft.Storage/storageAccount…

이 예제에 대한 설명:

  • tailwindsa185277781은 스토리지 계정에 대해 생성된 기본 이름입니다("tailwindsa" + Get-Random -Count 1).
  • tailwindsa1852777810(기본 이름 + "0")은 첫 번째 스토리지 계정입니다.
  • tailwindsa1852777811(기본 이름 + "1")은 두 번째 스토리지 계정입니다.

잘했습니다! 필요한 성능 계층 등의 요구 사항이 변경되면 단일 위치에서 리소스 정의를 수정할 수 있습니다.

정리

이 모듈을 마치면 샌드박스가 자동으로 리소스를 정리합니다.

본인 소유의 구독으로 이 모듈을 진행하고 있는 경우에는 프로젝트가 끝날 때 여기에서 만든 리소스가 계속 필요한지 확인하는 것이 좋습니다. 계속 실행중인 리소스에는 비용이 부과될 수 있습니다. 리소스를 개별적으로 삭제하거나 리소스 그룹을 삭제하여 전체 리소스 세트를 삭제할 수 있습니다.

ARM 템플릿 만들기

여기서는 스토리지 계정 리소스를 정의하는 ARM(Azure Resource Manager) 템플릿을 만듭니다. 템플릿은 copy를 사용하여 동일한 리소스의 비슷한 버전을 지정된 횟수만큼 만듭니다.

  1. Visual Studio Code에서 azuredeploy.json이 포함된 디렉터리에서 copy.json이라는 파일을 만듭니다.

  2. copy.json에 다음 내용을 추가합니다.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageCount": {
          "type": "int",
          "defaultValue": 1,
          "metadata": {
            "description": "the number of storage accounts being deployed"
          }
        },
        "storageAccountName": {
          "type": "string",
          "defaultValue": "storage",
          "metadata": {
            "description": "the name of the storage account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[concat(parameters('storageAccountName'), copyIndex())]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "storageaccount1"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          },
          "copy": {
            "name": "storagecopy",
            "count": "[parameters('storageCount')]"
          }
        }
      ],
      "outputs": {}
    }
    

storageCount 매개 변수는 만들 복사본 수를 정의합니다.

resources에서 스토리지 계정 리소스를 확인합니다. 스토리지 계정 이름을 고유하게 만들기 위해 템플릿은 copyIndex()를 사용하여 스토리지 계정 이름에 현재 인덱스를 추가합니다.

copy 섹션은 storageCount 매개 변수에서 만들 복사본 수를 읽습니다.

템플릿 배포

여기서는 이전과 같이 템플릿을 배포합니다. 배포 단계가 두 개의 비슷한 스토리지 계정을 프로비전합니다.

  1. 스토리지 계정 이름을 포함하는 Bash 변수를 만듭니다.

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    
  2. 다음 az deployment group create 명령을 실행하여 템플릿을 배포합니다.

    az deployment group create \
      --template-file copy.json \
      --parameters storageAccountName=$STORAGE_ACCT_NAME storageCount=2
    

    여기서는 storageCount2로 설정하여 두 개의 스토리지 계정을 프로비저닝합니다.

배포 확인

출력에는 두 개의 스토리지 계정이 생성된 것으로 표시되지만 여기서는 az deployment group show 명령을 실행하여 출력 리소스에 초점을 맞춥니다.

다음 az deployment group show 명령을 실행하여 배포 세부 정보를 표시합니다.

az deployment group show \
  --name copy \
  --query "properties.outputResources[].id" \
  --output tsv

--query 인수는 출력 리소스의 식별자만 표시하도록 지정합니다.

출력은 다음과 비슷합니다.

/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9820
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9821

이 예제에 대한 설명:

  • tailwindsa982는 스토리지 계정에 대해 생성된 기본 이름입니다(tailwindsa$RANDOM).
  • tailwindsa9820(기본 이름 + "0")은 첫 번째 스토리지 계정입니다.
  • tailwindsa9821(기본 이름 + "1")은 두 번째 스토리지 계정입니다.

잘했습니다! 필요한 성능 계층 등의 요구 사항이 변경되면 단일 위치에서 리소스 정의를 수정할 수 있습니다.

정리

이 모듈을 마치면 샌드박스가 자동으로 리소스를 정리합니다.

본인 소유의 구독으로 이 모듈을 진행하고 있는 경우에는 프로젝트가 끝날 때 여기에서 만든 리소스가 계속 필요한지 확인하는 것이 좋습니다. 계속 실행중인 리소스에는 비용이 부과될 수 있습니다. 리소스를 개별적으로 삭제하거나 리소스 그룹을 삭제하여 전체 리소스 세트를 삭제할 수 있습니다.