매개 변수 및 출력을 사용하여 Azure Resource Manager 템플릿의 유연성 강화

완료됨

마지막 단원에서 ARM(Azure Resource Manager) 템플릿을 만들고 ARM 템플릿에 Azure Storage 계정을 추가했습니다. 템플릿에 문제가 있음을 알 수 있습니다. 스토리지 계정 이름이 하드 코딩되어 있습니다. 이 템플릿은 매번 동일한 스토리지 계정을 배포하는 데에만 사용할 수 있습니다. 다른 이름으로 스토리지 계정을 배포하려면 새 템플릿을 만들어야 합니다. 이는 배포를 자동화하는 실용적인 방법이 아닙니다. 스토리지 계정 SKU도 하드 코딩됩니다. 즉, 환경에 따라 스토리지 계정 유형을 다르게 적용할 수는 없습니다. 이 시나리오에서는 각 배포에 다른 유형의 스토리지 계정이 사용될 수 있다는 점에 유의하세요. 스토리지 계정 SKU의 매개 변수를 추가하여 템플릿을 다시 사용할 수 있도록 설정할 수 있습니다.

이 단원에서는 템플릿의 parametersoutputs 섹션에 대해 알아봅니다.

ARM 템플릿 매개 변수

ARM 템플릿 매개 변수를 사용하면 특정 환경에 맞게 조정된 값을 제공하여 배포를 사용자 지정할 수 있습니다. 예를 들어 개발, 테스트, 프로덕션 또는 기타 용도의 환경에 배포할지 여부에 따라 다른 값을 전달합니다. 예를 들어 위 템플릿에서는 Standard_LRS 스토리지 계정 SKU를 사용합니다. 스토리지 계정 SKU의 이름을 매개 변수로 만들어 스토리지 계정을 만드는 다른 배포에 해당 템플릿을 다시 사용할 수 있습니다. 그런 다음, 템플릿이 배포될 때 특정 배포에 사용하려는 SKU 이름을 전달합니다. 이 단계는 명령줄을 사용하거나 매개 변수 파일을 사용하여 수행할 수 있습니다.

템플릿의 parameters 섹션에서 리소스를 배포할 때 입력할 수 있는 값을 지정합니다. 템플릿에서 매개 변수는 256개로 제한됩니다. 매개 변수 정의는 대부분의 템플릿 함수를 사용할 수 있습니다.

매개 변수에 사용할 수 있는 속성은 다음과 같습니다.

"parameters":{
   "<parameter-name>":{
      "type":"<type-of-parameter-value>",
      "defaultValue":"<default-value-of-parameter>",
      "allowedValues":[
         "<array-of-allowed-values>"
      ],
      "minValue":"<minimum-value-for-int>",
      "maxValue":"<maximum-value-for-int>",
      "minLength":"<minimum-length-for-string-or-array>",
      "maxLength":"<maximum-length-for-string-or-array-parameters>",
      "metadata":{
         "description":"<description-of-the-parameter>"
      }
   }
}

허용되는 매개 변수 형식은 다음과 같습니다.

  • string
  • secureString
  • integers
  • boolean
  • object
  • secureObject
  • array

매개 변수 사용 권장 사항

예를 들어 SKU, 크기 또는 용량과 같이 환경에 따라 달라지는 설정에는 매개 변수를 사용합니다. 간편한 식별을 위해 직접 지정하거나 내부 명명 규칙을 준수하려는 리소스 이름에도 매개 변수를 사용합니다. 각 매개 변수에 관한 설명을 제공하고 가능하면 기본값을 사용합니다.

보안상의 이유로 템플릿에서 사용자 이름 및/또는 암호의 기본값을 하드 코딩하거나 제공하지 않습니다. 사용자 이름 및 암호(또는 비밀)에는 항상 매개 변수를 사용합니다. 모든 암호 및 비밀에는 secureString 을 사용합니다. JSON 개체에서 중요한 데이터를 전달하는 경우 secureObject 형식을 사용합니다. secureString 또는 secureObject 형식을 사용하는 템플릿 매개 변수는 리소스를 배포한 후 읽거나 수집할 수 없습니다.

