연습 - Azure Resource Manager 템플릿에 매개 변수 및 출력 추가

완료됨

이 연습에서는 배포하는 동안 Azure 스토리지 계정 이름을 정의하는 매개 변수를 추가합니다. 그런 다음 허용되는 스토리지 계정 SKU를 정의하고 이 배포에 사용할 것을 정의하는 매개 변수를 추가합니다. 또한 배포 프로세스에서 나중에 사용할 수 있는 출력을 추가하여 ARM 템플릿(Azure Resource Manager 템플릿)에 유용성을 더합니다.

ARM 템플릿의 매개 변수 만들기

여기서는 런타임에 설정할 수 있는 매개 변수를 추가하여 ARM 템플릿의 유연성을 높일 것입니다. storageName 값의 매개 변수를 만듭니다.

  1. Visual Studio Code의 azuredeploy.json 파일에서 parameters 특성의 괄호 안에 커서를 놓습니다. 이는 "parameters":{},와 같습니다.

  2. Enter 키를 선택하고 par을 입력합니다. 관련된 코드 조각 목록이 표시됩니다. 템플릿에 제네릭 매개 변수를 추가하는 new-parameter를 선택합니다. 앱은 다음과 같은 모양입니다.

     "parameters": {
        "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
      }
    },
    
  3. 매개 변수를 parameter1에서 storageName으로 변경하고 유형을 문자열로 유지합니다. minLength3maxLength24를 추가합니다. Azure 스토리지 리소스 이름의 설명 값을 추가합니다.

  4. 매개 변수 블록은 다음과 같이 표시됩니다.

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. namedisplayName 값에서 둘 다 resources 블록에 새 매개 변수를 사용합니다. 전체 파일은 다음과 같이 표시됩니다.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[parameters('storageName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS",
            "tier": "Standard"
          }
        }
      ],
      "outputs": {}
    }
    
  6. 파일을 저장합니다.

매개 변수가 있는 ARM 템플릿 배포

여기에서 해당 배포가 수행하는 작업을 더 잘 반영하도록 배포 이름을 변경하고 새 매개 변수의 값을 입력합니다.

터미널에서 다음 Azure CLI 명령을 실행합니다. 코드 조각은 이전에 사용한 것과 동일한 코드이지만, 배포 이름이 변경되었습니다. storageName 매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 앞 단원에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today

az deployment group create \
  --name $DeploymentName \
  --template-file $templateFile \
  --parameters storageName={your-unique-name}

터미널에서 다음 Azure PowerShell 명령을 실행합니다. 코드 조각은 이전에 사용한 것과 동일한 코드이지만, 배포 이름이 변경되었습니다. storageName 매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 앞 단원에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.

