Share via


자습서: ARM 템플릿에 매개 변수 추가

이전 자습서에서는 템플릿에 Azure 스토리지 계정을 추가하여 배포하는 방법을 알아보았습니다. 이 자습서에서는 매개 변수를 추가하여 ARM 템플릿(Azure Resource Manager 템플릿)을 개선하는 방법을 알아봅니다. 이 지침을 완료하는 데 14분이 걸립니다.

필수 조건

리소스에 대한 자습서를 완료하는 것이 좋지만 필수는 아닙니다.

Visual Studio Code가 설치되어 있고 Azure Resource Manager Tools 확장 및 Azure PowerShell 또는 Azure CLI(명령줄 인터페이스)와 함께 작동해야 합니다. 자세한 내용은 템플릿 도구를 참조하세요.

템플릿 검토

이전 자습서의 끝 부분에 템플릿에는 다음 JSON 파일이 있습니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "{provide-unique-name}",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

이 템플릿에 문제가 있음을 알 수 있습니다. 스토리지 계정 이름이 하드 코딩되어 있습니다. 이 템플릿은 매번 동일한 스토리지 계정을 배포하는 데에만 사용할 수 있습니다. 다른 이름으로 스토리지 계정을 배포하려면 새 템플릿을 만들어야 합니다. 이는 배포를 자동화하기에 타당한 방법이 아닙니다.

템플릿을 재사용할 수 있도록 설정

템플릿을 재사용할 수 있도록, 스토리지 계정 이름을 전달하는 데 사용할 수 있는 매개 변수를 추가하겠습니다. 다음 예제에 강조 표시된 JSON 파일은 템플릿의 변경 내용을 보여줍니다. storageName 매개 변수는 문자열로 식별됩니다. 스토리지 계정 이름은 모두 소문자 또는 숫자이며 24자로 제한됩니다.

전체 파일을 복사하고 템플릿을 해당 콘텐츠로 바꿉니다.

{
  "$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
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

템플릿 배포

템플릿을 배포해보겠습니다. 다음 예제는 Azure CLI 또는 PowerShell을 사용하여 템플릿을 배포합니다. 스토리지 계정 이름을 배포 명령의 값 중 하나로 제공합니다. 스토리지 계정 이름에 대해 이전 자습서에서 사용한 것과 동일한 이름을 제공합니다.

리소스 그룹을 만들지 않은 경우 리소스 그룹 만들기를 참조하세요. 이 예제에서는 첫 번째 자습서에 표시된 대로 templateFile 변수를 템플릿 파일의 경로로 설정했다고 가정합니다.

New-AzResourceGroupDeployment `
  -Name addnameparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

리소스 업데이트 이해

이전에 사용한 것과 동일한 이름으로 스토리지 계정을 배포한 후 재배포가 리소스에 어떤 영향을 미치는지 궁금할 수 있습니다.

리소스가 이미 있고 속성의 변경 내용이 없으면 추가 작업이 필요하지 않습니다. 리소스가 존재하고 속성이 변경되면 업데이트됩니다. 리소스가 없으면 리소스가 만들어집니다.

템플릿을 이런 방식으로 처리하면 Azure 솔루션에 필요한 모든 리소스를 템플릿에 포함할 수 있습니다. 템플릿을 안전하게 재배포할 수 있고 필요한 경우에만 리소스가 변경되거나 생성된다는 것을 알 수 있습니다. 예를 들어 스토리지 계정에 파일을 추가한 경우 해당 파일을 손실하지 않고 스토리지 계정을 다시 배포할 수 있습니다.

환경에 따라 사용자 지정

매개 변수를 사용하여 특정 환경에 맞게 조정되는 값을 제공함으로써 배포를 사용자 지정할 수 있습니다. 예를 들어 개발, 테스트 및 프로덕션 환경에 배포하는지 여부에 따라 다른 값을 전달할 수 있습니다.

이전 템플릿은 항상 표준 LRS(로컬 중복 스토리지) Standard_LRS 계정을 배포합니다. 환경에 따라 다양한 SKU(Stock Keeping Unit)를 배포하는 유연성이 필요할 수도 있습니다. 다음 예제는 SKU에 대한 매개 변수를 추가하기 위한 변경 내용을 보여줍니다. 전체 파일을 복사하여 템플릿에 붙여넣습니다.

{
  "$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
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

storageSKU 매개 변수에 기본값이 있습니다. 배포에서 지정하지 않는 경우 이 값을 사용합니다. 허용되는 값 목록도 있습니다. 이 값은 스토리지 계정을 만드는 데 필요한 값과 일치합니다. 템플릿 사용자가 작동하는 SKU를 전달하도록 합니다.

템플릿 다시 배포

다시 배포할 준비가 되었습니다. 기본 SKU는 Standard_LRS로 설정되었으므로 매개 변수 값을 이미 제공했습니다.

New-AzResourceGroupDeployment `
  -Name addskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

참고 항목

배포에 실패한 경우 verbose 스위치를 사용하여 생성 중인 리소스에 대한 정보를 가져옵니다. 디버깅에 대한 자세한 정보를 보려면 debug 스위치를 사용합니다.

템플릿의 유연성을 보기 위해 다시 배포하겠습니다. 이번에는 SKU 매개 변수를 표준 GRS(지역 중복 스토리지) Standard_GRS로 설정합니다. 새 이름을 전달하여 다른 스토리지 계정을 만들거나 같은 이름을 사용하여 기존 스토리지 계정을 업데이트할 수 있습니다. 두 옵션 모두 괜찮습니다.

New-AzResourceGroupDeployment `
  -Name usenondefaultsku `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU Standard_GRS

마지막으로 한 가지 테스트를 더 실행하여 허용된 값에 속하지 않는 SKU를 전달하면 어떻게 되는지 살펴보겠습니다. 이 경우 템플릿 사용자가 basic이 SKU 중 하나라고 생각하는 시나리오를 테스트합니다.

New-AzResourceGroupDeployment `
  -Name testskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU basic

허용된 값을 제공하는 오류 메시지와 함께 명령이 즉시 실패합니다. ARM 프로세서는 배포가 시작되기 전에 오류를 찾습니다.

리소스 정리

다음 자습서로 이동하는 경우에는 리소스 그룹을 삭제할 필요가 없습니다.

지금 중지하는 경우에는 리소스 그룹을 삭제하여 배포된 리소스를 정리할 수 있습니다.

  1. Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택합니다.
  2. 모든 필드에 대한 필터... 텍스트 필드에 리소스 그룹 이름을 입력합니다.
  3. myResourceGroup 옆에 있는 확인란을 선택하고 myResourceGroup 또는 리소스 그룹 이름을 선택합니다.
  4. 위쪽 메뉴에서 리소스 그룹 삭제를 선택합니다.

다음 단계

매개 변수를 추가하여 첫 번째 자습서에서 만든 템플릿을 개선했습니다. 다음 자습서에서는 템플릿 함수에 대해 알아봅니다.