템플릿 구성 요소 살펴보기

완료됨

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]"
  }
}