Описание структуры и синтаксиса шаблонов ARMUnderstand the structure and syntax of ARM templates

В этой статье описывается структура шаблона Azure Resource Manager (ARM).This article describes the structure of an Azure Resource Manager (ARM) template. Статья содержит информацию о разных разделах шаблона и свойствах, которые доступны в этих разделах.It presents the different sections of a template and the properties that are available in those sections.

Эта статья предназначена для пользователей, знакомых с шаблонами ARM.This article is intended for users who have some familiarity with ARM templates. Он предоставляет подробные сведения о структуре шаблона.It provides detailed information about the structure of the template. Пошаговые инструкции по созданию шаблона см. в разделе учебник. Создание и развертывание первого шаблона Azure Resource Manager.For a step-by-step tutorial that guides you through the process of creating a template, see Tutorial: Create and deploy 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/2019-04-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. Номер используемой вами версии зависит от области развертывания и вашего редактора JSON.The version number you use depends on the scope of the deployment and your JSON editor.

Если вы используете VS Code с расширением Azure Resource Manager Tools, используйте последнюю версию для развертывания группы ресурсов:If you're using VS Code with the Azure Resource Manager tools extension, use the latest version for resource group deployments:
https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#

Другие редакторы (включая Visual Studio), возможно, не смогут обработать эту схему.Other editors (including Visual Studio) may not be able to process this schema. Для этих редакторов используйте:For those editors, 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#

Для развертываний группы управления используйте:For management group deployments, use:
https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#

Для развертываний клиента используйте:For tenant deployments, use:
https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.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.
апипрофилеapiProfile нет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 для типа ресурса, диспетчер ресурсов использует версию 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.

Дополнительные сведения см. в статье Tracking Versions using API Profiles.For more information, see Track versions using API profiles.
parametersparameters нет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.
функцииfunctions нет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.

ПараметрыParameters

В разделе parameters шаблона укажите, какие значения вы можете вводить при развертывании ресурсов.In the parameters section of the template, you specify which values you can input when deploying the resources. В шаблоне может быть не более 256 параметров.You're limited to 256 parameters in a template. Количество параметров можно уменьшить с помощью объектов, содержащих несколько свойств.You can reduce the number of parameters by using objects that contain multiple 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
имя параметраparameter-name ДаYes Имя параметра.Name of the parameter. Должно быть допустимым идентификатором JavaScript.Must be a valid JavaScript identifier.
typetype ДаYes Тип значения параметра.Type of the parameter value. Допустимые типы и значения: string, securestring, int, bool, object, secureObject и array.The allowed types and values are string, securestring, int, bool, object, secureObject, and array. См. раздел типы данных.See Data types.
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, secure string и array.The minimum length for string, secure string, and array type parameters, this value is inclusive.
maxLengthmaxLength нетNo Максимальная длина (включительно) параметров типа string, secure string и 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.

Примеры использования параметров см. в разделе Параметры в Azure Resource Manager Templates.For examples of how to use parameters, see Parameters in Azure Resource Manager templates.

Типы данныхData types

Для целых чисел, переданных в качестве встроенных параметров, диапазон значений может быть ограничен пакетом SDK или программой командной строки, используемой для развертывания.For integers passed as inline parameters, the range of values may be limited by the SDK or command-line tool you use for deployment. Например, при использовании PowerShell для развертывания шаблона целочисленные типы могут находиться в диапазоне от-2147483648 до 2147483647.For example, when using PowerShell to deploy a template, integer types can range from -2147483648 to 2147483647. Чтобы избежать этого ограничения, укажите большие целочисленные значения в файле параметров.To avoid this limitation, specify large integer values in a parameter file. Типы ресурсов применяют собственные ограничения для целочисленных свойств.Resource types apply their own limits for integer properties.

При указании в шаблоне значений типа Boolean и целых чисел не следует заключать значение в кавычки.When specifying boolean and integer values in your template, don't surround the value with quotation marks. Начальные и конечные строковые значения заключаются в двойные кавычки.Start and end string values with double quotation marks.

Объекты начинаются с левой скобки и заканчиваются правой фигурной скобкой.Objects start with a left brace and end with a right brace. Массивы начинаются с левой скобки и заканчиваются правой скобкой.Arrays start with a left bracket and end with a right bracket.

Если для параметра задана Безопасная строка или защищенный объект, значение параметра не сохраняется в журнале развертывания и не регистрируется.When you set a parameter to a secure string or secure object, the value of the parameter isn't saved to the deployment history and isn't logged. Однако если задать для свойства безопасное значение, которое не ожидает безопасного значения, это значение не будет защищено.However, if you set that secure value to a property that isn't expecting a secure value, the value isn't protected. Например, если для защищенной строки задан тег, это значение сохраняется как обычный текст.For example, if you set a secure string to a tag, that value is stored as plain text. Используйте защищенные строки для паролей и секретов.Use secure strings for passwords and secrets.

Примеры типов данных форматирования см. в разделе форматы типов параметров.For samples of formatting data types, see Parameter type formats.

