ARM 템플릿의 구조 및 구문 이해

이 문서에서는 ARM 템플릿(Azure Resource Manager 템플릿)의 구조를 설명합니다. 여기서는 템플릿의 다른 섹션 및 해당 섹션에서 사용할 수 있는 속성을 보여 줍니다.

이 문서는 ARM 템플릿에 대해 잘 알고 있는 사용자를 위한 것입니다. 템플릿의 구조에 대한 자세한 정보를 제공합니다. 템플릿 만들기 프로세스를 안내하는 단계별 자습서는 자습서: 첫 번째 ARM 템플릿 만들기 및 배포를 참조하세요. 단계별 Learn 모듈 세트를 통한 ARM 템플릿에 대한 자세한 내용은 ARM 템플릿을 사용하여 Azure에서 리소스 배포 및 관리를 참조하세요.

Bicep은 ARM 템플릿과 동일한 기능을 제공하지만 더 사용하기 쉬운 구문을 제공하는 새로운 언어입니다. 인프라를 코드 옵션으로 고려하고 있다면 Bicep을 살펴보는 것이 좋습니다.

Bicep 파일의 요소에 대해 알아보려면 Bicep 파일의 구조 및 구문 이해를 참조하세요.

템플릿 형식

가장 간단한 구조의 템플릿에 포함되는 요소는 다음과 같습니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "",
  "contentVersion": "",
  "apiProfile": "",
  "definitions": { },
  "parameters": { },
  "variables": { },
  "functions": [ ],
  "resources": [ ], /* or "resources": { } with languageVersion 2.0 */
  "outputs": { }
}
요소 이름 Required 설명
$schema 템플릿 언어의 버전을 설명하는 JSON(JavaScript Object Notation) 스키마 파일의 위치입니다. 사용할 버전 번호는 배포 범위 및 JSON 편집기에 따라 다릅니다.

Azure Resource Manager 도구 확장과 함께 Visual Studio Code를 사용하는 경우 리소스 그룹 배포에 최신 버전을 사용합니다.
https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#

다른 편집기(Visual Studio 포함)로는 스키마를 처리하지 못할 수 있습니다. 이러한 편집기에서는 다음을 사용합니다.
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

구독 배포의 경우 다음을 사용합니다.
https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#

관리 그룹 배포의 경우 다음을 사용합니다.
https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#

테넌트 배포의 경우 다음을 사용합니다.
https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
languageVersion 아니요 템플릿의 언어 버전입니다. languageVersion 2.0의 향상된 기능을 보려면 languageVersion 2.0을 참조하세요.
contentVersion 템플릿의 버전입니다(예: 1.0.0.0). 이 요소에 값을 제공할 수 있습니다. 이 값을 사용하여 템플릿에서 중요한 변경 내용을 문서화할 수 있습니다. 템플릿을 사용하여 리소스를 배포할 때 이 값을 사용하면 정확한 템플릿이 사용되도록 할 수 있습니다.
apiProfile 리소스 종류에 대한 API 버전 컬렉션으로 사용되는 API 버전입니다. 이 값을 사용하면 템플릿에 있는 각 리소스의 API 버전을 지정하지 않아도 됩니다. API 프로필 버전은 지정하고 리소스 종류에 대한 API 버전은 지정하지 않은 경우, 리소스 관리자는 프로필에 정의된 해당 리소스 종류의 API 버전을 사용합니다.

API 프로필 속성은 Azure Stack, 전역 Azure 등 다양한 환경에 템플릿을 배포할 때 특히 유용합니다. API 프로필 버전을 사용하여 템플릿이 두 환경에서 모두 지원되는 버전을 자동으로 사용하는지 확인합니다. 프로필에 정의된 현재 API 프로필 버전 및 리소스 API 버전 목록은 API 프로필을 참조하세요.

자세한 내용은 API 프로필을 사용하여 버전 추적을 참조하세요.
정의 아니요 배열 및 개체 값의 유효성을 검사하는 데 사용되는 스키마입니다. 정의는 languageVersion 2.0에서만 지원됩니다.
parameters 배포를 실행하여 리소스 배포를 사용자 지정할 때 제공되는 값입니다.
variables 템플릿에서 템플릿 언어 식을 단순화하는 JSON 조각으로 사용되는 값입니다.
functions 템플릿 내에서 사용할 수 있는 사용자 정의 함수입니다.
resources 리소스 그룹 또는 구독에 배포되거나 업데이트되는 리소스 종류입니다.
출력 배포 후 반환되는 값입니다.

