Noções básicas de estrutura e sintaxe dos modelos ARM

Este artigo descreve a estrutura de um modelo do Azure Resource Manager (modelo ARM). Ele apresenta as diferentes seções de um modelo e as propriedades que estão disponíveis nessas seções.

Este artigo destina-se a usuários que têm alguma familiaridade com modelos ARM. Ele fornece informações detalhadas sobre a estrutura do modelo. Para obter um tutorial passo a passo que orienta você durante o processo de criação de um modelo, confira Tutorial: criar e implantar seu primeiro modelo do ARM. Para saber mais sobre os modelos do ARM por meio de um conjunto guiado de módulos do Learn, confira Implantar e gerenciar recursos no Azure usando modelos do ARM.

Dica

Apresentamos um novo idioma chamado Bicep que oferece os mesmos recursos ARM modelos, mas com uma sintaxe mais fácil de usar. Se você estiver considerando a infraestrutura como opções de código, recomendamos analisar o Bicep.

Para saber mais sobre os elementos de um arquivo Bicep, confira Noções básicas de estrutura e sintaxe de arquivos Bicep.

Formato de modelo

Em sua estrutura mais simples, um modelo tem os seguintes elementos:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "",
  "contentVersion": "",
  "apiProfile": "",
  "definitions": { },
  "parameters": { },
  "variables": { },
  "functions": [ ],
  "resources": [ ], /* or "resources": { } with languageVersion 2.0 */
  "outputs": { }
}
Nome do elemento Obrigatório Descrição
$schema Yes Local do arquivo de esquema JavaScript Object Notation (JSON) que descreve a versão da linguagem do modelo. O número de versão usada depende do escopo da implantação e do editor de JSON.

Se você estiver usando o Visual Studio Code com a extensão de ferramentas Azure Resource Manager, use a versão mais recente para implantações de grupo de recursos:
https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#

Outros editores (incluindo Visual Studio) podem não ser capazes de processar esse esquema. Para esses editores, use:
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

Para implantações de assinatura, use:
https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#

Para implantações de grupo de recursos, use:
https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#

Para implantações de locatário, use:
https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
languageVersion No Versão da linguagem do modelo. Para exibir os aprimoramentos do languageVersion 2.0, consulte languageVersion 2.0.
contentVersion Yes Versão do modelo (como 1.0.0.0). Você pode fornecer qualquer valor para esse elemento. Use esse valor para documentar alterações significativas em seu modelo. Ao implantar recursos com o modelo, esse valor pode ser usado para garantir que o modelo certo esteja sendo usado.
apiProfile No Uma versão da API que serve como uma coleção de versões de API para tipos de recursos. Use esse valor para evitar a especificação de versões de API para cada recurso no modelo. Quando você especifica uma versão de perfil de API e não especifica uma versão de API para o tipo de recurso, o Resource Manager usa a versão de API para esse tipo de recurso definido no perfil.

A propriedade de perfil de API é especialmente útil ao implantar um modelo em ambientes diferentes, como Azure Stack e global do Azure. Use a versão do perfil de API para certificar-se que seu modelo use automaticamente versões com suporte em ambos os ambientes. Para obter uma lista das versões atuais do perfil de API e das versões de API de recursos definidas no perfil, consulte perfil de API.

Para obter mais informações, consulte rastrear versões usando perfis de API.
definições No Esquemas usados para validar valores de matriz e objeto. As definições só têm suporte no languageVersion 2.0.
parameters No Valores que são fornecidos quando a implantação é executada para personalizar a implantação dos recursos.
variáveis No Valores que são usados como fragmentos JSON no modelo para simplificar expressões de linguagem do modelo.
funções No Funções definidas pelo usuário que estão disponíveis no modelo.
recursos Yes Tipos de recursos que são implantados ou atualizados em um grupo de recursos ou assinatura.
outputs No Valores que são retornados após a implantação.

Cada elemento tem propriedades que você pode definir. Esse artigo descreve as seções do modelo com mais detalhes.

Definições

Na seção definitions do modelo, especifique os esquemas usados para validar valores de matriz e objeto. Definitions pode ser usado somente com languageVersion 2.0.

