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. 템플릿 만들기에 관한 단계별 연습은 첫 번째 Azure Resource Manager 템플릿 만들기를 참조하세요.For a step-by-step tutorial on creating a template, see Create your first Azure Resource Manager template.

빠른 시작 및 자습서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.
    안전한 배포 사례 사용Use safe deployment practices Azure Deployment Manager 사용Use Azure Deployment manager.

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

템플릿 형식Template format

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

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "parameters": {  },
    "variables": {  },
    "functions": [  ],
    "resources": [  ],
    "outputs": {  }
}
요소 이름Element name 필수Required 설명Description
$schema$schema yesYes 템플릿 언어의 버전을 설명하는 JSON 스키마 파일의 위치입니다.Location of the JSON schema file that describes the version of the template language. 위 예제에서 보여 주는 URL을 사용합니다.Use the URL shown in the preceding example.
contentVersioncontentVersion yesYes 템플릿의 버전입니다(예: 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.
매개 변수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 yesYes 리소스 그룹에 배포 또는 업데이트되는 리소스 종류입니다.Resource types that are deployed or updated in a resource group.
outputsoutputs 아니요No 배포 후 반환되는 값입니다.Values that are returned after deployment.

각 요소에는 사용자가 설정할 수 있는 속성이 있습니다.Each element has properties you can set. 다음 예제에서는 템플릿에 대한 전체 구문을 보여 줍니다.The following example shows the full syntax for a template:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "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>" 
            }
        }
    },
    "variables": {
        "<variable-name>": "<variable-value>",
        "<variable-object-name>": {
            <variable-complex-type-value>
        },
        "<variable-object-name>": {
            "copy": [
                {
                    "name": "<name-of-array-property>",
                    "count": <number-of-iterations>,
                    "input": {
                        <properties-to-repeat>
                    }
                }
            ]
        },
        "copy": [
            {
                "name": "<variable-array-name>",
                "count": <number-of-iterations>,
                "input": {
                    <properties-to-repeat>
                }
            }
        ]
    },
    "functions": [
      {
        "namespace": "<namespace-for-your-function>",
        "members": {
          "<function-name>": {
            "parameters": [
              {
                "name": "<parameter-name>",
                "type": "<type-of-parameter-value>"
              }
            ],
            "output": {
              "type": "<type-of-output-value>",
              "value": "<function-expression>"
            }
          }
        }
      }
    ],
    "resources": [
      {
          "condition": "<boolean-value-whether-to-deploy>",
          "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": {}
                  }
              ]
          },
          "resources": [
              "<array-of-child-resources>"
          ]
      }
    ],
    "outputs": {
        "<outputName>" : {
            "type" : "<type-of-output-value>",
            "value": "<output-value-expression>"
        }
    }
}

이 기사에서는 템플릿의 섹션에 대해 자세히 설명합니다.This article describes the sections of the template in greater detail.

구문Syntax

