템플릿 구성 요소 살펴보기
Azure Resource Manager 템플릿은 JSON으로 작성되며, 이를 통해 개체(예: 가상 머신)로 저장된 데이터를 텍스트로 표현할 수 있습니다.
JSON 문서는 키-값 쌍의 컬렉션입니다. 각 키는 문자열로, 그 값은 다음이 될 수 있습니다.
- 문자열
- 숫자입니다.
- 부울 식입니다.
- 값 목록
- 개체(다른 키-값 쌍의 컬렉션)
Resource Manager 템플릿은 JSON 표기법을 사용하여 표현되지만 JSON 언어 자체와는 관련되지 않은 섹션을 포함할 수 있습니다.
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "",
"parameters": { },
"variables": { },
"functions": [ ],
"resources": [ ],
"outputs": { }
}
각 섹션을 자세히 살펴보겠습니다.
매개 변수
이 섹션은 템플릿을 실행할 때 구성 가능한 값을 지정하는 곳입니다.
예를 들어, 템플릿 사용자가 사용자 이름, 암호 또는 도메인 이름을 설정하도록 허용할 수 있습니다.
다음은 VM(가상 머신)의 사용자 이름과 암호, 이렇게 두 가지 매개 변수를 보여 주는 예입니다.
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Password for the Virtual Machine."
}
}
}
변수
이 섹션에서는 템플릿 전체에서 사용되는 값을 정의합니다.
변수를 사용하면 템플릿을 쉽게 유지할 수 있습니다.
예를 들어, 스토리지 계정 이름을 변수로 한 번 정의하고 이것을 템플릿 전체에서 사용할 수 있습니다.
스토리지 계정 이름이 변경되면 변수를 한 번만 업데이트하면 됩니다.
다음은 VM의 네트워킹 기능을 설명하는 몇 가지 변수를 보여 주는 예입니다.
"variables": {
"nicName": "myVMNic",
"addressPrefix": "10.0.0.0/16",
"subnetName": "Subnet",
"subnetPrefix": "10.0.0.0/24",
"publicIPAddressName": "myPublicIP",
"virtualNetworkName": "MyVNET"
}
Functions
이 섹션에서는 템플릿 전체에서 반복을 원하지 않는 프로시저를 정의합니다.
변수와 마찬가지로, 함수를 사용하면 템플릿을 쉽게 유지할 수 있습니다.
다음은 전역적으로 고유한 이름 지정 요구 사항이 있는 리소스를 만들 때 사용할 고유한 이름을 생성하는 함수를 만드는 예입니다.
"functions": [
{
"namespace": "contoso",
"members": {
"uniqueName": {
"parameters": [
{
"name": "namePrefix",
"type": "string"
}
],
"output": {
"type": "string",
"value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
}
}
}
}
],
리소스
이 섹션에서는 배포를 구성하는 Azure 리소스를 정의합니다.
다음은 공용 IP 주소 리소스를 생성하는 예입니다.
{
"type": "Microsoft.Network/publicIPAddresses",
"name": "[variables('publicIPAddressName')]",
"location": "[parameters('location')]",
"apiVersion": "2018-08-01",
"properties": {
"publicIPAllocationMethod": "Dynamic",
"dnsSettings": {
"domainNameLabel": "[parameters('dnsLabelPrefix')]"
}
}
}
여기에서 리소스의 형식은 Microsoft.Network/publicIPAddresses
입니다.
이름은 변수 섹션에서 읽어 오고, 위치나 Azure 지역은 매개 변수 섹션에서 읽어 옵니다.
리소스 종류는 시간이 지나면서 변경될 수 있으므로 apiVersion
은 사용하려는 리소스 종류의 버전을 말합니다.
리소스 종류가 발전함에 따라 최신 기능을 사용하도록 템플릿을 수정할 수 있습니다.
출력
이 섹션에서는 템플릿이 실행될 때 수신할 정보를 정의합니다.
예를 들어, VM의 IP 주소나 FQDN(정규화된 도메인 이름)을 수신하려는 경우, 이 정보는 배포가 실행될 때까지 알 수 없습니다.
다음은 hostname이라는 출력을 보여 주는 예입니다.
FQDN 값은 VM의 공용 IP 주소 설정에서 읽어옵니다.
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
}
}