ARM 템플릿에서 매개 변수 사용

ARM 템플릿의 parameters 섹션에서 리소스를 배포할 때 입력할 수 있는 매개 변수를 지정합니다. 템플릿에서 매개 변수는 256개로 제한됩니다.

템플릿의 parameters 섹션에 정의된 스토리지 계정 SKU에 매개 변수를 사용하는 템플릿 파일의 예는 다음과 같습니다. 실행 시 값이 지정되지 않은 경우 사용할 매개 변수의 기본값을 제공할 수 있습니다.

"parameters":{
  "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
}

그런 다음, 리소스 정의에서 매개 변수를 사용합니다. 구문은 [parameters('name of the parameter')]입니다. parameters 함수를 사용합니다. 다음 모듈에서 함수를 자세히 알아봅니다.

"resources": [
     {
       "type": "Microsoft.Storage/storageAccounts",
       "apiVersion": "2019-04-01",
       "name": "learntemplatestorage123",
       "location": "{Location}",
       "sku": {
         "name": "[parameters('storageAccountType')]"
       },
       "kind": "StorageV2",
       "properties": {
         "supportsHttpsTrafficOnly": true
       }
     }
   ]
  

템플릿을 배포할 때 매개 변수의 값을 제공할 수 있습니다. 다음 명령의 마지막 줄을 확인합니다.

templateFile="azuredeploy.json"
az deployment group create \
  --name testdeployment1 \
  --template-file $templateFile \
  --parameters storageAccountType=Standard_LRS

ARM 템플릿 출력

ARM 템플릿의 outputs 섹션에서 배포에 성공한 후 반환될 값을 지정할 수 있습니다. outputs 섹션의 구성 요소는 다음과 같습니다.

"outputs": {
   "<output-name>": {
       "condition": "<boolean-value-whether-to-output-value>",
       "type": "<type-of-output-value>",
       "value": "<output-value-expression>",
       "copy": {
           "count": <number-of-iterations>,
           "input": <values-for-the-variable>
       }
   }
}
요소 Description
output-name 유효한 JavaScript 식별자여야 합니다.
condition (선택 사항) 출력 값을 반환할지 여부를 나타내는 부울 값입니다. True이면 배포의 출력에 값이 포함됩니다. False이면 배포에서 출력 값을 건너뜁니다. 지정하지 않은 경우 기본값은 true입니다.
type 출력 값 형식입니다.
value (선택 사항) 출력 값으로 평가되어 반환되는 템플릿 언어 식입니다.
copy (선택 사항) Copy는 출력에 대해 둘 이상의 값을 반환하는 데 사용됩니다.

ARM 템플릿에서 출력 사용

스토리지 계정의 엔드포인트를 출력하는 예제는 다음과 같습니다.

 "outputs": {
       "storageEndpoint": {
           "type": "object",
           "value": "[reference('learntemplatestorage123').primaryEndpoints]"
       }
   }

식의 reference 부분을 확인합니다. 이 함수는 스토리지 계정의 런타임 상태를 가져옵니다.

ARM 템플릿 다시 배포

ARM 템플릿은 idempotent입니다. 즉, 동일한 환경에 템플릿을 다시 배포할 수 있으며 템플릿에서 변경된 내용이 없는 경우에는 환경에서 아무것도 변경되지 않습니다. 템플릿 변경 내용이 있는 경우(예: 매개 변수 값을 변경한 경우)에는 변경된 내용만 배포됩니다. 템플릿에는 Azure 솔루션에 필요한 모든 리소스가 포함될 수 있으며 템플릿을 안전하게 다시 실행할 수 있습니다. 리소스는 아직 없는 경우에만 생성되고 변경 내용이 있는 경우에만 업데이트됩니다.