템플릿의 기본 구문은 JSON이지만,The basic syntax of the template is JSON. 식 및 함수를 사용하면 템플릿에서 사용할 수 있는 JSON 값을 확장할 수 있습니다.However, expressions and functions extend the JSON values available within the template. 식은 JSON 문자열 리터럴 내에서 작성되며, 첫 번째 및 마지막 문자가 각각 대괄호 []입니다.Expressions are written within JSON string literals whose first and last characters are the brackets: [ and ], respectively. 식의 값은 템플릿을 배포할 때 평가됩니다.The value of the expression is evaluated when the template is deployed. 문자열 리터럴로 작성되지만 식의 평가 결과는 실제 식에 따라 다른 JSON 형식(예: 배열 또는 정수)일 수 있습니다.While written as a string literal, the result of evaluating the expression can be of a different JSON type, such as an array or integer, depending on the actual expression. 리터럴 문자열을 대괄호 [로 시작하되, 식으로 해석되지 않게 하려면 문자 [[로 시작하도록 추가 대괄호를 추가합니다.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 [[.

일반적으로 배포를 구성하기 위한 작업을 수행하는 함수를 식과 함께 사용합니다.Typically, you use expressions with functions to perform operations for configuring the deployment. JavaScript에서와 마찬가지로 함수 호출은 functionName(arg1,arg2,arg3)과 같이 형식이 지정됩니다.Just like in JavaScript, function calls are formatted as functionName(arg1,arg2,arg3). 점과 [인덱스] 연산자를 사용하여 속성을 참조할 수 있습니다.You reference properties by using the dot and [index] operators.

다음 예제에서는 값을 생성할 때 여러 함수를 사용하는 방법을 보여 줍니다.The following example shows how to use several functions when constructing a value:

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

템플릿 함수의 전체 목록을 보려면 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.

다음 예제에서는 간단한 매개 변수 정의를 보여 줍니다.The following example shows a simple parameter definition:

"parameters": {
  "siteNamePrefix": {
    "type": "string",
    "metadata": {
      "description": "The name prefix of the web app that you wish to create."
    }
  },
},

매개 변수 정의에 대한 자세한 내용은 Azure Resource Manager 템플릿의 매개 변수 섹션을 참조하세요.For information about defining parameters, see Parameters section of Azure Resource Manager templates.

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.

다음 예제는 간단한 변수 정의를 보여 줍니다.The following example shows a simple variable definition:

"variables": {
  "webSiteName": "[concat(parameters('siteNamePrefix'), uniqueString(resourceGroup().id))]",
},

변수 정의에 대한 자세한 내용은 Azure Resource Manager 템플릿의 변수 섹션을 참조하세요.For information about defining variables, see Variables section of Azure Resource Manager templates.

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't access template parameters. 즉, 매개 변수 함수는 함수 매개 변수로 제한됩니다.That is, the parameters function is restricted to function parameters.
  • 함수는 다른 사용자 정의 함수를 호출할 수 없습니다.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. 여기서는 올바른 값을 제공하기 위해 배포하는 유형을 이해해야 하기 때문에 템플릿이 더 복잡해질 수 있습니다.This section can get complicated because you must understand the types you're deploying to provide the right values.

"resources": [
  {
    "apiVersion": "2016-08-01",
    "name": "[variables('webSiteName')]",
    "type": "Microsoft.Web/sites",
    "location": "[resourceGroup().location]",
    "properties": {
      "serverFarmId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Web/serverFarms/<plan-name>"
    }
  }
],

배포 동안 리소스를 조건부로 포함하거나 제외하려면 Condition 요소를 사용합니다.To conditionally include or exclude a resource during deployment, use the Condition element. 리소스 섹션에 대한 자세한 내용은 Azure Resource Manager 템플릿의 리소스 섹션을 참조하세요.For more information about the resources section, see Resources section of Azure Resource Manager templates.

outputsOutputs

Outputs 섹션에서, 배포에서 반환되는 값을 지정합니다.In the Outputs section, you specify values that are returned from deployment. 예를 들어, 배포된 리소스에 액세스하기 위한 URI를 반환할 수 있습니다.For example, you could return the URI to access a deployed resource.

"outputs": {
  "newHostName": {
    "type": "string",
    "value": "[reference(variables('webSiteName')).defaultHostName]"
  }
}

자세한 내용은 Azure Resource Manager 템플릿의 출력 섹션을 참조하세요.For more information, see Outputs section of Azure Resource Manager templates.

템플릿 제한Template limits

템플릿의 크기는 1MB로, 각 매개 변수 파일의 크기는 64KB로 제한됩니다.Limit the size of your template to 1 MB, and each parameter file to 64 KB. 1MB의 제한은 반복적인 리소스 정의로 확장된 후 템플릿의 마지막 상태와 변수 및 매개변수 값에 적용됩니다.The 1-MB limit applies to the final state of the template after it has been expanded with iterative resource definitions, and values for variables and parameters.

또한 다음으로 제한됩니다.You're also limited to:

  • 매개 변수 256개256 parameters
  • 변수 256개256 variables
  • 리소스 800개(인쇄 매수 포함)800 resources (including copy count)
  • 출력 값 64개64 output values
  • 템플릿 식의 문자 24,576자24,576 characters in a template expression

중첩된 템플릿을 사용하여 일부 템플릿 제한을 초과할 수 있습니다.You can exceed some template limits by using a nested template. 자세한 내용은 Azure 리소스를 배포할 때 연결된 템플릿 사용을 참조하세요.For more information, see Using linked templates when deploying Azure resources. 매개 변수, 변수 또는 출력의 수를 줄이려면 개체에 여러 값을 결합할 수 있습니다.To reduce the number of parameters, variables, or outputs, you can combine several values into an object. 자세한 내용은 매개 변수로 개체 사용을 참조하세요.For more information, see Objects as parameters.

다음 단계Next steps