템플릿 함수를 사용하여 Azure Resource Manager 템플릿의 유연성 강화

완료됨

이 시나리오에서는 가능한 한 쉽게 다른 환경에 ARM(Azure Resource Manager) 템플릿을 배포하려고 합니다. 까다로운 작업 중 하나는 Azure Storage 계정에 고유한 이름을 지정하는 것입니다.

이 문제를 해결하기 위해 ARM 템플릿 함수를 사용하여 식을 만듭니다.

ARM 템플릿 함수란?

ARM 템플릿 함수는 배포하는 동안 동적으로 값을 가져와 ARM 템플릿을 보다 유연하게 사용할 수 있도록 합니다.

함수를 이해하려면 먼저 식을 이해해야 합니다. 식은 템플릿이 배포될 때 평가되는 값입니다. 식은 대괄호 []로 시작하고 끝나며 문자열, 정수, 부울, 배열 또는 개체를 반환할 수 있습니다.

이 학습 경로의 이전 모듈에서는 Resource Manager 템플릿에서 이미 식을 사용했습니다. 예를 들어 다음을 사용했습니다.

"parameters": {
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},

식은 defaultValue: 특성의 값입니다. 이 식에는 resourceGroup() ARM 템플릿 함수가 포함되어 있습니다. 이 함수는 이 템플릿이 배포되는 리소스 그룹에 대한 정보를 반환합니다. .location은 함수에서 반환된 개체에서 하나의 속성을 검색합니다. 함수를 사용하여 필요한 값을 동적으로 생성할 수 있습니다.

ARM 템플릿 함수를 사용하여 작업하는 방법

함수를 사용할 때 몇 가지 규칙을 따라야 합니다.

  • 문자열 값을 함수에 전달할 때는 작은따옴표를 사용합니다. 예: concat('storage',uniqueString(resourceGroup().id)). 이 함수는 concat이며 함수에 전달하는 문자열은 'storage'입니다.

  • 템플릿 함수에서 리터럴 값을 사용하려면 ‘이스케이프 문자’가 필요합니다. 이스케이프 문자는 이스케이프 처리하려는 항목에 따라 다릅니다.

  • 속성을 null로 설정하려면 null 또는 [json('null')]을 사용할 수 있습니다. null을 매개 변수로 제공하면 JSON 함수는 빈 개체를 반환합니다.

    "stringValue": null,
    "objectValue": "[json('null')]"
    

Resource Manager는 여러 ARM 템플릿 함수를 제공합니다. 함수는 형식을 기반으로 다음과 같이 그룹으로 나열됩니다.

  • 배열 함수: 배열 작업에 사용합니다. 예를 들어 firstlast가 있습니다.
  • 비교 함수: 템플릿에서 비교를 수행하는 데 사용합니다. 예를 들어 equalsgreater가 있습니다.
  • 날짜 함수: 날짜 작업에 사용합니다. 예를 들어 utcNowdateTimeAdd가 있습니다.
  • 배포 값 함수: 템플릿의 섹션 값 및 배포와 관련된 값을 가져오는 데 사용합니다. 예를 들어 environmentparameters가 있습니다.
  • 논리 함수: 논리 조건을 지정할 때 사용합니다. 예를 들어 ifnot이 있습니다.
  • 숫자 함수: 정수 작업에 사용합니다. 예를 들어 maxmod가 있습니다.
  • 개체 함수: 개체 작업에 사용합니다. 예를 들어 containslength가 있습니다.
  • 리소스 함수: 리소스 값을 가져오는 데 사용합니다. 예를 들어 resourceGroupsubscription이 있습니다.
  • 문자열 함수: 문자열 작업에 사용합니다. 예를 들어 lengthstartsWith가 있습니다.

하나의 식에서 여러 함수를 사용하는 방법

여러 템플릿 함수를 함께 사용하여 사용자 고유의 식을 만들 수 있습니다. 이 시나리오에서는 접두사 입력을 리소스 그룹 ID의 해시와 결합하여 각 리소스 그룹의 고유한 이름을 만드는 식을 만들어야 합니다. 이 식의 결과로 dev2hu6fktr577whstaging5his8hgr67tt5와 같은 스토리지 계정 이름이 생성됩니다. 4가지 함수를 사용하여 이 문자열 값을 생성할 수 있습니다. 예를 들면 다음과 같습니다.

"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"

이 식을 살펴보겠습니다.

concat부터 이 함수는 임의 개수의 인수를 사용하고 매개 변수에 대해 문자열 또는 배열을 허용할 수 있습니다. 여기서는 "Storage" 리터럴 문자열을 사용하고 다른 함수 uniqueString의 결과와 연결합니다. uniqueString 함수는 매개 변수를 기준으로 결정적 해시 문자열을 만듭니다. 이 식에서는 다른 함수인 resourceGroup을 사용하여 현재 리소스 그룹 ID의 해시를 만듭니다.

지금까지 논의한 식의 출력은 다음과 같습니다.

Storage라는 단어를 대문자와 소문자를 모두 포함하는 13자 해시와 연결하여 만든 문자열의 그림

명명 규칙을 준수하려면 이 문자열을 모두 소문자로 지정해야 합니다. 여기서는 toLower 함수를 외부 함수로 추가합니다.

결과 문자열은 다음과 같습니다.

Storage라는 단어를 13자 해시와 연결한 다음, 모든 문자를 소문자로 변환하여 만든 문자열의 그림