Nociones sobre la estructura y la sintaxis de las plantillas de Azure Resource ManagerUnderstand the structure and syntax of Azure Resource Manager templates

En este artículo se describe la estructura de una plantilla de Azure Resource Manager.This article describes the structure of an Azure Resource Manager template. Presenta las distintas secciones de una plantilla y las propiedades que están disponibles en esas secciones.It presents the different sections of a template and the properties that are available in those sections.

Este artículo está destinado a los usuarios que ya estén familiarizados con las plantillas de Resource Manager.This article is intended for users who have some familiarity with Resource Manager templates. Proporciona información detallada sobre la estructura de la plantilla.It provides detailed information about the structure of the template. Para obtener un tutorial paso a paso que le guíe en el proceso de creación de una plantilla, consulte Tutorial: Creación e implementación de la primera plantilla de 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.

Formato de plantillaTemplate format

En la estructura más simple, una plantilla tiene los siguientes elementos: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": {  }
}
Nombre del elementoElement name ObligatorioRequired DESCRIPCIÓNDescription
$schema$schema Yes Ubicación del archivo de esquema JSON que describe la versión del idioma de la plantilla.Location of the JSON schema file that describes the version of the template language.

Para las implementaciones de grupos de recursos, use: https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#.For resource group deployments, use: https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

Para las implementaciones de suscripciones, use: https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#.For subscription deployments, use: https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#
contentVersioncontentVersion Yes Versión de la plantilla (por ejemplo, 1.0.0.0).Version of the template (such as 1.0.0.0). Puede especificar cualquier valor para este elemento.You can provide any value for this element. Use este valor para documentar los cambios importantes de la plantilla.Use this value to document significant changes in your template. Al implementar los recursos con la plantilla, este valor se puede usar para asegurarse de que se está usando la plantilla correcta.When deploying resources using the template, this value can be used to make sure that the right template is being used.
apiProfileapiProfile SinNo Una versión de API que actúa como una colección de versiones de API para los tipos de recursos.An API version that serves as a collection of API versions for resource types. Use este valor para evitar tener que especificar las versiones de API para cada recurso de la plantilla.Use this value to avoid having to specify API versions for each resource in the template. Si especifica una versión del perfil de API y no especifica una versión de API para el tipo de recurso, Resource Manager usa la versión de API para el tipo de recurso que está definido en el perfil.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.

La propiedad del perfil de API es especialmente útil al implementar una plantilla en diferentes entornos, como Azure Stack y Azure global.The API profile property is especially helpful when deploying a template to different environments, such as Azure Stack and global Azure. Use la versión del perfil de API para asegurarse de que la plantilla utilice automáticamente las versiones que se admiten en ambos entornos.Use the API profile version to make sure your template automatically uses versions that are supported in both environments. Para obtener una lista de las versiones del perfil de API actuales y de las versiones de API de recursos definidas en el perfil, consulte API Profile (Perfil de API).For a list of the current API profile versions and the resources API versions defined in the profile, see API Profile.

Para más información, consulte Seguimiento de versiones mediante perfiles de API.For more information, see Track versions using API profiles.
parametersparameters SinNo Valores que se proporcionan cuando se ejecuta la implementación para personalizar la implementación de recursos.Values that are provided when deployment is executed to customize resource deployment.
variablesvariables SinNo Valores que se usan como fragmentos JSON en la plantilla para simplificar expresiones de idioma de la plantilla.Values that are used as JSON fragments in the template to simplify template language expressions.
functionsfunctions SinNo Funciones definidas por el usuario que están disponibles dentro de la plantilla.User-defined functions that are available within the template.
resourcesresources Yes Tipos de servicios que se implementan o actualizan en un grupo de recursos o suscripción.Resource types that are deployed or updated in a resource group or subscription.
outputsoutputs SinNo Valores que se devuelven después de la implementación.Values that are returned after deployment.

Cada elemento tiene propiedades que puede configurar.Each element has properties you can set. En este artículo se describen las secciones de la plantilla con más detalle.This article describes the sections of the template in greater detail.

