ARM 템플릿에 조건부 논리 추가
특정 조건에서 선택적으로 리소스를 배포해야 할 수도 있습니다. 일반적으로는 VM에 부하 분산 장치를 추가합니다. 전자상거래 사이트에서 대대적인 세일로 증가된 트래픽을 견딜 수 있도록 하려는 경우를 가정해 보겠습니다. 부하 분산 장치는 VM에 연결할 수 있는 리소스 유형입니다. 조건에 따라 규칙을 추가하여 해당 VM에 적용되는 부하 분산 장치를 사용하도록 설정하거나 사용하지 않도록 설정합니다.
다음과 같은 상황을 가정해 보겠습니다.
- 기존 리소스. 리소스를 템플릿에서 지정하고 배포하는 경우 두 가지 경우 중 하나가 발생합니다. 리소스가 배포되었거나 이미 존재하는 경우 배포되지 않은 것입니다. Azure Resource Manager가 사용자 대신 리소스가 존재하는지 확인합니다. 이것은 암시적입니다. 문제는 리소스가 이미 존재하는지 확인할 수 있는 ‘방법’을 궁리할 때 이 메커니즘을 활용할 수 있는지 여부입니다.
- 분기 논리. 배포 시 템플릿에 전달하는 매개 변수에 따라 다른 리소스 집합을 배포하기를 원할 수 있습니다. 이를 분기 논리라고 합니다. 매개 변수에 특정 형식의 값이 있는 경우 첫 번째 분기를 선택합니다. 값이 없는 경우에는 두 번째 또는 세 번째 분기를 배포하도록 선택합니다. 분기 논리는 이런 방식으로 계속됩니다.
위의 두 경우 모두 조건부 논리가 적용되는 시나리오를 나타냅니다. 논리는 Resource Manager 시스템 자체에 포함되거나 명시적으로 표현해야 합니다.
조건부 배포
condition
구문을 사용하여 리소스를 배포할지 여부를 나타낼 수 있습니다. 이 속성은 리소스 요소에 연결하는 것으로, 속성 값은 true
또는 false
입니다. 일반적으로 템플릿에서 다음 JSON과 같은 condition
구문을 찾습니다.
"resources" : [
{
"condition": "[parameters('shouldDeploy')]"
}
]
위의 JSON에서 condition
속성은 리소스에 추가됩니다. 이 속성의 값은 shouldDeploy
매개 변수의 값으로 평가됩니다.
평가
condition
구문을 평가할 수 있는 방법에는 두 가지가 있습니다. 이 두 가지 방법에 대해 지식이 조건부 논리를 표현하는 방법에 영향을 줄 수 있습니다. 두 가지 방법은 다음과 같습니다.
값이 true/false입니다. 예를 들어 다음 구문을 살펴보세요.
"condition": "[parameters('deployAccount')]"
deployAccount
값은 배포 시 값을 전달할 수 있는 매개 변수이거나 기본값으로 대체될 수 있습니다. 사용된 방법에 관계없이 값은 반드시 false 또는 true입니다. 부울이 아닌 다른 값을 할당하려고 하면 오류가 발생합니다.true/false로 평가되는 식이 있습니다. 여기서는
condition
구문에 반드시 true/false 값을 할당하는 대신 기본 제공 템플릿 함수equals(arg1, arg2)
를 사용합니다. 함수가 true로 평가되려면arg1
이arg2
와 같아야 합니다. 이제condition
구문은 다음과 같이 표현될 수 있습니다."condition": "[equals(parameters('newOrExisting'),'new')]"
equals()
함수를 사용하면 매개 변수에 전달하는 값이 더 이상true
또는false
일 필요가 없습니다.equals()
함수의 두 번째 인수와 일치해야 합니다. 위의 JSON 예제에서 함수가true
로 평가되려면newOrExisting
매개 변수의 값이 문자열new
와 일치해야 합니다.