"definitions": {
  "<definition-name": {
    "type": "<data-type-of-definition>",
    "allowedValues": [ "<array-of-allowed-values>" ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the-type-definition>"
    }
  }
}
Nome do elemento Obrigatório Descrição
Nome da definição do trabalho Yes Nome da definição de tipo. Deve ser um identificador JavaScript válido.
tipo Yes Tipo da definição de tipo. Os valores e tipos permitidos são cadeia de caracteres, securestring, int, bool, objeto, secureObject, e matriz. Consulte tipos de dados em modelos do ARM.
allowedValues No Matriz de valores permitidos para a definição de tipo para garantir que o valor correto seja fornecido.
minValue No O valor mínimo para definições de tipo int, esse valor é inclusivo.
maxValue No O valor máximo para definições de tipo int, esse valor é inclusivo.
minLength No O tamanho mínimo para definições de tipo de matriz, cadeia de caracteres segura e cadeia de caracteres, esse valor é inclusivo.
maxLength No O tamanho máximo para definições de tipo de matriz, cadeia de caracteres segura e cadeia de caracteres, esse valor é inclusivo.
prefixItems No O esquema para validar o elemento de uma matriz no mesmo índice.
itens Não O esquema aplicado a todos os elementos da matriz cujo índice é maior que o maior índice da restrição prefixItems ou booliano para controlar os elementos da matriz cujo índice é maior que o maior índice da restrição prefixItems.
properties No O esquema para validar o objeto.
additionalProperties Não O esquema que é aplicado a todas as propriedades não mencionadas na restrição properties ou booliano para aceitar qualquer propriedade não definida na restrição properties.
discriminador No O esquema a ser aplicado com base em uma propriedade discriminatória.
anulável No Um booliano que indica que o valor pode ser nulo ou omitido.
descrição No Descrição do tipo de definição exibido aos usuários pelo portal. Para obter mais informações, confira Comentários em modelos.

Para obter exemplos de como usar definições de tipo, consulte Definições de tipo em modelos do ARM.

No Bicep, consulte Tipos de dados definidos pelo usuário.

Parâmetros

Na seção parameters do modelo, você deve especificar os valores que você pode inserir ao implantar os recursos. Você está limitado a 256 parâmetros em um modelo. Você pode reduzir o número de parâmetros por meio de objetos que contenham várias propriedades.

As propriedades disponíveis para um parâmetro são:

"parameters": {
  "<parameter-name>" : {
    "type" : "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [ "<array-of-allowed-values>" ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the parameter>"
    }
  }
}
Nome do elemento Obrigatório Descrição
Nome do parâmetro Yes Nome do parâmetro. Deve ser um identificador JavaScript válido.
tipo Yes Tipo do valor do parâmetro. Os valores e tipos permitidos são cadeia de caracteres, securestring, int, bool, objeto, secureObject, e matriz. Consulte tipos de dados em modelos do ARM.
defaultValue No Valor padrão do parâmetro, se nenhum valor for fornecido para o parâmetro.
allowedValues No Matriz de valores permitidos para o parâmetro para garantir que o valor correto seja fornecido.
minValue No O valor mínimo para parâmetros de tipo int, esse valor é inclusivo.
maxValue No O valor máximo para parâmetros de tipo int, esse valor é inclusivo.
minLength No O tamanho mínimo para parâmetros de tipo de matriz, cadeia de caracteres segura e cadeia de caracteres, esse valor é inclusivo.
maxLength No O tamanho máximo para parâmetros de tipo de matriz, cadeia de caracteres segura e cadeia de caracteres, esse valor é inclusivo.
prefixItems Não A definição de tipo para validar o elemento de uma matriz no mesmo índice. prefixItems só tem suporte no languageVersion 2.0.
itens No O esquema aplicado a todos os elementos da matriz cujo índice é maior que o maior índice da restrição prefixItems ou booliano para controlar os elementos da matriz cujo índice é maior que o maior índice da restrição prefixItems. items só tem suporte no languageVersion 2.0.
properties No O esquema para validar o objeto. properties só tem suporte no languageVersion 2.0.
additionalProperties No O esquema que é aplicado a todas as propriedades não mencionadas na restrição properties ou booliano para aceitar qualquer propriedade não definida na restrição properties. additionalProperties só tem suporte no languageVersion 2.0.
discriminador No O esquema a ser aplicado com base em uma propriedade discriminatória. discriminator só tem suporte no languageVersion 2.0.
anulável Não Um booliano que indica que o valor pode ser nulo ou omitido. nullable só tem suporte no languageVersion 2.0.
descrição No Descrição do parâmetro exibido aos usuários pelo portal. Para obter mais informações, confira Comentários em modelos.