ParámetrosParameters

En la sección de parámetros de la plantilla, especifique los valores que el usuario puede introducir al implementar los recursos.In the parameters section of the template, you specify which values you can input when deploying the resources. Está limitado a 256 parámetros en una plantilla.You're limited to 256 parameters in a template. Puede reducir el número de parámetros mediante el uso de objetos que contienen varias propiedades.You can reduce the number of parameters by using objects that contain multiple properties.

Las propiedades disponibles para un parámetro son: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>"
    }
  }
}
Nombre del elementoElement name ObligatorioRequired DESCRIPCIÓNDescription
nombre-del-parámetroparameter-name Yes Nombre del parámetro.Name of the parameter. Debe ser un identificador válido de JavaScript.Must be a valid JavaScript identifier.
typetype Yes Tipo del valor del parámetro.Type of the parameter value. Los tipos y valores permitidos son string, secureString, int, bool, objet, secureObject y array.The allowed types and values are string, securestring, int, bool, object, secureObject, and array. Consulte Tipos de datos.See Data types.
defaultValuedefaultValue SinNo Valor predeterminado del parámetro, si no se proporciona ningún valor.Default value for the parameter, if no value is provided for the parameter.
allowedValuesallowedValues SinNo Matriz de valores permitidos para el parámetro para asegurarse de que se proporciona el valor correcto.Array of allowed values for the parameter to make sure that the right value is provided.
minValueminValue SinNo El valor mínimo de parámetros de tipo int, este valor es inclusivo.The minimum value for int type parameters, this value is inclusive.
maxValuemaxValue SinNo El valor máximo de parámetros de tipo int, este valor es inclusivo.The maximum value for int type parameters, this value is inclusive.
minLengthminLength SinNo Longitud mínima de los parámetros de tipo cadena, cadena segura y matriz; este valor es inclusivo.The minimum length for string, secure string, and array type parameters, this value is inclusive.
maxLengthmaxLength SinNo Longitud máxima de los parámetros de tipo cadena, cadena segura y matriz; este valor es inclusivo.The maximum length for string, secure string, and array type parameters, this value is inclusive.
descriptiondescription SinNo Descripción del parámetro que se muestra a los usuarios a través del portal.Description of the parameter that is displayed to users through the portal. Para más información, consulte Comentarios en plantillas.For more information, see Comments in templates.

Para ejemplos de cómo usar los parámetros, consulte Parámetros en plantillas de Azure Resource Manager.For examples of how to use parameters, see Parameters in Azure Resource Manager templates.

Tipos de datosData types

En el caso de los enteros pasados como parámetros en línea, el intervalo de valores puede estar limitado por el SDK o la herramienta de línea de comandos que use para la implementación.For integers passed as inline parameters, the range of values may be limited by the SDK or command-line tool you use for deployment. Por ejemplo, al usar PowerShell para implementar una plantilla, los tipos de enteros pueden oscilar entre -2 147 483 648 y 2 147 483 647.For example, when using PowerShell to deploy a template, integer types can range from -2147483648 to 2147483647. Para evitar esta limitación, especifique valores enteros grandes en un archivo de parámetros.To avoid this limitation, specify large integer values in a parameter file. Los tipos de recursos aplican sus propios límites para las propiedades de enteros.Resource types apply their own limits for integer properties.

Al especificar valores booleanos y enteros en la plantilla, no incluya el valor entre comillas.When specifying boolean and integer values in your template, don't surround the value with quotation marks. Los valores de cadena inicial y final se incluyen entre comillas dobles.Start and end string values with double quotation marks.

Los objetos comienzan con una llave de apertura y terminan con una llave de cierre.Objects start with a left brace and end with a right brace. Las matrices comienzan con un corchete de apertura y terminan con un corchete de cierre.Arrays start with a left bracket and end with a right bracket.

Las cadenas seguras y los objetos seguros no se pueden leer después de la implementación de recursos.Secure strings and secure objects can't be read after resource deployment.