각 요소에는 설정할 수 있는 속성이 있습니다. 이 문서에서는 템플릿의 섹션을 자세히 설명합니다.

정의

템플릿의 definitions 섹션에서 배열 및 개체 값의 유효성을 검사하는 데 사용되는 스키마를 지정합니다. DefinitionslanguageVersion 2.0에서만 사용할 수 있습니다.

"definitions": {
  "<definition-name": {
    "type": "<data-type-of-definition>",
    "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>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the-type-definition>"
    }
  }
}
요소 이름 Required 설명
definition-name 형식 정의의 이름입니다. 유효한 JavaScript 식별자여야 합니다.
type 형식 정의의 유형입니다. 허용되는 형식 및 값은 문자열, securestring, int, bool, 개체, secureObject배열입니다. ARM 템플릿의 데이터 형식을 참조 하세요.
allowedValues 아니요 올바른 값을 제공하도록 형식 정의에 허용되는 값의 배열입니다.
minValue 아니요 int 형식 정의의 최솟값이며, 이 값이 포함됩니다.
maxValue 아니요 int 형식 정의의 최대값이며, 이 값이 포함됩니다.
minLength 아니요 string, securestring 및 array 형식 정의의 최소 길이이며, 이 값이 포함됩니다.
maxLength 아니요 string, securestring 및 array 형식 정의의 최대 길이이며, 이 값이 포함됩니다.
prefixItems 아니요 동일한 인덱스에서 배열의 요소 유효성을 검사하기 위한 스키마입니다.
항목 아니요 인덱스가 prefixItems 제약 조건의 가장 큰 인덱스보다 큰 배열의 모든 요소에 적용되는 스키마이거나, 인덱스가 prefixItems 제약 조건의 가장 큰 인덱스보다 큰 배열의 요소를 제어하기 위한 부울입니다.
속성 아니요 개체의 유효성을 검사하기 위한 스키마입니다.
additionalProperties 아니요 properties 제약 조건에 언급되지 않은 모든 속성에 적용되는 스키마이거나 properties 제약 조건에 정의되지 않은 속성을 수락하기 위한 부울입니다.
판별자 아니요 판별자 속성에 따라 적용할 스키마입니다.
Nullable 아니요 값이 null이거나 생략될 수 있음을 나타내는 부울입니다.
description 아니요 포털을 통해 사용자에게 표시되는 형식 정의에 대한 설명입니다. 자세한 내용은 템플릿의 주석을 참조하세요.

형식 정의를 사용하는 방법에 대한 예제는 ARM 템플릿의 형식 정의를 참조하세요.

Bicep에서 사용자 정의 데이터 형식을 참조하세요.

매개 변수

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>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the parameter>"
    }
  }
}
요소 이름 Required 설명
parameter-name 매개 변수의 이름입니다. 유효한 JavaScript 식별자여야 합니다.
type 매개 변수 값의 유형입니다. 허용되는 형식 및 값은 문자열, securestring, int, bool, 개체, secureObject배열입니다. ARM 템플릿의 데이터 형식을 참조 하세요.
defaultValue 아니요 매개 변수에 대한 값이 제공되지 않은 경우 매개 변수의 기본값입니다.
allowedValues 아니요 올바른 값이 제공되었는지 확인하기 위해 매개 변수에 허용되는 값의 배열입니다.
minValue 아니요 Int 형식 매개 변수의 최소값이며, 이 값이 포함됩니다.
maxValue 아니요 int 형식 매개 변수의 최대값이며 이 값은 포함됩니다.
minLength 아니요 string, securestring 및 array 형식 매개 변수의 최소 길이이며, 이 값이 포함됩니다.
maxLength 아니요 string, securestring 및 array 형식 매개 변수의 최대 길이이며, 이 값이 포함됩니다.
prefixItems 아니요 동일한 인덱스에서 배열 요소의 유효성을 검사하기 위한 유형 정의입니다. prefixItemslanguageVersion 2.0에서만 지원됩니다.
항목 아니요 인덱스가 prefixItems 제약 조건의 가장 큰 인덱스보다 큰 배열의 모든 요소에 적용되는 스키마이거나, 인덱스가 prefixItems 제약 조건의 가장 큰 인덱스보다 큰 배열의 요소를 제어하기 위한 부울입니다. itemslanguageVersion 2.0에서만 지원됩니다.
속성 아니요 개체의 유효성을 검사하기 위한 스키마입니다. propertieslanguageVersion 2.0에서만 지원됩니다.
additionalProperties 아니요 properties 제약 조건에 언급되지 않은 모든 속성에 적용되는 스키마이거나 properties 제약 조건에 정의되지 않은 속성을 수락하기 위한 부울입니다. additionalPropertieslanguageVersion 2.0에서만 지원됩니다.
판별자 아니요 판별자 속성에 따라 적용할 스키마입니다. discriminatorlanguageVersion 2.0에서만 지원됩니다.
Nullable 아니요 값이 null이거나 생략될 수 있음을 나타내는 부울입니다. nullablelanguageVersion 2.0에서만 지원됩니다.
description 아니요 포털을 통해 사용자에게 표시되는 매개 변수에 대한 설명입니다. 자세한 내용은 템플릿의 주석을 참조하세요.

