Azure Resource Manager 템플릿의 구조 및 구문 이해Understand the structure and syntax of Azure Resource Manager templates

이 문서에서는 Azure Resource Manager 템플릿의 구조에 대해 설명합니다.This article describes the structure of an Azure Resource Manager template. 여기서는 템플릿의 다른 섹션 및 해당 섹션에서 사용할 수 있는 속성을 보여 줍니다.It presents the different sections of a template and the properties that are available in those sections. 템플릿은 배포에 대한 값을 생성하는 데 사용할 수 있는 식과 JSON으로 구성됩니다.The template consists of JSON and expressions that you can use to construct values for your deployment.

이 문서에서는 Resource Manager 템플릿 사용 하 여에 대해 알고 있는 사용자를 위한 것입니다.This article is intended for users who have some familiarity with Resource Manager templates. 구조 및 템플릿의 구문에 대 한 자세한 정보를 제공합니다.It provides detailed information about the structure and syntax of the template. 템플릿 만들기 소개를 참조 하세요 첫 번째 Azure Resource Manager 템플릿 만들기합니다.If you want an introduction to creating a template, see Create your first Azure Resource Manager template.

템플릿 형식Template format

가장 간단한 구조의 템플릿에 포함되는 요소는 다음과 같습니다.In its simplest structure, a template has the following elements:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "",
  "apiProfile": "",
  "parameters": {  },
  "variables": {  },
  "functions": [  ],
  "resources": [  ],
  "outputs": {  }
}
요소 이름Element name 필수Required 설명Description
$schema$schema Yes 템플릿 언어의 버전을 설명하는 JSON 스키마 파일의 위치입니다.Location of the JSON schema file that describes the version of the template language.

리소스 그룹 배포의 경우 다음을 사용 합니다.For resource group deployments, use: https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

구독 배포의 경우 다음을 사용 합니다.For subscription deployments, use: https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#
contentVersioncontentVersion Yes 템플릿의 버전입니다(예: 1.0.0.0).Version of the template (such as 1.0.0.0). 이 요소에 값을 제공할 수 있습니다.You can provide any value for this element. 이 값을 사용하여 템플릿에서 중요한 변경 내용을 문서화할 수 있습니다.Use this value to document significant changes in your template. 템플릿을 사용하여 리소스를 배포할 때 이 값을 사용하면 정확한 템플릿이 사용되도록 할 수 있습니다.When deploying resources using the template, this value can be used to make sure that the right template is being used.
apiProfileapiProfile 아닙니다.No 리소스 종류에 대 한 API 버전 컬렉션으로 사용 되는 API 버전입니다.An API version that serves as a collection of API versions for resource types. 템플릿에서 각 리소스에 대 한 API 버전을 지정할 필요가 없도록 하려면이 값을 사용 합니다.Use this value to avoid having to specify API versions for each resource in the template. API 프로필 버전을 지정 하 고 리소스 형식에 대 한 API 버전을 지정 하지 않는 Resource Manager 프로필에 정의 된 해당 리소스 종류에 대 한 API 버전을 사용 합니다.When you specify an API profile version and don't specify an API version for the resource type, Resource Manager uses the API version for that resource type that is defined in the profile.

API 프로필 속성이 Azure Stack 및 전역 Azure와 같은 다른 환경에 템플릿을 배포할 때 특히 유용 합니다.The API profile property is especially helpful when deploying a template to different environments, such as Azure Stack and global Azure. 서식 파일에 두 환경 모두에서 지원 되는 버전을 자동으로 사용 하도록 하려면 API 프로필 버전을 사용 합니다.Use the API profile version to make sure your template automatically uses versions that are supported in both environments. 현재 API 프로필 버전 및 API 버전 프로필에 정의 된 리소스의 목록을 참조 하세요 API 프로필합니다.For a list of the current API profile versions and the resources API versions defined in the profile, see API Profile.

자세한 내용은 API 프로필을 사용 하 여 버전 추적합니다.For more information, see Track versions using API profiles.
매개 변수parameters 아닙니다.No 배포를 실행하여 리소스 배포를 사용자 지정할 때 제공되는 값입니다.Values that are provided when deployment is executed to customize resource deployment.
variablesvariables 아닙니다.No 템플릿에서 템플릿 언어 식을 단순화하는 JSON 조각으로 사용되는 값입니다.Values that are used as JSON fragments in the template to simplify template language expressions.
functionsfunctions 아닙니다.No 템플릿 내에서 사용할 수 있는 사용자 정의 함수입니다.User-defined functions that are available within the template.
리소스resources Yes 리소스 그룹 또는 구독에 배포되거나 업데이트되는 리소스 종류입니다.Resource types that are deployed or updated in a resource group or subscription.
outputsoutputs 아닙니다.No 배포 후 반환되는 값입니다.Values that are returned after deployment.

각 요소에는 사용자가 설정할 수 있는 속성이 있습니다.Each element has properties you can set. 이 기사에서는 템플릿의 섹션에 대해 자세히 설명합니다.This article describes the sections of the template in greater detail.

구문Syntax

템플릿의 기본 구문은 JSON이지만,The basic syntax of the template is JSON. 그러나 식 템플릿 내에서 사용할 수 있는 JSON 값 확장을 사용할 수 있습니다.However, you can use expressions to extend the JSON values available within the template. 시작 하 고 대괄호를 사용 하 여 종료 하는 식: [], 각각.Expressions start and end with brackets: [ and ], respectively. 식의 값은 템플릿을 배포할 때 평가됩니다.The value of the expression is evaluated when the template is deployed. 식은 문자열, 정수, 부울, 배열 또는 개체를 반환할 수 있습니다.An expression can return a string, integer, boolean, array, or object. 다음 예제에서는 매개 변수의 기본 값에는 식을 보여 줍니다.The following example shows an expression in the default value of a parameter:

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

식에서 구문 resourceGroup() Resource Manager 템플릿 내에서 사용 하기 위해 제공 하는 함수 중 하나를 호출 합니다.Within the expression, the syntax resourceGroup() calls one of the functions that Resource Manager provides for use within a template. JavaScript에서와 마찬가지로 함수 호출은 functionName(arg1,arg2,arg3)과 같이 형식이 지정됩니다.Just like in JavaScript, function calls are formatted as functionName(arg1,arg2,arg3). 구문을 .location 해당 함수에서 반환 되는 개체에서 하나의 속성을 검색 합니다.The syntax .location retrieves one property from the object returned by that function.

템플릿 함수 및 해당 매개 변수는 대/소문자를 구분하지 않습니다.Template functions and their parameters are case-insensitive. 예를 들어 Resource Manager에서 variables('var1')VARIABLES('VAR1') 는 동일합니다.For example, Resource Manager resolves variables('var1') and VARIABLES('VAR1') as the same. 계산될 때 함수는 대/소문자를 명시적으로 수정하지 않는 한(toUpper 또는 toLower 등) 대/소문자를 보존합니다.When evaluated, unless the function expressly modifies case (such as toUpper or toLower), the function preserves the case. 특정 리소스 유형에는 함수가 계산되는 방식에 관계없이 대/소문자 요구 사항이 있을 수 있습니다.Certain resource types may have case requirements irrespective of how functions are evaluated.