Para obtener ejemplos de tipos de datos de formato, consulte Formatos de tipo de parámetro.For samples of formatting data types, see Parameter type formats.

variablesVariables

En la sección de variables, se crean valores que pueden usarse en toda la plantilla.In the variables section, you construct values that can be used throughout your template. No es necesario definir las variables, pero a menudo simplifican la plantilla reduciendo expresiones complejas.You don't need to define variables, but they often simplify your template by reducing complex expressions.

En el ejemplo siguiente se muestran las opciones disponibles para definir una variable: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>
    }
  ]
}

Si desea información sobre el uso de copy para crear varios valores para una variable, consulte Iteración de variables.For information about using copy to create several values for a variable, see Variable iteration.

Para ejemplos de cómo usar las variables, consulte Variables en plantillas de Azure Resource Manager.For examples of how to use variables, see Variables in Azure Resource Manager template.

FunctionsFunctions

Dentro de la plantilla, puede crear sus propias funciones.Within your template, you can create your own functions. Estas funciones están disponibles para su uso en la plantilla.These functions are available for use in your template. Normalmente, definirá expresiones complejas que no desea repetir en toda la plantilla.Typically, you define complicated expressions that you don't want to repeat throughout your template. Creará las funciones definidas por el usuario a partir de las expresiones y funciones que se admiten en las plantillas.You create the user-defined functions from expressions and functions that are supported in templates.

Al definir una función de usuario, hay algunas restricciones:When defining a user function, there are some restrictions:

  • La función no puede acceder a las variables.The function can't access variables.
  • La función solo puede usar los parámetros que se definen en la función.The function can only use parameters that are defined in the function. Cuando usa la función parameters dentro de una función definida por el usuario, los parámetros de esa función serán los que limiten sus acciones.When you use the parameters function within a user-defined function, you're restricted to the parameters for that function.
  • La función no puede llamar a otras funciones definidas por el usuario.The function can't call other user-defined functions.
  • La función no puede usar la función de referencia.The function can't use the reference function.
  • Los parámetros de la función no pueden tener valores predeterminados.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>"
        }
      }
    }
  }
],
Nombre del elementoElement name ObligatorioRequired DESCRIPCIÓNDescription
espacio de nombresnamespace Yes Espacio de nombres para las funciones personalizadas.Namespace for the custom functions. Se usa para evitar conflictos de nomenclatura con funciones de plantilla.Use to avoid naming conflicts with template functions.
nombre-de-la-funciónfunction-name Yes Nombre de la función personalizada.Name of the custom function. Al llamar a la función, combine el nombre de la función con el espacio de nombres.When calling the function, combine the function name with the namespace. Por ejemplo, para llamar a una función denominada uniqueName en el espacio de nombres contoso, use "[contoso.uniqueName()]".For example, to call a function named uniqueName in the namespace contoso, use "[contoso.uniqueName()]".
nombre-del-parámetroparameter-name SinNo Nombre del parámetro que se va a usar en la función personalizada.Name of the parameter to be used within the custom function.
valor-del-parámetroparameter-value SinNo Tipo del valor del parámetro.Type of the parameter value. Los tipos y valores permitidos son string, secureString, int, bool, objet, secureObject y array.The allowed types and values are string, securestring, int, bool, object, secureObject, and array.
tipo de salidaoutput-type Yes Tipo del valor de salida.Type of the output value. Los valores de salida admiten los mismos tipos que los parámetros de entrada de función.Output values support the same types as function input parameters.
valor de salidaoutput-value Yes Expresión de lenguaje de plantilla que se evalúa y devuelve desde la función.Template language expression that is evaluated and returned from the function.

Para ejemplos de cómo usar las funciones personalizadas, consulte Funciones definidas por el usuario de la plantilla de Azure Resource Manager.For examples of how to use custom functions, see User-defined functions in Azure Resource Manager template.

RecursosResources

En la sección de recursos, se define que los recursos se implementan o se actualizan.In the resources section, you define the resources that are deployed or updated.