매개 변수를 사용하는 방법에 대한 예제는 ARM 템플릿의 매개 변수를 참조하세요.

Bicep에서 매개 변수를 참조하세요.

variables

섹션에서는 variables 템플릿 전체에서 사용할 수 있는 값을 생성합니다. 변수를 정의할 필요는 없지만 복잡한 식을 줄여 템플릿을 간소화하는 경우가 많습니다. 각 변수의 형식은 데이터 형식 중 하나와 일치합니다. 템플릿에서 변수는 256개로 제한됩니다.

다음 예제에는 변수를 정의하는 데 사용할 수 있는 옵션이 나와 있습니다.

"variables": {
  "<variable-name>": "<variable-value>",
  "<variable-name>": {
    <variable-complex-type-value>
  },
  "<variable-object-name>": {
    "copy": [
      {
        "name": "<name-of-array-property>",
        "count": <number-of-iterations>,
        "input": <object-or-value-to-repeat>
      }
    ]
  },
  "copy": [
    {
      "name": "<variable-array-name>",
      "count": <number-of-iterations>,
      "input": <object-or-value-to-repeat>
    }
  ]
}

copy을(를) 사용해 여러 변수 값을 만드는 방법에 대한 자세한 내용은 변수 반복을 참조하세요.

변수를 사용하는 방법에 대한 예제는 ARM 템플릿의 변수를 참조하세요.

Bicep에서 변수를 참조하세요.

함수

템플릿 내에서 고유한 함수를 만들 수 있습니다. 이러한 함수는 템플릿에서 사용할 수 있습니다. 일반적으로 템플릿 전체에서 반복하지 않으려는 복잡한 식을 정의합니다. 템플릿에서 지원되는 식 및 함수에서 사용자 정의 함수 를 만듭니다.

사용자 함수를 정의할 때 몇 가지 제한 사항이 있습니다.

  • 함수는 변수에 액세스할 수 없습니다.
  • 함수는 함수에 정의된 매개 변수만 사용할 수 있습니다. 사용자 정의 함수 내에서 매개 변수 함수를 사용하는 경우 해당 함수에 대한 매개 변수로 제한됩니다.
  • 함수는 다른 사용자 정의 함수를 호출할 수 없습니다.
  • 함수는 참조 함수사용할 수 없습니다.
  • 함수의 매개 변수에는 기본값이 있을 수 없습니다.
"functions": [
  {
    "namespace": "<namespace-for-functions>",
    "members": {
      "<function-name>": {
        "parameters": [
          {
            "name": "<parameter-name>",
            "type": "<type-of-parameter-value>"
          }
        ],
        "output": {
          "type": "<type-of-output-value>",
          "value": "<function-return-value>"
        }
      }
    }
  }
],
요소 이름 Required 설명
namespace 사용자 지정 함수에 대한 네임스페이스입니다. 템플릿 함수와의 명명 충돌을 방지하는 데 사용합니다.
function-name 사용자 지정 함수의 이름입니다. 함수를 호출할 때 함수 이름을 네임스페이스와 결합합니다. 예를 들어 네임스페이스 contoso에서 명명된 uniqueName 함수를 호출하려면 .를 사용합니다 "[contoso.uniqueName()]".
parameter-name 아니요 사용자 지정 함수 내에서 사용되는 매개 변수의 이름입니다.
parameter-value 아니요 매개 변수 값의 유형입니다. 허용되는 형식 및 값은 문자열, securestring, int, bool, 개체, secureObject배열입니다.
output-type 출력 값의 유형입니다. 출력 값은 함수 입력 매개 변수와 동일한 형식을 지원합니다.
output-value 함수에서 평가 및 반환되는 템플릿 언어 식입니다.