ПеременныеVariables

В разделе переменных вы создаете значения, которые можно использовать в разных частях шаблона.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 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 для создания нескольких значений для переменной см. в разделе Переменная iteration.For information about using copy to create several values for a variable, see Variable iteration.

Примеры использования переменных см. в разделе переменные в шаблоне Azure Resource Manager.For examples of how to use variables, see Variables in Azure Resource Manager template.

ФункцииFunctions

В шаблоне можно создать свои собственные функции.Within your template, you can create your own functions. Эти функции доступны для использования в шаблоне.These functions are available for use in your template. Как правило, вы определяете сложные выражения, которые не должны повторяться на протяжении всего шаблона.Typically, you define complicated expressions 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. При использовании функции Parameters в определяемой пользователем функции вы можете использовать только параметры этой функции.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.
"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>"
        }
      }
    }
  }
],
Имя элементаElement name ОбязательноRequired ОписаниеDescription
namespacenamespace ДаYes Пространство имен для пользовательских функций.Namespace for the custom functions. Используйте, чтобы избежать конфликтов имен с функциями шаблонов.Use to avoid naming conflicts with template functions.
имя функцииfunction-name ДаYes Имя пользовательской функции.Name of the custom function. При вызове функции объедините имя функции с пространством имен.When calling the function, combine the function name with the namespace. Например, чтобы вызвать функцию с именем uniqueName в пространстве имен contoso, используйте "[contoso.uniqueName()]" .For example, to call a function named uniqueName in the namespace contoso, use "[contoso.uniqueName()]".
имя параметраparameter-name нетNo Имя параметра, который будет использоваться в пользовательской функции.Name of the parameter to be used within the custom function.
параметр-значениеparameter-value нетNo Тип значения параметра.Type of the parameter value. Допустимые типы и значения: string, securestring, int, bool, object, secureObject и array.The allowed types and values are string, securestring, int, bool, object, secureObject, and array.
Тип выходных данныхoutput-type ДаYes Тип выходного значения.Type of the output value. Выходные значения поддерживают те же типы, что и входные параметры функции.Output values support the same types as function input parameters.
Выходное значениеoutput-value ДаYes Выражение языка шаблона, которое вычисляется и возвращается из функции.Template language expression that is evaluated and returned from the function.

Примеры использования пользовательских функций см. в разделе определяемые пользователем функции в Azure Resource Manager шаблоне.For examples of how to use custom functions, see User-defined functions in Azure Resource Manager template.

РесурсыResources

В разделе resources определяются ресурсы, которые развертываются или обновляются.In the resources section, you define the resources that are deployed or updated.

Ресурсы определяются с помощью следующей структуры:You define resources with the following structure:

"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>"
      },
      "sku": {
          "name": "<sku-name>",
          "tier": "<sku-tier>",
          "size": "<sku-size>",
          "family": "<sku-family>",
          "capacity": <sku-capacity>
      },
      "kind": "<type-of-resource>",
      "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>"
      ]
  }
]
Имя элемента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.
typetype Да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. Для дочернего ресурса формат типа зависит от того, является ли он вложенным в родительский ресурс или определен за пределами родительского ресурса.For a child resource, the format of the type depends on whether it's nested within the parent resource or defined outside of the parent resource. См. о настройке имени и типа дочернего ресурса.See Set name and type for child resources.
версия_APIapiVersion ДаYes Версия REST API, которая будет использована для создания ресурса.Version of the REST API to use for creating the resource. Чтобы определить доступные значения, см. раздел Справочник по шаблону.To determine available values, see template reference.
namename ДаYes Имя ресурса.Name of the resource. Имя должно соответствовать ограничениям компонентов URI, определенным в RFC3986.The name must follow URI component restrictions defined in RFC3986. Службы Azure, предоставляющие имя ресурса внешним сторонам, проверяют имя, чтобы убедиться, что это не попытка подмены другого удостоверения.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. Для дочернего ресурса формат имени зависит от того, является ли он вложенным в родительский ресурс или определен за пределами родительского ресурса.For a child resource, the format of the name depends on whether it's nested within the parent resource or defined outside of the parent resource. См. о настройке имени и типа дочернего ресурса.See Set name and type for child resources.
commentscomments нетNo Заметки по ресурсам в шаблоне.Your notes for documenting the resources in your template. Дополнительные сведения см. в разделе комментариев в шаблонах.For more information, see Comments in templates.
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. См. раздел Задание расположения ресурса.See Set resource location.
Свойство 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.For guidance on setting dependencies, see Defining dependencies in Azure Resource Manager templates.
tagstags нетNo Теги, связанные с ресурсом.Tags that are associated with the resource. Примените теги, чтобы логически организовать ресурсы в подписке.Apply tags to logically organize resources across your subscription.
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.
copycopy нет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.
Планplan нетNo В некоторых ресурсах допускается использовать значения, определяющие номер плана для развертывания.Some resources allow values that define the plan to deploy. Например, можно указать образ Marketplace для виртуальной машины.For example, you can specify the marketplace image for a virtual machine.
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. Кроме того, можно указать массив copy для создания нескольких экземпляров свойства.You can also specify a copy array to create several instances of a property. Чтобы определить доступные значения, см. раздел Справочник по шаблону.To determine available values, see template reference.
ресурсов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. Зависимость от родительского ресурса не подразумевается.Dependency on the parent resource isn't implied. Ее необходимо определить явным образом.You must explicitly define that dependency. См. о настройке имени и типа дочернего ресурса.See Set name and type for child resources.