Defina recursos con la siguiente estructura: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>"
      ]
  }
]
Nombre del elementoElement name ObligatorioRequired DESCRIPCIÓNDescription
conditioncondition SinNo Valor booleano que indica si el recurso se aprovisionará durante esta implementación.Boolean value that indicates whether the resource will be provisioned during this deployment. Si es true, el recurso se crea durante la implementación.When true, the resource is created during deployment. Si es false, el recurso se omite para esta implementación.When false, the resource is skipped for this deployment. Consulte condition.See condition.
apiVersionapiVersion Yes Versión de la API de REST que debe usar para crear el recurso.Version of the REST API to use for creating the resource. Para determinar los valores disponibles, consulte la referencia de plantilla.To determine available values, see template reference.
typetype Yes Tipo de recurso.Type of the resource. Este valor es una combinación del espacio de nombres del proveedor de recursos y el tipo de recurso (como Microsoft.Storage/storageAccounts).This value is a combination of the namespace of the resource provider and the resource type (such as Microsoft.Storage/storageAccounts). Para determinar los valores disponibles, consulte la referencia de plantilla.To determine available values, see template reference. Para un recurso secundario, el formato del tipo depende de si está anidado dentro del recurso primario o se ha definido fuera del recurso primario.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. Consulte Establecimiento del nombre y el tipo de recursos secundarios.See Set name and type for child resources.
Nombrename Yes Nombre del recurso.Name of the resource. El nombre debe cumplir las restricciones de componente URI definidas en RFC3986.The name must follow URI component restrictions defined in RFC3986. Los servicios de Azure que exponen el nombre del recurso a partes externas validan el nombre para asegurarse de que no es un intento de suplantar otra identidad.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. Para un recurso secundario, el formato del nombre depende de si está anidado dentro del recurso primario o se ha definido fuera del recurso primario.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. Consulte Establecimiento del nombre y el tipo de recursos secundarios.See Set name and type for child resources.
locationlocation VaríaVaries Ubicaciones geográficas compatibles del recurso proporcionado.Supported geo-locations of the provided resource. Puede seleccionar cualquiera de las ubicaciones disponibles, pero normalmente tiene sentido elegir aquella que esté más cerca de los usuarios.You can select any of the available locations, but typically it makes sense to pick one that is close to your users. Normalmente, también tiene sentido colocar los recursos que interactúan entre sí en la misma región.Usually, it also makes sense to place resources that interact with each other in the same region. La mayoría de los tipos de recursos requieren una ubicación, pero algunos (por ejemplo, una asignación de roles) no la necesitan.Most resource types require a location, but some types (such as a role assignment) don't require a location. Consulte Establecimiento de la ubicación del recurso.See Set resource location.
etiquetastags SinNo Etiquetas asociadas al recurso.Tags that are associated with the resource. Aplique etiquetas para organizar de forma lógica los recursos en su suscripción.Apply tags to logically organize resources across your subscription.
comentarioscomments SinNo Notas para documentar los recursos de la plantilla.Your notes for documenting the resources in your template. Para más información, consulte Comentarios en plantillas.For more information, see Comments in templates.
copiacopy SinNo Si se necesita más de una instancia, el número de recursos que se crearán.If more than one instance is needed, the number of resources to create. El modo predeterminado es paralelo.The default mode is parallel. Si no desea que todos los recursos se implementen al mismo tiempo, especifique el modo serie.Specify serial mode when you don't want all or the resources to deploy at the same time. Para obtener más información, consulte Creación de varias instancias de recursos en Azure Resource Manager.For more information, see Create several instances of resources in Azure Resource Manager.
dependsOndependsOn SinNo Recursos que se deben implementar antes de implementar este.Resources that must be deployed before this resource is deployed. Resource Manager evalúa las dependencias entre recursos y los implementa en su orden correcto.Resource Manager evaluates the dependencies between resources and deploys them in the correct order. Cuando no hay recursos dependientes entre sí, se implementan en paralelo.When resources aren't dependent on each other, they're deployed in parallel. El valor puede ser una lista separada por comas de nombres de recursos o identificadores de recursos únicos.The value can be a comma-separated list of a resource names or resource unique identifiers. Solo los recursos de lista que se implementan en esta plantilla.Only list resources that are deployed in this template. Deben existir los recursos que no estén definidos en esta plantilla.Resources that aren't defined in this template must already exist. Evite agregar dependencias innecesarias, ya que pueden ralentizar la implementación y crear dependencias circulares.Avoid adding unnecessary dependencies as they can slow your deployment and create circular dependencies. Para obtener instrucciones sobre la configuración de dependencias, consulte Definición de dependencias en plantillas de Azure Resource Manager.For guidance on setting dependencies, see Defining dependencies in Azure Resource Manager templates.
propertiesproperties SinNo Opciones de configuración específicas de recursos.Resource-specific configuration settings. Los valores de las propiedades son exactamente los mismos valores que se especifican en el cuerpo de la solicitud de la operación de API de REST (método PUT) para crear el recurso.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. También puede especificar una matriz de copia para crear varias instancias de una propiedad.You can also specify a copy array to create several instances of a property. Para determinar los valores disponibles, consulte la referencia de plantilla.To determine available values, see template reference.
skusku SinNo Algunos recursos permiten valores que definen la SKU que se va a implementar.Some resources allow values that define the SKU to deploy. Por ejemplo, puede especificar el tipo de redundancia para una cuenta de almacenamiento.For example, you can specify the type of redundancy for a storage account.
kindkind SinNo Algunos recursos permiten un valor que define el tipo de recurso que va a implementar.Some resources allow a value that defines the type of resource you deploy. Por ejemplo, puede especificar el tipo de instancia de Cosmos DB que va a crear.For example, you can specify the type of Cosmos DB to create.
planplan SinNo Algunos recursos permiten valores que definen el plan que se va a implementar.Some resources allow values that define the plan to deploy. Por ejemplo, puede especificar la imagen de Marketplace para una máquina virtual.For example, you can specify the marketplace image for a virtual machine.
resourcesresources SinNo Recursos secundarios que dependen del recurso que se está definiendo.Child resources that depend on the resource being defined. Proporcione solo tipos de recursos que permita el esquema del recurso principal.Only provide resource types that are permitted by the schema of the parent resource. La dependencia del recurso principal no está implícita.Dependency on the parent resource isn't implied. Debe definirla explícitamente.You must explicitly define that dependency. Consulte Establecimiento del nombre y el tipo de recursos secundarios.See Set name and type for child resources.