사용자 지정 함수를 사용하는 방법에 대한 예제는 ARM 템플릿의 사용자 정의 함수를 참조하세요.

Bicep에서는 사용자 정의 함수가 지원되지 않습니다. Bicep은 다양한 함수연산자를 지원합니다.

리소스

이 섹션에서는 resources 배포 또는 업데이트되는 리소스를 정의합니다. 템플릿의 리소스는 800개로 제한됩니다.

다음 구조로 리소스를 정의합니다.

"resources": [
  {
    "condition": "<true-to-deploy-this-resource>",
    "type": "<resource-provider-namespace/resource-type-name>",
    "apiVersion": "<api-version-of-resource>",
    "name": "<name-of-the-resource>",
    "comments": "<your-reference-notes>",
    "location": "<location-of-resource>",
    "dependsOn": [
        "<array-of-related-resource-names>"
    ],
    "tags": {
        "<tag-name1>": "<tag-value1>",
        "<tag-name2>": "<tag-value2>"
    },
    "identity": {
      "type": "<system-assigned-or-user-assigned-identity>",
      "userAssignedIdentities": {
        "<resource-id-of-identity>": {}
      }
    },
    "sku": {
        "name": "<sku-name>",
        "tier": "<sku-tier>",
        "size": "<sku-size>",
        "family": "<sku-family>",
        "capacity": <sku-capacity>
    },
    "kind": "<type-of-resource>",
    "scope": "<target-scope-for-extension-resources>",
    "copy": {
        "name": "<name-of-copy-loop>",
        "count": <number-of-iterations>,
        "mode": "<serial-or-parallel>",
        "batchSize": <number-to-deploy-serially>
    },
    "plan": {
        "name": "<plan-name>",
        "promotionCode": "<plan-promotion-code>",
        "publisher": "<plan-publisher>",
        "product": "<plan-product>",
        "version": "<plan-version>"
    },
    "properties": {
        "<settings-for-the-resource>",
        "copy": [
            {
                "name": ,
                "count": ,
                "input": {}
            }
        ]
    },
    "resources": [
        "<array-of-child-resources>"
    ]
  }
]
요소 이름 Required 설명
condition 아니요 리소스가 이 배포 중에 프로비전되는지 여부를 나타내는 부울 값입니다. 배포 true하는 동안 리소스가 만들어집니다. 이 false배포에 대한 리소스를 건너뛰는 경우 조건을 참조하세요.
type 리소스의 유형입니다. 이 값은 리소스 공급자의 네임스페이스와 리소스 종류(예: Microsoft.Storage/storageAccounts)의 조합입니다. 사용 가능한 값을 확인하려면 템플릿 참조를 참조하세요. 자식 리소스의 경우 형식 형식은 부모 리소스 내에 중첩되는지 또는 부모 리소스 외부에서 정의되는지에 따라 달라집니다. 자식 리소스의 이름 및 형식 설정을 참조 하세요.
apiVersion 리소스를 만드는 데 사용할 REST API의 버전입니다. 새 템플릿을 만들 때 이 값을 배포 중인 리소스의 최신 버전으로 설정합니다. 템플릿이 필요에 따라 작동하는 한 동일한 API 버전을 계속 사용합니다. 동일한 API 버전을 계속 사용하면 템플릿 작동 방식을 변경하는 새 API 버전의 위험을 최소화할 수 있습니다. 최신 버전에 도입된 새 기능을 사용하려는 경우에만 API 버전을 업데이트하는 것이 좋습니다. 사용 가능한 값을 확인하려면 템플릿 참조를 참조하세요.
name 리소스의 이름입니다. 이름은 RFC3986 정의된 URI 구성 요소 제한을 따라야 합니다. 리소스 이름을 외부 당사자에게 노출하는 Azure 서비스는 다른 ID를 스푸핑하려는 시도가 아닌지 확인하기 위해 이름의 유효성을 검사합니다. 하위 리소스의 경우 이름의 형식은 상위 리소스 내에 중첩되어 있는지, 상위 리소스 외부에 정의되어 있는지에 따라 달라집니다. 자식 리소스의 이름 및 형식 설정을 참조 하세요.
comments 아니요 템플릿에서 리소스를 문서화하는 내용에 대한 참고입니다. 자세한 내용은 템플릿의 주석을 참조하세요.
location 상황에 따라 다름 제공된 리소스의 지역적 위치를 지원합니다. 사용 가능한 위치를 선택할 수 있지만 일반적으로 사용자와 가까운 위치를 선택하는 것이 좋습니다. 일반적으로 동일한 지역에 서로 상호 작용하는 리소스를 배치하는 것이 좋습니다. 대부분의 리소스 종류에는 위치가 필요하지만 일부 형식(예: 역할 할당)에는 위치가 필요하지 않습니다. 리소스 위치 설정을 참조하세요.
dependsOn 아니요 이 리소스를 배포하기 전에 배포해야 하는 리소스입니다. Resource Manager는 리소스 간의 종속성을 평가한 후 올바른 순서에 따라 리소스를 배포합니다. 리소스가 서로 종속되지 않으면 병렬로 배포됩니다. 값은 리소스 이름 또는 리소스 고유 식별자의 쉼표로 구분된 목록일 수 있습니다. 이 템플릿에 배포된 리소스만 나열합니다. 이 템플릿에 정의되지 않은 리소스가 이미 있어야 합니다. 배포 속도가 느려지고 순환 종속성을 만들 수 있으므로 불필요한 종속성을 추가하지 마세요. 종속성 설정에 대한 지침은 ARM 템플릿에서 리소스 배포 순서 정의를 참조 하세요.
tags 아니요 리소스와 연결된 태그입니다. 태그를 적용하여 구독 전체에서 리소스를 논리적으로 구성합니다.
identity 아니요 일부 리소스는 Azure 리소스에 대한 관리 ID를 지원 합니다. 이러한 리소스에는 리소스 선언의 루트 수준에 ID 개체가 있습니다. ID가 사용자 할당인지 시스템 할당인지를 설정할 수 있습니다. 사용자 할당 ID의 경우 ID에 대한 리소스 ID 목록을 제공합니다. 키를 리소스 ID로 설정하고 값을 빈 개체로 설정합니다. 자세한 내용은 템플릿을 사용하여 Azure VM에서 Azure 리소스에 대한 관리 ID 구성을 참조하세요.
sku 아니요 일부 리소스는 배포할 SKU를 정의하는 값을 허용합니다. 예를 들어 스토리지 계정의 중복 유형을 지정할 수 있습니다.
kind 아니요 일부 리소스에서는 배포하는 리소스 종류를 정의하는 값을 허용합니다. 예를 들어 만들 Azure Cosmos DB 인스턴스 종류를 지정할 수 있습니다.
scope 아니요 범위 속성은 확장 리소스 유형에 만 사용할 수 있습니다. 배포 범위와 다른 범위를 지정할 때 사용합니다. ARM 템플릿에서 확장 리소스의 범위 설정을 참조하세요.
copy 아니요 둘 이상의 인스턴스가 필요한 경우 만들 리소스의 수입니다. 기본 모드는 병렬입니다. 모든 리소스 또는 리소스를 동시에 배포하지 않으려면 직렬 모드를 지정합니다. 자세한 내용은 Azure Resource Manager에서 여러 리소스 인스턴스 만들기를 참조 하세요.
계획 아니요 일부 리소스에서는 배포할 계획을 정의하는 값을 허용합니다. 예를 들어 가상 머신에 대한 마켓플레이스 이미지를 지정할 수 있습니다.
속성 아니요 리소스별 구성 설정입니다. 속성 값은 리소스를 만들기 위해 REST API 작업(PUT 메서드)에 대한 요청 본문에 제공하는 값과 동일합니다. 복사 배열을 지정하여 속성의 여러 인스턴스를 만들 수도 있습니다. 사용 가능한 값을 확인하려면 템플릿 참조를 참조하세요.
리소스 아니요 정의되는 리소스에 의존하는 자식 리소스입니다. 부모 리소스의 스키마에서 허용하는 리소스 유형만 제공합니다. 부모 리소스에 대한 종속성은 암시되지 않습니다. 해당 종속성을 명시적으로 정의해야 합니다. 자식 리소스의 이름 및 형식 설정을 참조 하세요.