Выходные данныеOutputs

В разделе выходных данных следует указать значения, которые возвращаются после развертывания.In the Outputs section, you specify values that are returned from deployment. Как правило, значения возвращаются из ресурсов, которые были развернуты.Typically, you return values from resources that were deployed.

В следующем примере показана структура определения выходных данных:The following example shows the structure of an output definition:

"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>
    }
  }
}
Имя элементаElement name ОбязательноRequired ОписаниеDescription
Имя выходных данныхoutput-name Да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.
typetype ДаYes Тип выходного значения.Type of the output value. Выходные значения поддерживает те же типы, что и входные параметры шаблона.Output values support the same types as template input parameters. Если для типа выходных данных указано значение SecureString , оно не отображается в журнале развертывания и не может быть извлечено из другого шаблона.If you specify securestring for the output type, the value isn't displayed in the deployment history and can't be retrieved from another template. Чтобы использовать значение секрета в нескольких шаблонах, сохраните секрет в Key Vault и сослаться на секрет в файле параметров.To use a secret value in more than one template, store the secret in a Key Vault and reference the secret in the parameter file. Дополнительные сведения см. в статье Использование Azure Key Vault для передачи защищенного значения параметра во время развертывания.For more information, see Use Azure Key Vault to pass secure parameter value during deployment.
значениеvalue нетNo Выражение на языке шаблона, которое вычисляется и возвращается в качестве выходного значения.Template language expression that is evaluated and returned as output value. Укажите либо значение , либо копирование.Specify either value or copy.
copycopy нетNo Используется для возвращения более одного значения для выходных данных.Used to return more than one value for an output. Укажите значение или скопируйте.Specify value or copy. Дополнительные сведения см. в разделе итерация выходных данных в шаблонах Azure Resource Manager.For more information, see Output iteration in Azure Resource Manager templates.

Примеры использования выходных данных см. в разделе выходные данные в шаблоне Azure Resource Manager.For examples of how to use outputs, see Outputs in Azure Resource Manager template.

Комментарии и метаданныеComments and metadata

Есть несколько вариантов добавления комментариев и метаданных к шаблону.You have a few options for adding comments and metadata to your template.

КомментарииComments

Для встроенных комментариев можно использовать либо, // /* ... */ но этот синтаксис не работает со всеми инструментами.For inline comments, you can use either // or /* ... */ but this syntax doesn't work with all tools. Если вы добавляете этот стиль комментариев, убедитесь, что используемые инструменты поддерживают встроенные комментарии JSON.If you add this style of comment, be sure the tools you use support inline JSON comments.

Примечание

Чтобы развернуть шаблоны с комментариями с помощью Azure CLI с версией 2.3.0 или более ранней, необходимо использовать --handle-extended-json-format параметр.To deploy templates with comments by using Azure CLI with version 2.3.0 or older, you must use the --handle-extended-json-format switch.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2018-10-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 может автоматически обнаружить шаблон диспетчер ресурсов и соответствующим образом изменить языковой режим.In Visual Studio Code, the Azure Resource Manager Tools extension can automatically detect Resource Manager template and change the language mode accordingly. Если вы видите Azure Resource Manager шаблон в правом нижнем углу VS Code, можно использовать встроенные комментарии.If you see Azure Resource Manager Template at the bottom-right corner of VS Code, you can use the inline comments. В таком случае встроенные комментарии больше не будут помечены как недопустимые.The inline comments are no longer marked as invalid.

Visual Studio Code режим шаблона Azure Resource Manager

МетаданныеMetadata

Вы можете добавить объект metadata практически в любом месте шаблона.You can add a metadata object almost anywhere in your template. 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/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "comments": "This template was developed for demonstration purposes.",
    "author": "Example Name"
  },

В разделе параметров добавьте объект metadata со свойством description.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": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2018-07-01",
    "name": "[concat('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": {}
  }
]

В разделе выходных данных добавьте объект метаданных в выходное значение.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.

Многострочные строкиMulti-line strings

Строку можно разбить на несколько строк.You can break a string into multiple lines. Например, см. сведения о свойстве Location и одном из комментариев в следующем примере JSON.For example, see the location property and one of the comments in the following JSON example.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2018-10-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'))]"
  ],

Чтобы развернуть шаблоны с многострочными строками с помощью Azure CLI с версией 2.3.0 или более ранней, необходимо использовать --handle-extended-json-format параметр.To deploy templates with multi-line strings by using Azure CLI with version 2.3.0 or older, you must use the --handle-extended-json-format switch.

Дальнейшие действияNext steps