SalidasOutputs

En la sección de salidas, especifique valores que se devuelven de la implementación.In the Outputs section, you specify values that are returned from deployment. Normalmente, devuelve valores de los recursos implementados.Typically, you return values from resources that were deployed.

En el ejemplo siguiente se muestra la estructura de una definición de salida: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>"
  }
}
Nombre del elementoElement name ObligatorioRequired DESCRIPCIÓNDescription
nombre de salidaoutput-name Yes Nombre del valor de salida.Name of the output value. Debe ser un identificador válido de JavaScript.Must be a valid JavaScript identifier.
conditioncondition SinNo Valor booleano que indica si se va a devolver este valor de salida.Boolean value that indicates whether this output value is returned. Si es true, el valor se incluye en la salida de la implementación.When true, the value is included in the output for the deployment. Si es false, el recurso se omite en esta implementación.When false, the output value is skipped for this deployment. Si no se especifica, el valor predeterminado es true.When not specified, the default value is true.
typetype Yes Tipo del valor de salida.Type of the output value. Los valores de salida admiten los mismos tipos que los parámetros de entrada de plantilla.Output values support the same types as template input parameters. Si especifica securestring para el tipo de salida, el valor no se muestra en el historial de implementación y no se puede recuperar desde otra plantilla.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. Para usar un valor de secreto en más de una plantilla, almacene el secreto en un almacén de claves y haga referencia al secreto en el archivo de parámetros.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. Para más información, consulte Uso de Azure Key Vault para pasar el valor de parámetro seguro durante la implementación.For more information, see Use Azure Key Vault to pass secure parameter value during deployment.
valuevalue Yes Expresión de lenguaje de plantilla que se evaluará y devolverá como valor de salida.Template language expression that is evaluated and returned as output value.