Para ver exemplos de como usar parâmetros, consulte parâmetros em modelos do ARM.

No Bicep, confira parâmetros.

Variáveis

Na seção variables, você cria valores que podem ser usados em todo o seu modelo. Você não precisa definir variáveis, mas normalmente elas simplificam seu modelo reduzindo expressões complexas. O formato de cada variável corresponde a um dos tipos de dados. Você está limitado a 256 variáveis em um modelo.

O exemplo a seguir mostra as opções disponíveis para definir uma variável:

"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>
    }
  ]
}

Para obter informações sobre como usar o copy para criar vários valores para uma variável, consulte copy.

Para exemplos de como usar variáveis, consulte variáveis no modelo do ARM.

No Bicep, confira variáveis.

Funções

Dentro de seu modelo, você pode criar suas próprias funções. Essas funções estão disponíveis para uso em seu modelo. Normalmente, você define a expressões complexas que não deseja repetir em todo o seu modelo. Você cria as funções definidas pelo usuário de expressões e funções que têm suporte em modelos.

Ao definir uma função de usuário, há algumas restrições:

  • A função não pode acessar variáveis.
  • A função só pode usar os parâmetros que são definidos na função. Quando você usa a função parâmetros dentro de uma função definida pelo usuário, você está restrito aos parâmetros dessa função.
  • A função não pode chamar outras funções definidas pelo usuário.
  • A função não pode usar a função de referência.
  • Os parâmetros para a função não podem ter valores padrão.
"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>"
        }
      }
    }
  }
],
Nome do elemento Obrigatório Descrição
namespace Yes Namespace para as funções personalizadas. Use para evitar conflitos de nomenclatura com funções de modelo.
Nome da função Yes Nome da função personalizada. Ao chamar a função, combine o nome da função com o namespace. Por exemplo, para chamada de uma função nomeada uniqueName no namespace contoso, use "[contoso.uniqueName()]".
Nome do parâmetro No Nome do parâmetro a ser usado na função personalizada.
valor do parâmetro No Tipo do valor do parâmetro. Os valores e tipos permitidos são cadeia de caracteres, securestring, int, bool, objeto, secureObject, e matriz.
tipo de saída Yes Tipo do valor de saída. Valores de saída oferecem suporte aos mesmos tipos dos parâmetros de entrada da função.
Valor de saída Yes Expressão de linguagem do modelo que é avaliada e retornada da função.

Para obter exemplos de como usar funções personalizadas, consulte funções definidas pelo usuário no modelo ARM.

No Bicep, não há suporte para funções definidas pelo usuário. O Bicep oferece suporte para uma série de funções e operadores.

Recursos

Na seção de resources, você define os recursos que são implantados ou atualizados. Você está limitado a 800 recursos em um modelo.

Você define recursos com a seguinte estrutura:

"resources": [
  {
    "condition": "<true-to-deploy-this-resource>",
    "type": "<resource-provider-namespace/resource-type-name>",
    "apiVersion": "<api-version-of-resource>",
    "name": "<name-of-the-resource>",
    "comments": "<your-reference-notes>",
    "location": "<location-of-resource>",
    "dependsOn": [
        "<array-of-related-resource-names>"
    ],
    "tags": {
        "<tag-name1>": "<tag-value1>",
        "<tag-name2>": "<tag-value2>"
    },
    "identity": {
      "type": "<system-assigned-or-user-assigned-identity>",
      "userAssignedIdentities": {
        "<resource-id-of-identity>": {}
      }
    },
    "sku": {
        "name": "<sku-name>",
        "tier": "<sku-tier>",
        "size": "<sku-size>",
        "family": "<sku-family>",
        "capacity": <sku-capacity>
    },
    "kind": "<type-of-resource>",
    "scope": "<target-scope-for-extension-resources>",
    "copy": {
        "name": "<name-of-copy-loop>",
        "count": <number-of-iterations>,
        "mode": "<serial-or-parallel>",
        "batchSize": <number-to-deploy-serially>
    },
    "plan": {
        "name": "<plan-name>",
        "promotionCode": "<plan-promotion-code>",
        "publisher": "<plan-publisher>",
        "product": "<plan-product>",
        "version": "<plan-version>"
    },
    "properties": {
        "<settings-for-the-resource>",
        "copy": [
            {
                "name": ,
                "count": ,
                "input": {}
            }
        ]
    },
    "resources": [
        "<array-of-child-resources>"
    ]
  }
]
Nome do elemento Obrigatório Descrição
condition No Valor booliano que indica se o recurso está provisionado durante esta implantação. Quando for true, o recurso será criado durante a implantação. Quando false, o recurso será ignorado para essa implantação. Consulte a condição.
tipo Yes Tipo do recurso. Esse valor é uma combinação do namespace do provedor de recursos e do tipo de recurso como (como Microsoft.Storage/storageAccounts). Para determinar os valores disponíveis, consulte referência de modelo. Para um recurso filho, o formato do tipo depende se ele está aninhado dentro do recurso pai ou definido fora do recurso pai. Confira Definir o nome e o tipo de recursos filho.
apiVersion Sim Versão da API REST a ser usada para criar o recurso. Ao criar um novo modelo, defina esse valor para a versão mais recente do recurso que você está implantando. Desde que o modelo funcione conforme necessário, continue usando a mesma versão de API. Ao continuar a usar a mesma versão de API, você minimiza o risco de uma nova versão de API alterar a forma como o modelo funciona. Considere atualizar a versão da API somente quando desejar usar um novo recurso que é introduzido em uma versão posterior. Para determinar os valores disponíveis, consulte referência de modelo.
name Sim Nome do recurso. O nome deve seguir as restrições de componente URI definidas em RFC3986. Os serviços do Azure que expõem o nome do recurso a terceiros validar o nome para se certificar que ele não é uma tentativa de falsificar outra identidade. Para um recurso filho, o formato do nome depende se ele está aninhado dentro do recurso pai ou definido fora do recurso pai. Confira Definir o nome e o tipo de recursos filho.
comments No Suas anotações para documentar os recursos no modelo. Para obter mais informações, confira Comentários em modelos.
local Varia Locais geográficos com suporte do recurso fornecido. Você pode selecionar qualquer uma das localizações disponíveis, mas geralmente faz sentido escolher um que esteja perto de seus usuários. Normalmente, também faz sentido colocar recursos que interagem entre si na mesma região. A maioria dos tipos de recurso exige um local, ao contrário de alguns deles (como uma atribuição de função). Consulte Definir local do recurso.
dependsOn No Recursos que devem ser implantados antes deste recurso. O Gerenciador de Recursos avalia as dependências entre os recursos e os implanta na ordem correta. Quando os recursos não dependem uns dos outros, eles são implantados em paralelo. O valor pode ser uma lista separada por vírgulas de nomes de recursos ou identificadores exclusivos de recursos. Somente lista recursos que são implantados neste modelo. Os recursos que não são definidos neste modelo já devem existir. Evite adicionar dependências desnecessárias, pois elas podem reduzir sua implantação e criar dependências circulares. Para obter orientação sobre como definir dependências, consulte definir a ordem de implantação de recursos em modelos ARM.
marcas Não Marcas que são associadas ao recurso. Aplique marcas para organizar recursos logicamente em toda a sua assinatura.
identidade Não Alguns recursos são compatíveis com identidades gerenciadas para recursos do Azure. Esses recursos têm um objeto de identidade no nível raiz da declaração do recurso. Você pode definir se a identidade é atribuída pelo usuário ou pelo sistema. Para identidades atribuídas pelo usuário, apresente uma lista de IDs de recurso para as identidades. Defina a chave como a ID do recurso e o valor como um objeto vazio. Para obter mais informações, confira Configurar identidades gerenciadas para recursos do Azure em uma VM do Azure usando modelos.
sku Não Alguns recursos permitem que os valores definam a SKU para implantar. Por exemplo, você pode especificar o tipo de redundância para uma conta de armazenamento.
kind No Alguns recursos permitem que um valor defina o tipo de recurso que você implantar. Por exemplo, você pode especificar o tipo de instância do Azure Cosmos DB a ser criado.
scope No A Propriedade Scope só está disponível para tipos de recursos de extensão. Use-o ao especificar um escopo diferente do escopo de implantação. Consulte definindo o escopo para recursos de extensão em modelos ARM.
copy No Se mais de uma instância for necessária, o número de recursos a serem criados. O modo padrão é paralelo. Especifica o modo serial quando você não deseja que todos os recursos sejam implantados ao mesmo tempo. Para obter mais informações, consulte Criar várias instâncias de recursos no Azure Resource Manager.
plan No Alguns recursos permitem que um valor defina o plano para implantar. Por exemplo, você pode especificar a imagem do marketplace para uma máquina virtual.
properties No Definições de configuração específicas do recurso. Os valores para as propriedades são iguais aos valores que você fornece no corpo da solicitação para a operação da API REST (método PUT) para criar o recurso. Especifique também uma matriz de cópia para criar várias instâncias de uma propriedade. Para determinar os valores disponíveis, consulte referência de modelo.
recursos Não Recursos filho que dependem do recurso que está sendo definido. Forneça apenas os tipos de recurso permitidos pelo esquema do recurso pai. A dependência do recurso pai não é implícita. Você deve definir explicitamente essa dependência. Confira Definir o nome e o tipo de recursos filho.