ARM JSON 템플릿에서 Bicep 기호 이름을 지원하려면 버전 2.0 이상을 사용하여 languageVersion을 추가하고 리소스 정의를 배열에서 개체로 변경합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "<name-of-the-resource>": {
      ...
    }
  }
}

자세한 내용은 리소스를 참조하세요.

Bicep에서 리소스를 참조하세요.

출력

이 섹션에서는 outputs 배포에서 반환되는 값을 지정합니다. 일반적으로 배포된 리소스에서 값을 반환합니다. 템플릿의 출력은 64개로 제한됩니다.

다음 예제에서는 출력 정의의 구조를 보여줍니다.

"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>
    }
  }
}
요소 이름 Required 설명
output-name 출력 값의 이름입니다. 유효한 JavaScript 식별자여야 합니다.
condition 아니요 이 출력 값이 반환되는지 여부를 나타내는 부울 값입니다. 이 경우 true값이 배포의 출력에 포함됩니다. 이 false경우 이 배포에 대한 출력 값을 건너뜁습니다. 지정하지 않으면 기본값은 .입니다 true.
type 출력 값의 유형입니다. 출력 값은 템플릿 입력 매개 변수와 동일한 형식을 지원합니다. 출력 유형에 securestring을 지정하면 값이 배포 기록에 표시되지 않고 다른 템플릿에서 값을 검색할 수 없습니다. 둘 이상의 템플릿에서 비밀 값을 사용하려면 비밀을 Key Vault에 저장하고 매개 변수 파일에서 비밀을 참조합니다. 자세한 내용은 배포하는 동안 Azure Key Vault를 사용하여 보안 매개 변수 값을 전달하는 방법을 참조하세요.
value 아니요 계산되고 출력 값으로 반환되는 템플릿 언어 식입니다. 값 또는 복사를 지정합니다.
copy 아니요 출력에 대해 둘 이상의 값을 반환하는 데 사용됩니다. 값 또는 복사를 지정합니다. 자세한 내용은 ARM 템플릿에서 출력 반복을 참조하세요.