Para ejemplos sobre cómo usar las salidas, consulte Salidas en una plantilla de Azure Resource Manager.For examples of how to use outputs, see Outputs in Azure Resource Manager template.

Comentarios y metadatosComments and metadata

Tiene unas cuantas opciones para agregar comentarios y metadatos a la plantilla.You have a few options for adding comments and metadata to your template.

ComentariosComments

Para los comentarios en línea, puede usar // o /* ... */, pero esta sintaxis no funciona con todas las herramientas.For inline comments, you can use either // or /* ... */ but this syntax doesn't work with all tools. No puede usar el editor de plantillas del portal para trabajar en plantillas con comentarios insertados.You can't use the portal template editor to work on templates with inline comments. Si agrega este estilo de comentarios, asegúrese de que las herramientas que use admitan los comentarios JSON insertados.If you add this style of comment, be sure the tools you use support inline JSON comments.

Nota

Para implementar plantillas con comentarios mediante la CLI de Azure, debe usar el modificador --handle-extended-json-format.To deploy templates with comments by using Azure CLI, you must use the --handle-extended-json-format switch.

{
  "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'))]"
  ],

En Visual Studio Code, la extensión de herramientas de Azure Resource Manager puede detectar automáticamente una plantilla de Resource Manager y cambiar el modo de lenguaje en consecuencia.In Visual Studio Code, the Azure Resource Manager Tools extension can automatically detect Resource Manager template and change the language mode accordingly. Si ve Plantilla de Azure Resource Manager en la esquina inferior derecha de VS Code, puede usar los comentarios en línea.If you see Azure Resource Manager Template at the bottom right corner of VS Code, you can use the inline comments. Los comentarios insertados ya no están marcados como no válidos.The inline comments are no longer marked as invalid.

Modo de plantillas de Azure Resource Manager en Visual Studio Code

MetadatosMetadata

Puede agregar un objeto metadata prácticamente en cualquier parte de la plantilla.You can add a metadata object almost anywhere in your template. Resource Manager omite el objeto, pero el editor JSON puede advertirle de que la propiedad no es válida.Resource Manager ignores the object, but your JSON editor may warn you that the property isn't valid. En el objeto, defina las propiedades que necesita.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"
  },

Para parameters, agregue un objeto metadata con una propiedad description.For parameters, add a metadata object with a description property.

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

Al implementar la plantilla a través del portal, el texto que proporciona en la descripción se usa automáticamente como sugerencia para ese parámetro.When deploying the template through the portal, the text you provide in the description is automatically used as a tip for that parameter.

Mostrar sugerencia de parámetros

Para resources, agregue un elemento comments o un objeto de metadatos.For resources, add a comments element or a metadata object. En el ejemplo siguiente se muestra un elemento de comentarios y un objeto de metadatos.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": {}
  }
]

Para outputs, agregue un objeto de metadatos para el valor de salida.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"
    }
  },

No se puede agregar un objeto de metadatos a las funciones definidas por el usuario.You can't add a metadata object to user-defined functions.

Cadenas de varias líneasMulti-line strings

Una cadena se puede dividir en varias líneas.You can break a string into multiple lines. Por ejemplo, la propiedad Location y uno de los comentarios del siguiente ejemplo de JSON.For example the location property and one of the comments in the following JSON example.

{
  "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",
  /*
    storage account and network interface
    must be deployed first
  */
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

Para implementar plantillas con cadenas de varias líneas mediante la CLI de Azure, debe usar el modificador --handle-extended-json-format.To deploy templates with multi-line strings by using Azure CLI, you must use the --handle-extended-json-format switch.

Pasos siguientesNext steps