리터럴 문자열을 대괄호 [로 시작하되, 식으로 해석되지 않게 하려면 문자 [[로 시작하도록 추가 대괄호를 추가합니다.To have a literal string start with a bracket [, but not have it interpreted as an expression, add an extra bracket to start the string with [[.

문자열 값을 매개 변수로 함수에 전달 하려면 작은따옴표를 사용 합니다.To pass a string value as a parameter to a function, use single quotes.

"name": "[concat('storage', uniqueString(resourceGroup().id))]"

템플릿에서 JSON 개체를 추가 하는 등 식에서 큰따옴표를 이스케이프 하려면 백슬래시를 사용 합니다.To escape double quotes in an expression, such as adding a JSON object in the template, use the backslash.

"tags": {
    "CostCenter": "{\"Dept\":\"Finance\",\"Environment\":\"Production\"}"
},

템플릿 식은 24,576 자를 초과할 수 없습니다.A template expression can't exceed 24,576 characters.

템플릿 함수의 전체 목록을 보려면 Azure 리소스 관리자 템플릿 함수를 참조하세요.For the full list of template functions, see Azure Resource Manager template functions.

매개 변수Parameters

템플릿의 매개 변수 섹션에서는 리소스를 배포할 때 입력할 수 있는 값을 지정합니다.In the parameters section of the template, you specify which values you can input when deploying the resources. 이러한 매개 변수 값을 사용하여 개발, 테스트 및 프로덕션 등의 특정 환경에 맞게 조정되는 값을 제공함으로써 배포를 사용자 지정할 수 있습니다.These parameter values enable you to customize the deployment by providing values that are tailored for a particular environment (such as dev, test, and production). 템플릿에서 매개 변수를 제공할 필요는 없지만 매개 변수가 없으면 템플릿이 항상 이름, 위치 및 속성이 같은 동일한 리소스를 배포합니다.You don't have to provide parameters in your template, but without parameters your template would always deploy the same resources with the same names, locations, and properties.

템플릿에서 매개 변수는 256개로 제한됩니다.You're limited to 256 parameters in a template. 이 문서에 표시된 것처럼 여러 속성이 포함된 개체를 사용하여 매개 변수 수를 줄일 수 있습니다.You can reduce the number of parameters by using objects that contain multiple properties, as shown in this article.

사용 가능한 속성Available properties

매개 변수에 대해 사용 가능한 속성 다음과 같습니다.The available properties for a parameter are:

"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-parameters>,
    "metadata": {
      "description": "<description-of-the parameter>" 
    }
  }
}
요소 이름Element name 필수Required 설명Description
parameterNameparameterName Yes 매개 변수의 이름입니다.Name of the parameter. 유효한 JavaScript 식별자여야 합니다.Must be a valid JavaScript identifier.
형식type Yes 매개 변수 값의 유형입니다.Type of the parameter value. 허용되는 유형 및 값은 string, securestring, int, bool, object, secureObjectarray입니다.The allowed types and values are string, securestring, int, bool, object, secureObject, and array.
defaultValuedefaultValue 아닙니다.No 매개 변수 값을 제공하지 않는 경우 매개 변수의 기본값입니다.Default value for the parameter, if no value is provided for the parameter.
allowedValuesallowedValues 아닙니다.No 올바른 값을 제공하도록 매개 변수에 대해 허용되는 값의 배열입니다.Array of allowed values for the parameter to make sure that the right value is provided.
minValueminValue 아닙니다.No Int 형식 매개 변수의 최소값이며, 이 값이 포함됩니다.The minimum value for int type parameters, this value is inclusive.
maxValuemaxValue 아닙니다.No Int 형식 매개 변수의 최대값이며, 이 값이 포함됩니다.The maximum value for int type parameters, this value is inclusive.
minLengthminLength 아닙니다.No string, securestring 및 array 형식 매개 변수의 최소 길이이며, 이 값이 포함됩니다.The minimum length for string, secure string, and array type parameters, this value is inclusive.
maxLengthmaxLength 아닙니다.No string, securestring 및 array 형식 매개 변수의 최대 길이이며, 이 값이 포함됩니다.The maximum length for string, secure string, and array type parameters, this value is inclusive.
descriptiondescription 아닙니다.No 포털에서 사용자에게 표시되는 매개 변수의 설명입니다.Description of the parameter that is displayed to users through the portal. 자세한 내용은 템플릿의 주석을 참조하세요.For more information, see Comments in templates.

매개 변수 정의 및 사용Define and use a parameter

다음 예제에서는 간단한 매개 변수 정의를 보여 줍니다.The following example shows a simple parameter definition. 매개 변수 이름을 정의하고 문자열 값을 사용하도록 지정합니다.It defines the name of the parameter, and specifies that it takes a string value. 매개 변수는 용도에 적합한 값만 허용합니다.The parameter only accepts values that make sense for its intended use. 매개 변수는 배포 중에 값을 제공하지 않으면 기본값을 지정합니다.It specifies a default value when no value is provided during deployment. 마지막으로 매개 변수에는 용도에 대한 설명이 포함됩니다.Finally, the parameter includes a description of its use.

"parameters": {
  "storageSKU": {
    "type": "string",
    "allowedValues": [
      "Standard_LRS",
      "Standard_ZRS",
      "Standard_GRS",
      "Standard_RAGRS",
      "Premium_LRS"
    ],
    "defaultValue": "Standard_LRS",
    "metadata": {
      "description": "The type of replication to use for the storage account."
    }
  }   
}

템플릿에서 다음 구문을 사용하여 매개 변수 값을 참조합니다.In the template, you reference the value for the parameter with the following syntax:

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "sku": {
      "name": "[parameters('storageSKU')]"
    },
    ...
  }
]

매개 변수가 있는 템플릿 함수Template functions with parameters

매개 변수에 기본값을 지정하는 경우 대부분의 템플릿 함수를 사용할 수 있습니다.When specifying the default value for a parameter, you can use most template functions. 다른 매개 변수 값을 사용하여 기본값을 빌드할 수 있습니다.You can use another parameter value to build a default value. 다음 템플릿은 기본값인 함수의 사용을 보여 줍니다.The following template demonstrates the use of functions in the default value:

"parameters": {
  "siteName": {
    "type": "string",
    "defaultValue": "[concat('site', uniqueString(resourceGroup().id))]",
    "metadata": {
      "description": "The site name. To use the default value, do not specify a new value."
    }
  },
  "hostingPlanName": {
    "type": "string",
    "defaultValue": "[concat(parameters('siteName'),'-plan')]",
    "metadata": {
      "description": "The host name. To use the default value, do not specify a new value."
    }
  }
}

매개 변수 섹션에서는 reference 함수를 사용할 수 없습니다.You can't use the reference function in the parameters section. 매개 변수는 배포 전에 평가되므로 reference 함수에서 리소스의 런타임 상태를 가져올 수 없습니다.Parameters are evaluated before deployment so the reference function can't get the runtime state of a resource.

개체를 매개 변수로 사용Objects as parameters

관련 값을 개체로 전달하면 더 쉽게 구성할 수 있습니다.It can be easier to organize related values by passing them in as an object. 이렇게 하면 템플릿의 매개 변수 수도 줄어듭니다.This approach also reduces the number of parameters in the template.

템플릿에서 매개 변수를 정의하고 배포 중에 단일 값 대신 JSON 개체를 지정하세요.Define the parameter in your template and specify a JSON object instead of a single value during deployment.

"parameters": {
  "VNetSettings": {
    "type": "object",
    "defaultValue": {
      "name": "VNet1",
      "location": "eastus",
      "addressPrefixes": [
        {
          "name": "firstPrefix",
          "addressPrefix": "10.0.0.0/22"
        }
      ],
      "subnets": [
        {
          "name": "firstSubnet",
          "addressPrefix": "10.0.0.0/24"
        },
        {
          "name": "secondSubnet",
          "addressPrefix": "10.0.1.0/24"
        }
      ]
    }
  }
},

그런 다음 점 연산자를 사용하여 매개 변수의 하위 속성을 참조하세요.Then, reference the subproperties of the parameter by using the dot operator.

"resources": [
  {
    "apiVersion": "2015-06-15",
    "type": "Microsoft.Network/virtualNetworks",
    "name": "[parameters('VNetSettings').name]",
    "location": "[parameters('VNetSettings').location]",
    "properties": {
      "addressSpace":{
        "addressPrefixes": [
          "[parameters('VNetSettings').addressPrefixes[0].addressPrefix]"
        ]
      },
      "subnets":[
        {
          "name":"[parameters('VNetSettings').subnets[0].name]",
          "properties": {
            "addressPrefix": "[parameters('VNetSettings').subnets[0].addressPrefix]"
          }
        },
        {
          "name":"[parameters('VNetSettings').subnets[1].name]",
          "properties": {
            "addressPrefix": "[parameters('VNetSettings').subnets[1].addressPrefix]"
          }
        }
      ]
    }
  }
]

매개 변수 예제 템플릿Parameter example templates

이러한 예제 템플릿은 매개 변수 사용에 대한 일부 시나리오를 보여 줍니다.These example templates demonstrate some scenarios for using parameters. 다른 시나리오에서 처리되는 방식을 테스트하려면 매개 변수를 배포하세요.Deploy them to test how parameters are handled in different scenarios.

TemplateTemplate 설명Description
기본 값에 대 한 함수를 사용 하 여 매개 변수parameters with functions for default values 매개 변수의 기본값을 정의할 때 템플릿 함수를 사용하는 방법을 보여 줍니다.Demonstrates how to use template functions when defining default values for parameters. 템플릿은 리소스를 배포하지 않으며,The template doesn't deploy any resources. 매개 변수 값을 구성하고 해당 값을 반환합니다.It constructs parameter values and returns those values.
매개 변수 개체parameter object 매개 변수에 대한 개체 사용을 보여 줍니다.Demonstrates using an object for a parameter. 템플릿은 리소스를 배포하지 않으며,The template doesn't deploy any resources. 매개 변수 값을 구성하고 해당 값을 반환합니다.It constructs parameter values and returns those values.

variablesVariables

변수 섹션에서 템플릿을 통해 사용할 수 있는 값을 생성합니다.In the variables section, you construct values that can be used throughout your template. 변수를 정의할 필요는 없지만 종종 변수를 통해 복잡한 식을 줄이면 템플릿이 단순화됩니다.You don't need to define variables, but they often simplify your template by reducing complex expressions.

사용 가능한 정의Available definitions

다음 예에서는 변수를 정의 하기 위한 사용 가능한 옵션을 보여 줍니다.The following example shows the available options for defining a variable:

"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 변수에 대 한 여러 값을 만들려면 참조 변수 반복합니다.For information about using copy to create several values for a variable, see Variable iteration.

변수를 정의하고 사용합니다.Define and use a variable

다음 예제는 변수 정의를 보여 줍니다.The following example shows a variable definition. 저장소 계정 이름의 문자열 값을 만듭니다.It creates a string value for a storage account name. 매개 변수 값을 가져오는 몇 가지 템플릿 함수를 사용 하 고 고유 문자열에 연결 합니다.It uses several template functions to get a parameter value, and concatenates it to a unique string.

"variables": {
  "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
},

리소스를 정의할 때 변수를 사용합니다.You use the variable when defining the resource.

"resources": [
  {
    "name": "[variables('storageName')]",
    "type": "Microsoft.Storage/storageAccounts",
    ...

구성 변수Configuration variables

복합 JSON 형식을 사용하여 환경에 대한 관련 값을 정의할 수 있습니다.You can use complex JSON types to define related values for an environment.

"variables": {
  "environmentSettings": {
    "test": {
      "instanceSize": "Small",
      "instanceCount": 1
    },
    "prod": {
      "instanceSize": "Large",
      "instanceCount": 4
    }
  }
},

매개 변수에서 사용할 구성 값을 나타내는 값을 만듭니다.In parameters, you create a value that indicates which configuration values to use.

"parameters": {
  "environmentName": {
    "type": "string",
    "allowedValues": [
      "test",
      "prod"
    ]
  }
},

다음과 같이 현재 설정을 검색합니다.You retrieve the current settings with:

"[variables('environmentSettings')[parameters('environmentName')].instanceSize]"

변수 예제 템플릿Variable example templates

이러한 예제 템플릿은 변수 사용에 대한 일부 시나리오를 보여 줍니다.These example templates demonstrate some scenarios for using variables. 변수가 다른 시나리오에서 처리되는 방식을 테스트하려면 변수를 배포하세요.Deploy them to test how variables are handled in different scenarios.

TemplateTemplate 설명Description
변수 정의variable definitions 다양한 변수 형식을 보여 줍니다.Demonstrates the different types of variables. 템플릿은 리소스를 배포하지 않으며,The template doesn't deploy any resources. 변수 값을 구성하고 해당 값을 반환합니다.It constructs variable values and returns those values.
구성 변수configuration variable 구성 값을 정의하는 변수의 사용을 보여 줍니다.Demonstrates the use of a variable that defines configuration values. 템플릿은 리소스를 배포하지 않으며,The template doesn't deploy any resources. 변수 값을 구성하고 해당 값을 반환합니다.It constructs variable values and returns those values.
네트워크 보안 규칙매개 변수 파일network security rules and parameter file 보안 규칙을 네트워크 보안 그룹에 할당하기 위한 올바른 형식으로 배열을 구성합니다.Constructs an array in the correct format for assigning security rules to a network security group.

FunctionsFunctions

템플릿 내에서 함수를 직접 만들 수 있습니다.Within your template, you can create your own functions. 이러한 함수는 템플릿에서 사용할 수 있습니다.These functions are available for use in your template. 일반적으로 템플릿 전체에서 반복하지 않으려는 복잡한 식을 정의합니다.Typically, you define complicated expression that you don't want to repeat throughout your template. 템플릿에서 지원되는 식 및 함수에서 사용자 정의 함수를 만듭니다.You create the user-defined functions from expressions and functions that are supported in templates.

사용자 함수를 정의할 때는 다음과 같은 몇 가지 제한 사항이 있습니다.When defining a user function, there are some restrictions:

  • 함수는 변수에 액세스할 수 없습니다.The function can't access variables.
  • 함수는 함수에 정의된 매개 변수만 사용할 수 있습니다.The function can only use parameters that are defined in the function. 사용 하는 경우는 매개 변수 함수 해당 함수에 대 한 매개 변수를 제한 하는 사용자 정의 함수 내에서.When you use the parameters function within a user-defined function, you're restricted to the parameters for that function.
  • 함수는 다른 사용자 정의 함수를 호출할 수 없습니다.The function can't call other user-defined functions.
  • 함수는 참조 함수를 사용할 수 없습니다.The function can't use the reference function.
  • 함수의 매개 변수는 기본값을 가질 수 없습니다.Parameters for the function can't have default values.

함수는 템플릿 함수와 이름 충돌을 피하기 위해 네임스페이스 값이 필요합니다.Your functions require a namespace value to avoid naming conflicts with template functions. 다음 예제에서는 저장소 계정 이름을 반환하는 함수를 보여줍니다.The following example shows a function that returns a storage account name:

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

다음을 사용하여 함수를 호출합니다.You call the function with:

"resources": [
  {
    "name": "[contoso.uniqueName(parameters('storageNamePrefix'))]",
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2016-01-01",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "Storage",
    "location": "South Central US",
    "tags": {},
    "properties": {}
  }
]

리소스Resources

리소스 섹션에서 배포되거나 업데이트되는 리소스를 정의합니다.In the resources section, you define the resources that are deployed or updated.

사용 가능한 속성Available properties

다음과 같은 구조를 사용하여 리소스를 정의합니다.You define resources with the following structure:

"resources": [
  {
      "condition": "<true-to-deploy-this-resource>",
      "apiVersion": "<api-version-of-resource>",
      "type": "<resource-provider-namespace/resource-type-name>",
      "name": "<name-of-the-resource>",
      "location": "<location-of-resource>",
      "tags": {
          "<tag-name1>": "<tag-value1>",
          "<tag-name2>": "<tag-value2>"
      },
      "comments": "<your-reference-notes>",
      "copy": {
          "name": "<name-of-copy-loop>",
          "count": <number-of-iterations>,
          "mode": "<serial-or-parallel>",
          "batchSize": <number-to-deploy-serially>
      },
      "dependsOn": [
          "<array-of-related-resource-names>"
      ],
      "properties": {
          "<settings-for-the-resource>",
          "copy": [
              {
                  "name": ,
                  "count": ,
                  "input": {}
              }
          ]
      },
      "sku": {
          "name": "<sku-name>",
          "tier": "<sku-tier>",
          "size": "<sku-size>",
          "family": "<sku-family>",
          "capacity": <sku-capacity>
      },
      "kind": "<type-of-resource>",
      "plan": {
          "name": "<plan-name>",
          "promotionCode": "<plan-promotion-code>",
          "publisher": "<plan-publisher>",
          "product": "<plan-product>",
          "version": "<plan-version>"
      },
      "resources": [
          "<array-of-child-resources>"
      ]
  }
]
요소 이름Element name 필수Required 설명Description
conditioncondition 아닙니다.No 리소스가 이 배포 중 프로비전되는지 여부를 나타내는 부울 값입니다.Boolean value that indicates whether the resource will be provisioned during this deployment. true인 경우 리소스는 배포하는 동안 만들어집니다.When true, the resource is created during deployment. false인 경우 리소스는 이 배포에 대해 건너뛰어집니다.When false, the resource is skipped for this deployment. 참조 조건을합니다.See condition.
apiVersionapiVersion Yes 리소스를 만들 때 사용하는 REST API의 버전입니다.Version of the REST API to use for creating the resource. 사용 가능한 값을 확인 하려면 참조 템플릿 참조합니다.To determine available values, see template reference.
형식type Yes 리소스 유형입니다.Type of the resource. 이 값은 리소스 공급자의 네임스페이스와 리소스 형식을 조합한 값입니다(예: Microsoft.Storage/storageAccounts).This value is a combination of the namespace of the resource provider and the resource type (such as Microsoft.Storage/storageAccounts). 사용 가능한 값을 확인 하려면 참조 템플릿 참조합니다.To determine available values, see template reference.
이름name Yes 리소스의 이름입니다.Name of the resource. 이 이름은 RFC3986에 정의된 URI 구성 요소 제한을 따라야 합니다.The name must follow URI component restrictions defined in RFC3986. 또한 리소스 이름을 외부에 노출하는 Azure 서비스는 다른 ID를 스푸핑하려는 시도가 아님을 확인하기 위해 이름의 유효성을 검사합니다.In addition, Azure services that expose the resource name to outside parties validate the name to make sure it isn't an attempt to spoof another identity.
locationlocation 다름Varies 제공된 리소스의 지역적 위치를 지원합니다.Supported geo-locations of the provided resource. 사용 가능한 위치 중 하나를 선택할 수 있지만 대개는 사용자에게 가까운 하나를 선택하는 것이 좋습니다.You can select any of the available locations, but typically it makes sense to pick one that is close to your users. 일반적으로 동일한 지역에서 서로 상호 작용하도록 리소스를 배치하는 것도 좋습니다.Usually, it also makes sense to place resources that interact with each other in the same region. 대부분의 리소스 종류에는 위치가 필요하지만 일부 종류(예: 역할 할당)에는 위치가 필요하지 않습니다.Most resource types require a location, but some types (such as a role assignment) don't require a location.
tagstags 아닙니다.No 리소스와 연결된 태그입니다.Tags that are associated with the resource. 태그를 적용하여 구독에서 리소스를 논리적으로 구성합니다.Apply tags to logically organize resources across your subscription.
설명comments 아닙니다.No 템플릿에서 리소스를 문서화하는 내용에 대한 참고입니다.Your notes for documenting the resources in your template. 자세한 내용은 템플릿의 주석을 참조하세요.For more information, see Comments in templates.
복사copy 아닙니다.No 인스턴스가 둘 이상 필요한 경우 만드는 리소스의 수입니다.If more than one instance is needed, the number of resources to create. 기본 모드는 병렬입니다.The default mode is parallel. 모든 리소스를 동시에 배포하지 않으려면 직렬 모드를 지정합니다.Specify serial mode when you don't want all or the resources to deploy at the same time. 자세한 내용은 Azure Resource Manager에서 리소스의 여러 인스턴스 만들기를 참조하세요.For more information, see Create several instances of resources in Azure Resource Manager.
dependsOndependsOn 아닙니다.No 이 리소스를 배포하기 전에 배포해야 하는 리소스입니다.Resources that must be deployed before this resource is deployed. Resource Manager는 리소스 간의 종속성을 평가한 후 올바른 순서에 따라 리소스를 배포합니다.Resource Manager evaluates the dependencies between resources and deploys them in the correct order. 리소스는 서로 종속되지 않을 경우, 병렬로 배포됩니다.When resources aren't dependent on each other, they're deployed in parallel. 이 값은 리소스 이름 또는 리소스 고유 식별자의 쉼표로 구분된 목록입니다.The value can be a comma-separated list of a resource names or resource unique identifiers. 이 템플릿에 배포된 리소스만 나열합니다.Only list resources that are deployed in this template. 이 템플릿에 정의되지 않은 리소스는 이미 존재해야 합니다.Resources that aren't defined in this template must already exist. 불필요한 종속성은 배포 속도를 느리게 만들고 순환 종속성을 만들기 때문에 추가하지 않습니다.Avoid adding unnecessary dependencies as they can slow your deployment and create circular dependencies. 종속성 설정에 대한 지침은 Azure Resource Manager 템플릿에서 종속성 정의를 참조하세요.For guidance on setting dependencies, see Defining dependencies in Azure Resource Manager templates.
propertiesproperties 아닙니다.No 리소스별 구성 설정입니다.Resource-specific configuration settings. 속성의 값은 리소스를 만들기 위해 REST API 작업(PUT 메서드)에 대한 요청 본문에 제공하는 값과 동일합니다.The values for the properties are the same as the values you provide in the request body for the REST API operation (PUT method) to create the resource. 복사 배열을 지정하여 속성의 여러 인스턴스를 만들 수도 있습니다.You can also specify a copy array to create several instances of a property. 사용 가능한 값을 확인 하려면 참조 템플릿 참조합니다.To determine available values, see template reference.
skusku 아닙니다.No 일부 리소스에서는 SKU를 정의하는 값을 허용합니다.Some resources allow values that define the SKU to deploy. 예를 들어 저장소 계정에 대한 중복 유형을 지정할 수 있습니다.For example, you can specify the type of redundancy for a storage account.
kindkind 아닙니다.No 일부 리소스에서는 배포하는 리소스 종류를 정의하는 값을 허용합니다.Some resources allow a value that defines the type of resource you deploy. 예를 들어 만들 Cosmos DB 종류를 지정할 수 있습니다.For example, you can specify the type of Cosmos DB to create.
계획plan 아닙니다.No 일부 리소스에서는 배포할 계획을 정의하는 값을 허용합니다.Some resources allow values that define the plan to deploy. 예를 들어 가상 머신에 대한 마켓플레이스 이미지를 지정할 수 있습니다.For example, you can specify the marketplace image for a virtual machine.
리소스resources 아닙니다.No 정의 중인 리소스에 종속되는 하위 리소스입니다.Child resources that depend on the resource being defined. 부모 리소스의 스키마에서 허용되는 리소스 유형만 제공합니다.Only provide resource types that are permitted by the schema of the parent resource. 자식 리소스의 정규화된 유형에는 부모 리소스 유형이 포함됩니다(예: Microsoft.Web/sites/extensions).The fully qualified type of the child resource includes the parent resource type, such as Microsoft.Web/sites/extensions. 부모 리소스에 대한 종속성은 암시되지 않습니다.Dependency on the parent resource isn't implied. 해당 종속성을 명시적으로 정의해야 합니다.You must explicitly define that dependency.

조건Condition

배포 중 리소스를 만들지 여부를 결정해야 하는 경우, condition 요소를 사용합니다.When you must decide during deployment whether or not to create a resource, use the condition element. 이 요소 값은 true 또는 false로 확인됩니다.The value for this element resolves to true or false. 값이 true이면 리소스가 만들어집니다.When the value is true, the resource is created. 값이 false이면 리소스가 만들어지지 않습니다.When the value is false, the resource isn't created. 값은 전체 리소스에만 적용할 수 있습니다.The value can only be applied to the whole resource.

일반적으로 새 리소스를 만들거나 기존 리소스를 사용하려는 경우 이 값을 사용합니다.Typically, you use this value when you want to create a new resource or use an existing one. 예를 들어 새 저장소 계정 배포 여부 또는 기존 저장소 계정 사용 여부를 지정하려면 다음을 사용합니다.For example, to specify whether a new storage account is deployed or an existing storage account is used, use:

{
    "condition": "[equals(parameters('newOrExisting'),'new')]",
    "type": "Microsoft.Storage/storageAccounts",
    "name": "[variables('storageAccountName')]",
    "apiVersion": "2017-06-01",
    "location": "[resourceGroup().location]",
    "sku": {
        "name": "[variables('storageAccountType')]"
    },
    "kind": "Storage",
    "properties": {}
}

condition 요소를 사용하는 전체 예제 템플릿은 신규 또는 기존 가상 네트워크, 저장소 및 공용 IP를 사용하는 VM을 참조하세요.For a complete example template that uses the condition element, see VM with a new or existing Virtual Network, Storage, and Public IP.

사용 하는 경우는 참조 하거나 목록 리소스 배포 되지 않는 경우에 리소스를 조건부로 배포 되는 함수를 사용 하 여 함수 평가 됩니다.If you use a reference or list function with a resource that is conditionally deployed, the function is evaluated even if the resource isn't deployed. 함수가 존재 하지 않는 리소스를 참조 하면 오류가 발생 합니다.You get an error if the function refers to a resource that doesn't exist. 사용 된 경우 함수가만 조건에 대 한 계산 리소스를 배포할 때 되도록 함수입니다.Use the if function to make sure the function is only evaluated for conditions when the resource is deployed. 참조를 하는 경우 함수 경우 사용 하는 샘플 템플릿 및 조건에 따라 배포 된 리소스를 사용 하 여 참조 합니다.See the if function for a sample template that uses if and reference with a conditionally deployed resource.

리소스 이름Resource names

일반적으로 Resource Manager에서는 세 가지 유형의 리소스 이름으로 작업합니다.Generally, you work with three types of resource names in Resource Manager:

  • 고유해야 하는 리소스 이름Resource names that must be unique.
  • 고유해야 할 필요는 없지만, 리소스를 식별하는 데 도움이 될 수 있는 이름을 제공하기 위해 선택하는 리소스 이름입니다.Resource names that aren't required to be unique, but you choose to provide a name that can help you identify the resource.
  • 일반적일 수 있는 리소스 이름Resource names that can be generic.

제공 된 고유한 리소스 이름을 데이터 액세스 끝점이 있는 모든 리소스 유형에 대 한 합니다.Provide a unique resource name for any resource type that has a data access endpoint. 고유 이름이 필요한 일반적인 리소스 유형은 다음과 같습니다.Some common resource types that require a unique name include:

  • Azure Storage1Azure Storage1
  • Azure App Service의 Web Apps 기능Web Apps feature of Azure App Service
  • SQL ServerSQL Server
  • Azure Key VaultAzure Key Vault
  • Azure Cache for RedisAzure Cache for Redis
  • Azure BatchAzure Batch
  • Azure Traffic ManagerAzure Traffic Manager
  • Azure SearchAzure Search
  • Azure HDInsightAzure HDInsight

1 Storage 계정 이름은 24자 이내의 소문자여야 하며 하이픈은 포함할 수 없습니다.1 Storage account names also must be lowercase, 24 characters or less, and not have any hyphens.

이름을 설정할 때 고유한 이름을 수동으로 만들거나 uniqueString() 함수를 사용하여 이름을 생성할 수 있습니다.When setting the name, you can either manually create a unique name or use the uniqueString() function to generate a name. 또한 uniqueString 결과에 접두사 또는 접미사를 추가할 수도 있습니다.You also might want to add a prefix or suffix to the uniqueString result. 고유한 이름을 수정하면 이름으로 리소스 유형을 보다 쉽게 식별할 수 있습니다.Modifying the unique name can help you more easily identify the resource type from the name. 예를 들어 다음 변수를 사용하여 저장소 계정에 대한 고유 이름을 생성할 수 있습니다.For example, you can generate a unique name for a storage account by using the following variable:

"variables": {
  "storageAccountName": "[concat(uniqueString(resourceGroup().id),'storage')]"
}

일부 리소스 유형의 경우 제공 하려는 식별에 대 한 이름, 하지만 이름을 고유할 필요는 없습니다.For some resource types, you might want to provide a name for identification, but the name doesn't have to be unique. 이러한 리소스 유형의 경우 사용 하 여 또는 특징에 설명 하는 이름을 제공 합니다.For these resource types, provide a name that describes it use or characteristics.

"parameters": {
  "vmName": { 
    "type": "string",
    "defaultValue": "demoLinuxVM",
    "metadata": {
      "description": "The name of the VM to create."
    }
  }
}

리소스 형식의 다른 리소스를 통해 대부분 액세스 했는지를 사용할 수는 일반 이름을 템플릿에 하드 코드 된입니다.For resource types that you mostly access through a different resource, you can use a generic name that is hard-coded in the template. 예를 들어 SQL Server에서 방화벽 규칙에 대해 표준 일반 이름을 설정할 수 있습니다.For example, you can set a standard, generic name for firewall rules on a SQL server:

{
  "type": "firewallrules",
  "name": "AllowAllWindowsAzureIps",
  ...
}

리소스 위치Resource location

템플릿을 배포할 때는 각 리소스의 위치를 지정해야 합니다.When deploying a template, you must provide a location for each resource. 다양한 리소스 형식이 다양한 위치에서 지원됩니다.Different resource types are supported in different locations. 리소스 형식에 대해 지원되는 위치를 가져오려면 Azure 리소스 공급 기업 및 형식을 참조하세요.To get the supported locations for a resource type, see Azure resource providers and types.

매개 변수를 사용하여 리소스에 대한 위치를 지정하고, 기본값을 resourceGroup().location으로 설정합니다.Use a parameter to specify the location for resources, and set the default value to resourceGroup().location.

다음 예제에서는 매개 변수로 지정된 위치에 배포되는 스토리지 계정을 보여줍니다.The following example shows a storage account that is deployed to a location specified as a parameter:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "variables": {
    "storageAccountName": "[concat('storage', uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "apiVersion": "2018-07-01",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

자식 리소스Child resources

일부 리소스 형식 내에서 자식 리소스의 배열도 정의할 수 있습니다.Within some resource types, you can also define an array of child resources. 자식 리소스는 다른 리소스의 컨텍스트 내에만 존재하는 리소스입니다.Child resources are resources that only exist within the context of another resource. 예를 들어, SQL 데이터베이스는 SQL Server 없이 존재할 수 없으므로 데이터베이스가 서버의 자식입니다.For example, a SQL database can't exist without a SQL server so the database is a child of the server. 서버에 대한 정의 내에서 데이터베이스를 정의할 수 있습니다.You can define the database within the definition for the server.

{
  "name": "exampleserver",
  "type": "Microsoft.Sql/servers",
  "apiVersion": "2014-04-01",
  ...
  "resources": [
    {
      "name": "exampledatabase",
      "type": "databases",
      "apiVersion": "2014-04-01",
      ...
    }
  ]
}

중첩된 경우 형식은 databases로 설정되지만 전체 리소스 형식은 Microsoft.Sql/servers/databases입니다.When nested, the type is set to databases but its full resource type is Microsoft.Sql/servers/databases. Microsoft.Sql/servers/는 부모 리소스 종류에서 유추되므로 입력하지 않습니다.You don't provide Microsoft.Sql/servers/ because it's assumed from the parent resource type. 자식 리소스 이름은 exampledatabase로 설정되지만 전체 이름에는 부모 이름이 포함됩니다.The child resource name is set to exampledatabase but the full name includes the parent name. exampleserver는 부모 리소스에서 유추되므로 입력하지 않습니다.You don't provide exampleserver because it's assumed from the parent resource.

자식 리소스 유형의 형식은 다음과 같습니다.The format of the child resource type is: {resource-provider-namespace}/{parent-resource-type}/{child-resource-type}

자식 리소스 이름의 형식은 다음과 같습니다.The format of the child resource name is: {parent-resource-name}/{child-resource-name}

그러나 서버 내에서 데이터베이스를 정의할 필요는 없습니다.But, you don't have to define the database within the server. 최상위 수준에 자식 리소스를 정의할 수 있습니다.You can define the child resource at the top level. 부모 리소스가 동일한 템플릿에서 배포되지 않는 경우 또는 copy를 사용하여 둘 이상의 자식 리소스를 만들려는 경우, 이 방법을 사용할 수 있습니다.You might use this approach if the parent resource isn't deployed in the same template, or if want to use copy to create more than one child resource. 이 방법을 사용하는 경우 전체 리소스 유형을 입력하고 자식 리소스 이름에 부모 리소스 이름을 포함해야 합니다.With this approach, you must provide the full resource type, and include the parent resource name in the child resource name.

{
  "name": "exampleserver",
  "type": "Microsoft.Sql/servers",
  "apiVersion": "2014-04-01",
  "resources": [ 
  ],
  ...
},
{
  "name": "exampleserver/exampledatabase",
  "type": "Microsoft.Sql/servers/databases",
  "apiVersion": "2014-04-01",
  ...
}

리소스에 대한 정규화된 참조를 생성할 때 형식과 이름의 세그먼트를 결합하는 순서는 단순히 두 세그먼트의 연결이 아닙니다.When constructing a fully qualified reference to a resource, the order to combine segments from the type and name isn't simply a concatenation of the two. 대신, 네임스페이스 뒤에 구체성이 낮은 순으로 형식/이름 쌍의 시퀀스를 사용합니다.Instead, after the namespace, use a sequence of type/name pairs from least specific to most specific:

{resource-provider-namespace}/{parent-resource-type}/{parent-resource-name}[/{child-resource-type}/{child-resource-name}]*

예를 들면 다음과 같습니다.For example:

Microsoft.Compute/virtualMachines/myVM/extensions/myExt 올바른 Microsoft.Compute/virtualMachines/extensions/myVM/myExt 올바르지 않습니다is correct Microsoft.Compute/virtualMachines/extensions/myVM/myExt is not correct

outputsOutputs

Outputs 섹션에서, 배포에서 반환되는 값을 지정합니다.In the Outputs section, you specify values that are returned from deployment. 일반적으로 배포 된 리소스에서 값을 반환 합니다.Typically, you return values from resources that were deployed.

사용 가능한 속성Available properties

다음 예제에서는 출력 정의의 구조를 보여줍니다.The following example shows the structure of an output definition:

"outputs": {
  "<outputName>" : {
    "condition": "<boolean-value-whether-to-output-value>",
    "type" : "<type-of-output-value>",
    "value": "<output-value-expression>"
  }
}
요소 이름Element name 필수Required 설명Description
outputNameoutputName Yes 출력 값의 이름입니다.Name of the output value. 유효한 JavaScript 식별자여야 합니다.Must be a valid JavaScript identifier.
conditioncondition 아닙니다.No 이 출력 값의 반환 여부를 나타내는 부울 값입니다.Boolean value that indicates whether this output value is returned. true이면 해당 값이 배포의 출력에 포함됩니다.When true, the value is included in the output for the deployment. false이면 이 배포에 대한 출력 값을 건너뜁니다.When false, the output value is skipped for this deployment. 지정하지 않으면 기본값은 true입니다.When not specified, the default value is true.
형식type Yes 출력 값의 유형입니다.Type of the output value. 출력 값은 템플릿 입력 매개 변수와 동일한 유형을 지원합니다.Output values support the same types as template input parameters.
value Yes 출력 값으로 계산되어 반환되는 템플릿 언어 식입니다.Template language expression that is evaluated and returned as output value.

출력 값 정의 및 사용Define and use output values

다음 예제에서는 공용 IP 주소의 리소스 ID를 반환하는 방법을 보여줍니다.The following example shows how to return the resource ID for a public IP address:

"outputs": {
  "resourceID": {
    "type": "string",
    "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
  }
}

다음 예제에서는 새 항목이 배포되었는지 여부에 따라 공용 IP 주소의 리소스 ID를 조건부로 반환하는 방법을 보여 줍니다.The next example shows how to conditionally return the resource ID for a public IP address based on whether a new one was deployed:

"outputs": {
  "resourceID": {
    "condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
    "type": "string",
    "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
  }
}

조건부 출력의 간단한 예제를 보려면 조건부 출력 템플릿합니다.For a simple example of conditional output, see conditional output template.

배포 후에 스크립트를 사용하여 값을 검색할 수 있습니다.After the deployment, you can retrieve the value with script. PowerShell의 경우 다음을 사용합니다.For PowerShell, use:

(Get-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -Name <deployment-name>).Outputs.resourceID.value

Azure CLI의 경우 For Azure CLI, use:

az group deployment show -g <resource-group-name> -n <deployment-name> --query properties.outputs.resourceID.value

참조 함수를 사용하여 연결된 템플릿에서 출력 값을 검색할 수 있습니다.You can retrieve the output value from a linked template by using the reference function. 연결된 템플릿에서 출력 값을 가져오려면 "[reference('deploymentName').outputs.propertyName.value]" 같은 구문으로 속성 값을 검색합니다.To get an output value from a linked template, retrieve the property value with syntax like: "[reference('deploymentName').outputs.propertyName.value]".

연결된 템플릿에서 출력 속성을 가져올 때 속성 이름에 대시를 포함할 수 없습니다.When getting an output property from a linked template, the property name can't include a dash.

다음 예제에서는 연결 된 템플릿에서 값을 검색 하 여 부하 분산 장치의 IP 주소를 설정 하는 방법을 보여 줍니다.The following example shows how to set the IP address on a load balancer by retrieving a value from a linked template.

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs.resourceID.value]"
}

reference 함수는 중첩된 템플릿의 출력 섹션에 사용할 수 없습니다.You can't use the reference function in the outputs section of a nested template. 중첩된 템플릿에서 배포된 리소스의 값을 반환하려면 중첩된 템플릿을 연결된 템플릿으로 변환합니다.To return the values for a deployed resource in a nested template, convert your nested template to a linked template.

출력 예제 템플릿Output example templates

TemplateTemplate 설명Description
변수 복사Copy variables 복잡한 변수를 만들고 해당 값을 출력합니다.Creates complex variables and outputs those values. 여기서는 리소스를 배포하지 않습니다.Doesn't deploy any resources.
공용 IP 주소Public IP address 공용 IP 주소를 만들고 리소스 ID를 출력합니다.Creates a public IP address and outputs the resource ID.
부하 분산 장치Load balancer 이전 템플릿에 연결됩니다.Links to the preceding template. 부하 분산 장치를 만들 때 출력에 리소스 ID를 사용합니다.Uses the resource ID in the output when creating the load balancer.

주석 및 메타데이터Comments and metadata

템플릿에 주석 및 메타데이터를 추가하는 몇 가지 옵션이 있습니다.You have a few options for adding comments and metadata to your template.

metadata 개체는 템플릿의 거의 모든 위치에 추가할 수 있습니다.You can add a metadata object almost anywhere in your template. Azure Resource Manager는 해당 개체를 무시하지만 JSON 편집기가 해당 속성이 유효하지 않음을 경고할 수 있습니다.Resource Manager ignores the object, but your JSON editor may warn you that the property isn't valid. 개체 내에 필요한 속성을 정의합니다.In the object, define the properties you need.

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

매개 변수에 대해 description 속성과 함께 metadata 개체를 추가합니다.For parameters, add a metadata object with a description property.

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

포털을 통해 템플릿을 배포하는 경우 설명에 제공하는 텍스트가 자동으로 해당 매개 변수에 대한 팁으로 사용됩니다.When deploying the template through the portal, the text you provide in the description is automatically used as a tip for that parameter.

매개 변수 팁 표시

리소스에 대해 comments 요소 또는 메타데이터 개체를 추가합니다.For resources, add a comments element or a metadata object. 다음 예제에서는 주석 요소와 메타데이터 개체를 모두 보여 줍니다.The following example shows both a comments element and a metadata object.

"resources": [
  {
    "comments": "Storage account used to store VM disks",
    "apiVersion": "2018-07-01",
    "type": "Microsoft.Storage/storageAccounts",
    "name": "[concat('storage', uniqueString(resourceGroup().id))]",
    "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의 경우 출력 값에 메타데이터 개체를 추가합니다.For outputs, add a metadata object to the output value.

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

사용자 정의 함수에 메타데이터 개체를 추가할 수 없습니다.You can't add a metadata object to user-defined functions.

인라인 주석의 경우 //를 사용할 수 있지만 이 구문은 일부 도구에서 작동하지 않습니다.For inline comments, you can use // but this syntax doesn't work with all tools. Azure CLI를 사용하여 인라인 주석 포함 템플릿을 배포할 수 없습니다.You can't use Azure CLI to deploy the template with inline comments. 또한 포털 템플릿 편집기를 사용하여 인라인 주석 포함 템플릿에 대해 작업할 수 없습니다.And, you can't use the portal template editor to work on templates with inline comments. 이 주석 스타일을 추가하는 경우 사용하는 도구가 반드시 인라인 JSON 주석을 지원해야 합니다.If you add this style of comment, be sure the tools you use support inline JSON comments.

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

VS Code에서 언어 모드를 주석 포함 JSON으로 설정할 수 있습니다.In VS Code, you can set the language mode to JSON with comments. 그러면 인라인 주석이 더 이상 유효하지 않음으로 표시되지 않습니다.The inline comments are no longer marked as invalid. 모드를 변경하려면:To change the mode:

  1. 언어 모드 선택(Ctrl+K M)을 엽니다.Open language mode selection (Ctrl+K M)

  2. 주석 포함 JSON을 선택합니다.Select JSON with Comments.

    언어 모드 선택

빠른 시작 및 자습서Quickstarts and tutorials

Resource Manager 템플릿을 개발하는 방법을 알아보려면 다음 빠른 시작 및 자습서를 사용하세요.Use the following quickstarts and tutorials to learn how to develop resource manager templates:

  • 빠른 시작Quickstarts

    제목Title 설명Description
    Azure Portal 사용Use the Azure portal 포털을 사용하여 템플릿을 생성하고, 템플릿을 편집 및 배포하는 프로세스를 이해합니다.Generate a template using the portal, and understand the process of editing and deploying the template.
    Visual Studio Code 사용Use Visual Studio Code Visual Studio Code를 사용하여 템플릿을 생성 및 편집하고, Azure Cloud shell을 사용하여 템플릿을 배포하는 방법을 설명합니다.Use Visual Studio Code to create and edit templates, and how to use the Azure Cloud shell to deploy templates.
    Visual Studio 사용Use Visual Studio Visual Studio를 사용하여 템플릿을 생성, 편집 및 배포합니다.Use Visual Studio to create, edit, and deploy templates.
  • 자습서Tutorials

    제목Title 설명Description
    템플릿 참조 활용Utilize template reference 템플릿 참조 설명서를 활용하여 템플릿을 개발합니다.Utilize the template reference documentation to develop templates. 이 자습서에서는 저장소 계정 스키마를 찾고 해당 정보를 사용하여 암호화된 저장소 계정을 만듭니다.In the tutorial, you find the storage account schema, and use the information to create an encrypted storage account.
    여러 인스턴스 만들기Create multiple instances Azure 리소스의 여러 인스턴스를 만듭니다.Create multiple instances of Azure resources. 이 자습서에서는 저장소 계정의 여러 인스턴스를 만듭니다.In the tutorial, you create multiple instances of storage account.
    리소스 배포 순서 설정Set resource deployment order 리소스 종속성을 정의합니다.Define resource dependencies. 이 자습서에서는 가상 네트워크, 가상 머신 및 종속 Azure 리소스를 만듭니다.In the tutorial, you create a virtual network, a virtual machine, and the dependent Azure resources. 종속성을 정의하는 방법을 알아봅니다.You learn how the dependencies are defined.
    조건 사용Use conditions 일부 매개 변수 값에 따라 리소스를 배포합니다.Deploy resources based on some parameter values. 이 자습서에서는 새 저장소 계정을 만드는 템플릿을 정의하거나 매개 변수 값을 기준으로 기존 저장소 계정을 사용합니다.In the tutorial, you define a template to create a new storage account or use an existing storage account based on the value of a parameter.
    Key vault 통합Integrate key vault Azure Key Vault에서 비밀/암호를 검색합니다.Retrieve secrets/passwords from Azure Key Vault. 이 자습서에서는 가상 머신을 만듭니다.In the tutorial, you create a virtual machine. 가상 머신 관리자 암호는 Key Vault에서 검색됩니다.The virtual machine administrator password is retrieved from a Key Vault.
    연결된 템플릿 만들기Create linked templates 템플릿을 모듈화하고 템플릿에서 다른 템플릿을 호출합니다.Modularize templates, and call other templates from a template. 이 자습서에서는 가상 네트워크, 가상 머신 및 종속 리소스를 만듭니다.In the tutorial, you create a virtual network, a virtual machine, and the dependent resources. 종속 저장소 계정은 연결된 템플릿에서 정의됩니다.The dependent storage account is defined in a linked template.
    가상 머신 확장 배포Deploy virtual machine extensions 확장을 사용하여 배포 후 작업을 수행합니다.Perform post-deployment tasks by using extensions. 자습서에서 고객 스크립트 확장을 배포하여 가상 머신에서 웹 서버를 설치합니다.In the tutorial, you deploy a customer script extension to install web server on the virtual machine.
    SQL 확장 배포Deploy SQL extensions 확장을 사용하여 배포 후 작업을 수행합니다.Perform post-deployment tasks by using extensions. 자습서에서 고객 스크립트 확장을 배포하여 가상 머신에서 웹 서버를 설치합니다.In the tutorial, you deploy a customer script extension to install web server on the virtual machine.
    아티팩트 보호Secure artifacts 배포를 완료하는 데 필요한 아티팩트를 보호합니다.Secure the artifacts needed to complete the deployments. 이 자습서에서는 SQL 확장 배포 자습서에서 사용된 아티팩트를 보호하는 방법을 알아봅니다.In the tutorial, you learn how to secure the artifact used in the Deploy SQL extensions tutorial.
    안전한 배포 사례 사용Use safe deployment practices Azure Deployment Manager 사용Use Azure Deployment manager.
    자습서: Resource Manager 템플릿 배포 문제 해결Tutorial: Troubleshoot Resource Manager template deployments 템플릿 배포 문제를 해결합니다.Troubleshoot template deployment issues.

이 자습서는 주요 Resource Manager 템플릿 개발 개념을 알아보기 위해 개별적으로 또는 계열로 사용할 수 있습니다.These tutorials can be used individually, or as a series to learn the major Resource Manager template development concepts.

다음 단계Next steps