Para dar suporte ao nome simbólico Bicep em modelos JSON do ARM, adicione languageVersion com a versão 2.0 ou mais recente e altere a definição de recurso de uma matriz para um objeto.

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

Para saber mais, confira Recursos.

No Bicep, confira recursos.

Saídas

Na seção outputs, você especifica valores que são retornados da implantação. Normalmente, você retorna valores de recursos que foram implantados. Você está limitado a 64 saídas em um modelo.

O exemplo a seguir mostra a estrutura de uma definição de saída:

"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>
    }
  }
}
Nome do elemento Obrigatório Descrição
Nome de saída Yes Nome do valor de saída. Deve ser um identificador JavaScript válido.
condition No Valor booliano que indica se esse valor de saída é retornado. Quando true, o valor é incluído na saída para a implantação. Quando false, o valor de saída é ignorado para esta implantação. Quando não especificado, o valor padrão é true.
tipo Yes Tipo do valor de saída. Valores de saída oferecem suporte aos mesmos tipos que os parâmetros de entrada do modelo. Se você especificar securestring para o tipo de saída, o valor não será exibido no histórico de implantação e não poderá ser recuperado de outro modelo. Para usar um valor secreto em mais de um modelo, armazene o segredo em um Key Vault e consulte o segredo no arquivo de parâmetro. Para saber mais, confira Usar o Azure Key Vault para passar um valor de parâmetro seguro durante a implantação.
value No Expressão de linguagem do modelo avaliada e retornada como valor de saída. Especifique o valor ou copie.
copy No Usado para retornar mais de um valor para uma saída. Especifique o valor ou copie. Para obter mais informações, consulte Iteração de saída em modelos ARM.

Para exemplos de como usar saídas, consulte saídas no modelo do ARM.

No Bicep, consulte saídas.

Comentários e metadados

Você tem algumas opções para adicionar comentários e metadados ao seu modelo.

Comentários

Para comentários sequenciais, você pode usar // ou /* ... */. No Visual Studio Code, salve os arquivos de parâmetro com comentários como o tipo de arquivo JSON com comentários (JSONC). Caso contrário, você recebe uma mensagem de erro dizendo "Comentários não permitidos no JSON".