$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -TemplateFile $templateFile `
  -storageName {your-unique-name}

배포 확인

  1. 배포가 완료되면 브라우저의 Azure Portal로 돌아갑니다. 리소스 그룹으로 이동하고 이제 세 개의 성공한 배포가 있는지 확인합니다. 해당 링크를 선택합니다.

    세 개의 배포가 모두 목록에 있습니다.

  2. 앞에서 살펴본 것처럼 addnameparameter 배포를 살펴봅니다.

허용되는 값을 제한하는 다른 매개 변수 추가

여기에서는 매개 변수를 사용하여 매개 변수에 허용되는 값을 제한합니다.

  1. storageName 매개 변수의 닫는 괄호 뒤에 커서를 놓습니다. 쉼표를 추가하고 Enter 키를 선택합니다.

  2. 다시 par을 입력하고 new-parameter를 선택합니다.

  3. 새 제네릭 매개 변수를 다음으로 변경합니다.

    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

    여기에서 해당 매개 변수가 허용할 값을 나열합니다. 허용되지 않는 값으로 템플릿이 실행되면 배포에 실패합니다.

  4. 해당 매개 변수에 주석을 추가합니다.

    Screenshot of the azuredeploy.json file showing the comment This is the allowed values for an Azure storage account in the line preceding the storageSKU parameter.

    ARM 템플릿은 ///* */ 주석을 지원합니다.

  5. storageSKU 매개 변수를 사용하도록 resources를 업데이트합니다. Visual Studio Code에서 IntelliSense를 활용하여 이 단계를 보다 쉽게 수행할 수 있습니다.

    "sku": {
         "name": "[parameters('storageSKU')]"
       }
    

    전체 파일은 다음과 같이 표시됩니다.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        },
        "storageSKU": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_RAGRS",
            "Standard_ZRS",
            "Premium_LRS",
            "Premium_ZRS",
            "Standard_GZRS",
            "Standard_RAGZRS"
          ]
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[parameters('storageName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]",
            "tier": "Standard"
          }
        }
      ],
      "outputs": {}
    }
    
  6. 파일을 저장합니다.

ARM 템플릿 배포

여기에서 허용 목록에 있는 storageSKU 매개 변수를 사용하여 성공적으로 배포합니다. 그런 다음 허용 목록에 없는 storageSKU 매개 변수를 사용하여 템플릿 배포를 시도합니다. 두 번째 배포는 예상대로 실패합니다.

  1. 다음 명령을 실행하여 템플릿을 배포합니다. storageName 매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_GRS storageName={your-unique-name}
    

    해당 배포를 완료합니다. 배포가 예상대로 성공합니다. 이 허용되는 값으로 인해 템플릿의 사용자가 리소스에서 작동하지 않는 매개 변수 값을 전달할 수 없습니다. 잘못된 SKU를 제공하면 어떻게 되는지 살펴보겠습니다.

  2. 다음 명령을 실행하여 허용되지 않는 매개 변수로 템플릿을 배포합니다. storageSKU 매개 변수를 Basic으로 변경했습니다. storageName 매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Basic storageName={your-unique-name}
    

    해당 배포가 실패합니다. 오류를 확인합니다.

    Screenshot of the Terminal window showing the deployment validation error.

  1. 다음 명령을 실행하여 템플릿을 배포합니다. storageName 매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_GRS
    

    해당 배포를 완료합니다. 배포가 예상대로 성공합니다. 이 허용되는 값으로 인해 템플릿의 사용자가 리소스에서 작동하지 않는 매개 변수 값을 전달할 수 없습니다. 잘못된 SKU를 제공하면 어떻게 되는지 살펴보겠습니다.

  2. 다음 명령을 실행하여 허용되지 않는 매개 변수로 템플릿을 배포합니다. storageSKU 매개 변수를 Basic으로 변경했습니다. storageName 매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Basic
    

    해당 배포가 실패합니다. 오류를 확인합니다.

    Screenshot of the Terminal window showing the deployment validation error.

ARM 템플릿에 출력 추가

여기서는 ARM 템플릿의 outputs 섹션에 추가하여 스토리지 계정 리소스의 엔드포인트를 출력합니다.

  1. Visual Studio Code의 azuredeploy.json 파일에서 outputs 특성 "outputs":{},의 괄호 안에 커서를 놓습니다.

  2. Enter 키를 누르고 out을 입력하면 관련된 코드 조각 목록이 표시됩니다. new-output을 선택합니다. 이렇게 하면 제네릭 출력이 변수가 템플릿에 추가됩니다. 다음과 같이 표시됩니다.

    "outputs": {
      "output1": {
        "type": "string",
        "value": "value"
      }
    
  3. "output1""storageEndpoint"로 변경한 다음 type 값을 "object"로 변경합니다. value 값을 "[reference(parameters('storageName')).primaryEndpoints]"로 변경합니다. 이 식은 앞 단원에서 설명한 엔드포인트 데이터를 가져오는 식입니다. object를 형식으로 지정했으므로 JSON 형식으로 개체가 반환됩니다.

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. 파일을 저장합니다.

출력을 사용하여 ARM 템플릿 배포

여기서는 템플릿을 배포하고 엔드포인트 출력을 JSON으로 확인합니다. storageName 매개 변수의 고유한 이름을 입력해야 합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.

  1. 다음 명령을 실행하여 템플릿을 배포합니다. {your-unique-name}을 고유한 문자열로 바꿔야 합니다.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addoutputs-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_LRS storageName={your-unique-name}
    

    출력을 확인합니다.

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

  1. 다음 명령을 실행하여 템플릿을 배포합니다. {your-unique-name}을 고유한 문자열로 바꿔야 합니다.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addOutputs-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_LRS
    

    출력을 확인합니다.

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

출력 배포 확인

Azure Portal에서 addOutputs 배포로 이동합니다. 여기에서 출력도 찾을 수 있습니다.

Screenshot of the Azure portal showing the output selection in the left menu.