출력을 사용하는 방법에 대한 예제는 ARM 템플릿의 출력을 참조하세요.

Bicep에서 출력을 참조하세요.

주석 및 메타데이터

템플릿에 주석 및 메타데이터를 추가하는 몇 가지 옵션이 있습니다.

설명

in줄 주석s의 경우 또는 ///* ... */.를 사용할 수 있습니다. Visual Studio Code에서 매개 변수 파일을 JSONC(주석이 있는 JSON) 파일 형식으로 저장합니다. 그렇지 않으면 "JSON에서 주석이 허용되지 않음"이라는 오류 메시지가 표시됩니다.

참고 항목

Azure CLI를 사용하여 주석이 있는 템플릿을 배포하는 경우 버전 2.3.0 이상을 사용하고 스위치를 --handle-extended-json-format 지정합니다.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2023-03-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[parameters('location')]", //defaults to resource group location
  "dependsOn": [ /* storage account and network interface must be deployed first */
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

Visual Studio Code에서 Azure Resource Manager 도구 확장은 ARM 템플릿을 자동으로 검색하고 언어 모드를 변경할 수 있습니다. Visual Studio Code의 오른쪽 아래 모서리에 Azure Resource Manager 템플릿이 표시되면 줄 주석 사용할 수 있습니다. 그러면 인라인 주석이 더 이상 유효하지 않음으로 표시되지 않습니다.

Screenshot of Visual Studio Code in Azure Resource Manager template mode.

Bicep에서 주석을 참조하세요.

메타데이터

템플릿의 거의 모든 위치에 개체를 metadata 추가할 수 있습니다. Azure Resource Manager는 해당 개체를 무시하지만 JSON 편집기가 해당 속성이 유효하지 않음을 경고할 수 있습니다. 개체에서 필요한 속성을 정의합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "comments": "This template was developed for demonstration purposes.",
    "author": "Example Name"
  },

의 경우 parameters속성이 있는 metadata 개체를 description 추가합니다.

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "User name for the Virtual Machine."
    }
  },

포털을 통해 템플릿을 배포할 때 설명에 제공하는 텍스트는 해당 매개 변수에 대한 팁으로 자동으로 사용됩니다.

Screenshot showing parameter tip in Azure portal.