Observação

Ao usar CLI do Azure para implantar modelos com comentários, use a versão 2.3.0 ou posterior e especifique a opção --handle-extended-json-format.

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

No Visual Studio Code, a extensão Azure Resource Manager Tools pode detectar automaticamente um modelo do ARM e alterar o modo de linguagem. Se você vir o modelo do Azure Resource Manager no canto inferior direito do Visual Studio Code, poderá usar os comentários em linha. Os comentários embutidos não são mais marcados como inválidos.

Captura de tela do Visual Studio Code no modo de modelo do Azure Resource Manager.

No Bicep, confira comentários.

Metadados

Você pode adicionar um objeto metadata praticamente em qualquer lugar em seu modelo. O Resource Manager ignora o objeto, mas seu editor de JSON pode avisar você de que a propriedade não é válida. No objeto, defina as propriedades necessárias.

{
  "$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"
  },

Para parameters, adicione um objeto demetadata com uma propriedade de description.

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

Ao implantar o modelo por meio do portal, o texto que você fornece na descrição é usado automaticamente como uma dica para esse parâmetro.

Captura de tela mostrando a dica de parâmetro no portal do Azure.

Para resources, adicione um elemento comments ou um objeto de metadata. O exemplo a seguir mostra um elemento comments e um objeto de metadata.

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

Para outputs, adicione um objeto de metadata ao valor de saída.

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

Você não pode adicionar um objeto de metadata a funções definidas pelo usuário.

Cadeias de caracteres de várias linhas

Você pode dividir uma cadeia de caracteres em várias linhas. Por exemplo, consulte a propriedade location e um dos comentários no exemplo JSON a seguir.

Observação

Para implantar modelos com cadeias de caracteres de várias linhas, use o Azure PowerShell ou a CLI do Azure. Para a CLI, use a versão 2.3.0 ou posterior e especifique o switch --handle-extended-json-format.

Não há suporte para comentários ao implantar o modelo por meio do portal do Azure, de um pipeline de DevOps ou da API REST.

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

No Bicep, confira cadeias multilinhas.

languageVersion 2.0

Observação

O uso de qualquer languageVersion que termina em -experimental não é recomendado em ambientes de produção porque a funcionalidade experimental pode ser alterada a qualquer momento.

Observação

A versão atual da extensão de ferramentas do Azure Resource Manager para Visual Studio Code não reconhece os aprimoramentos feitos no languageVersion 2.0.

Para usar languageVersion 2.0, adicione "languageVersion": "2.0" ao seu modelo:

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

Os aprimoramentos e alterações fornecidos com o languageVersion 2.0:

  • Use o nome simbólico no modelo JSON do ARM. Para obter mais informações, consulte Usar nome simbólico.
  • Use o nome simbólico em loops de cópia de recurso. Confira Usar nome simbólico.
  • Use nomes simbólicos em matrizes dependsOn. Consulte DependsOn e Depender dos recursos em um loop.
  • Use o nome simbólico em vez do nome do recurso na função reference. Confira a referência.
  • A função de referências retorna uma matriz de objetos que representam os estados de runtime de uma coleção de recursos. Consulte referências
  • Use a propriedade de recurso 'existente' para declarar recursos existentes para o ARM ler em vez de implantar um recurso. Consulte Declarar recursos existentes.
  • Usar tipos definidos pelo usuário: Consulte Definição de tipo.
  • Restrições de validação de tipo de agregação adicionais a serem usadas em parâmetros e saídas.
  • O valor padrão para essa propriedade expressionEvaluationOptions é inner. O valor outer está bloqueado. Consulte Escopo de avaliação de expressão em modelos aninhados.
  • A função deployment retorna um subconjunto limitado de propriedades. Consulte implantação.
  • Se o recurso Implantações for usado em uma implantação de nome simbólico, use apiVersion 2020-09-01 ou posterior.
  • Na definição de recurso, valores de escape duplo dentro de uma expressão não são mais necessários. Consulte Caracteres de escape

Próximas etapas