의 경우 resources요소 또는 개체를 metadata 추가 comments 합니다. 다음 예제에서는 요소와 개체를 metadata 모두 comments 보여 있습니다.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-09-01",
    "name": "[format('{0}{1}', 'storage', uniqueString(resourceGroup().id))]",
    "comments": "Storage account used to store VM disks",
    "location": "[parameters('location')]",
    "metadata": {
      "comments": "These tags are needed for policy compliance."
    },
    "tags": {
      "Dept": "[parameters('deptName')]",
      "Environment": "[parameters('environment')]"
    },
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "Storage",
    "properties": {}
  }
]

의 경우 outputs출력 값에 개체를 추가 metadata 합니다.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]",
    "metadata": {
      "comments": "Return the fully qualified domain name"
    }
  },

사용자 정의 함수에 metadata 개체를 추가할 수는 없습니다.

다중 선 문자열

한 문자열을 여러 선으로 나눌 수 있습니다. 예를 들어 다음 JSON 예제에서 location 속성 및 주석 중 하나를 참조하세요.

참고 항목

여러 줄 문자열을 사용하여 템플릿을 배포하려면 Azure PowerShell 또는 Azure CLI를 사용합니다. CLI의 경우 버전 2.3.0 이상을 사용하고 스위치를 지정합니다 --handle-extended-json-format .

Azure Portal, DevOps 파이프라인 또는 REST API를 통해 템플릿을 배포할 때는 여러 줄 문자열이 지원되지 않습니다.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2023-03-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[
    parameters('location')
    ]", //defaults to resource group location
  /*
    storage account and network interface
    must be deployed first
  */
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

Bicep에서 다중 선 문자열을 참조하세요.

languageVersion 2.0

참고 항목

실험적 기능을 언제든지 변경할 수 있으므로 프로덕션 환경에서는 -experimental로 종료되는 languageVersion을 사용하지 않는 것이 좋습니다.

참고 항목

Visual Studio Code용 Azure Resource Manager 도구 확장의 현재 릴리스에서는 languageVersion 2.0의 향상된 기능을 인식하지 못합니다.

languageVersion 2.0을 사용하려면 템플릿에 "languageVersion": "2.0"을 추가합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "<name-of-the-resource>": {
      ...
    }
  }
}

languageVersion 2.0과 함께 제공되는 향상된 기능 및 변경 내용:

  • ARM JSON 템플릿에서 기호 이름을 사용합니다. 자세한 내용은 기호 이름 사용을 참조하세요.
  • 리소스 복사 루프에서 기호 이름을 사용합니다. 기호 이름 사용을 참조하세요.
  • dependsOn 배열에서 기호 이름을 사용합니다. DependsOn루프의 리소스에 의존을 참조하세요.
  • reference 함수의 리소스 이름 대신 기호 이름을 사용합니다. 참조를 확인하세요.
  • 리소스 컬렉션의 런타임 상태를 나타내는 개체 배열을 반환하는 references() 함수입니다. 참조를 참조하세요.
  • '기존' 리소스 속성을 사용하여 리소스를 배포하는 대신 ARM에서 읽을 기존 리소스를 선언합니다. 기존 리소스 선언을 참조하세요.
  • 사용자 정의 형식을 만듭니다. 형식 정의를 참조하세요.
  • 매개 변수출력에 사용할 추가 집계 형식 유효성 검사 제약 조건입니다.
  • 속성의 expressionEvaluationOptions 기본값은 .입니다 inner. outer 값이 차단됩니다. 중첩된 템플릿의 식 계산 범위를 참조하세요.
  • deployment 함수는 제한된 속성 하위 집합을 반환합니다. 배포를 참조하세요.
  • 배포 리소스가 기호 이름 배포에 사용되는 경우 apiVersion 2020-09-01 이상을 사용합니다.
  • 리소스 정의에서 식 내의 이중 이스케이프 값은 더 이상 필요하지 않습니다. 이스케이프 문자를 참조하세요.

다음 단계

  • 다양한 유형의 솔루션에 대한 전체 템플릿을 보려면 Azure 빠른 시작 템플릿을 참조하세요.
  • 템플릿 내에서 사용할 수 있는 함수에 대한 자세한 내용은 ARM 템플릿 함수를 참조하세요.
  • 배포하는 동안 여러 템플릿을 결합하려면 Azure 리소스를 배포할 때 연결된 템플릿 및 중첩된 템플릿 사용을 참조 하세요.
  • 템플릿을 만드는 방법에 대한 권장 사항은 ARM 템플릿 모범 사례를 참조 하세요.
  • 일반적인 질문에 대한 답변은 ARM 템플릿에 대한 질문과 대답을 참조 하세요.