Understand the structure and syntax of ARM templates (Compreender a estrutura e a sintaxe dos modelos do Resource Manager)

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

Este artigo destina-se a utilizadores que estejam familiarizados com os modelos do ARM. Fornece informações detalhadas sobre a estrutura do modelo. Para obter um tutorial passo a passo que o orienta no processo de criação de um modelo, consulte Tutorial: Criar e implementar o seu primeiro modelo do ARM. Para saber mais sobre os modelos do ARM através de um conjunto orientado de módulos do Learn, veja Implementar e gerir recursos no Azure com modelos do ARM.

Dica

O Bicep é uma nova linguagem que oferece as mesmas capacidades que os modelos do ARM, mas com uma sintaxe mais fácil de utilizar. Se estiver a considerar a infraestrutura como opções de código, recomendamos que veja Bicep.

Para saber mais sobre os elementos de um ficheiro Bicep, veja Compreender a estrutura e a sintaxe dos ficheiros bicep.

Formato de modelo

Na 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 Necessário Descrição
$schema Yes Localização do ficheiro de esquema JSON (JavaScript Object Notation) que descreve a versão da linguagem do modelo. O número de versão que utiliza depende do âmbito da implementação e do seu editor de JSON.

Se estiver a utilizar o Visual Studio Code com a extensão de ferramentas de Resource Manager do Azure, utilize a versão mais recente para implementações de grupos de recursos:
https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#

Outros editores (incluindo o Visual Studio) poderão não conseguir processar este esquema. Para esses editores, utilize:
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

Para implementações de subscrições, utilize:
https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#

Para implementações de grupos de gestão, utilize:
https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#

Para implementações de inquilinos, utilize:
https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
languageVersion No Versão de idioma do modelo. Para ver os melhoramentos de languageVersion 2.0, veja languageVersion 2.0.
contentVersion Yes Versão do modelo (como 1.0.0.0). Pode fornecer qualquer valor para este elemento. Utilize este valor para documentar alterações significativas no seu modelo. Ao implementar recursos com o modelo, este valor pode ser utilizado para se certificar de que o modelo correto está a ser utilizado.
apiProfile No Uma versão da API que serve como uma coleção de versões de API para tipos de recursos. Utilize este valor para evitar ter de especificar versões de API para cada recurso no modelo. Quando especifica uma versão do perfil de API e não especifica uma versão da API para o tipo de recurso, Resource Manager utiliza a versão da API para esse tipo de recurso definido no perfil.

A propriedade perfil de API é especialmente útil ao implementar um modelo em diferentes ambientes, como o Azure Stack e o Azure global. Utilize a versão do perfil da API para se certificar de que o modelo utiliza automaticamente versões suportadas em ambos os ambientes. Para obter uma lista das versões atuais do perfil da API e das versões da API de recursos definidas no perfil, veja Perfil da API.

Para obter mais informações, veja Controlar versões com perfis de API.
definições No Esquemas que são utilizados para validar valores de matriz e objeto. As definições só são suportadas no languageVersion 2.0.
parameters No Valores fornecidos quando a implementação é executada para personalizar a implementação de recursos.
variáveis No Valores que são utilizados como fragmentos JSON no modelo para simplificar as expressões de linguagem de modelo.
funções No Funções definidas pelo utilizador que estão disponíveis no modelo.
recursos Yes Tipos de recursos que são implementados ou atualizados num grupo de recursos ou subscrição.
saídas No Valores devolvidos após a implementação.

Cada elemento tem propriedades que pode definir. Este artigo descreve as secções do modelo com maior detalhe.

Definições

definitions Na secção do modelo, especifique os esquemas utilizados para validar valores de matriz e objeto. Definitions só pode ser utilizado 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 Necessário Descrição
definition-name Yes Nome da definição do tipo. Tem de ser um identificador JavaScript válido.
tipo Yes Tipo da definição do tipo. Os tipos e valores permitidos são cadeia, securestring, int, bool, object, secureObject e matriz. Veja Tipos de dados em modelos do ARM.
allowedValues No Matriz de valores permitidos para a definição do tipo para se certificar de que o valor certo é fornecido.
minValue No O valor mínimo para definições de tipo int, este valor é inclusivo.
maxValue No O valor máximo para definições de tipo int, este valor é inclusivo.
minLength No O comprimento mínimo das definições de cadeia, cadeia segura e tipo de matriz, este valor é inclusivo.
maxLength No O comprimento máximo das definições de cadeia, cadeia segura e tipo de matriz, este valor é inclusivo.
prefixItems No O esquema para validar o elemento de uma matriz no mesmo índice.
itens No O esquema que é aplicado a todos os elementos da matriz cujo índice é maior do que o maior índice da prefixItems restrição ou booleano para controlar os elementos da matriz cujo índice é maior do que o maior índice da prefixItems restrição.
propriedades No O esquema para validar o objeto.
additionalProperties No O esquema aplicado a todas as propriedades não mencionadas na properties restrição ou booleano para aceitar qualquer propriedade não definida na properties restrição.
discriminador No O esquema a aplicar com base numa propriedade discriminatória.
Nulo No Um booleano que indica que o valor pode ser nulo ou omitido.
descrição No Descrição da definição de tipo que é apresentada aos utilizadores através do portal. Para obter mais informações, veja Comentários em modelos.

Para obter exemplos de como utilizar definições de tipo, veja Escrever definições em modelos do ARM.

No Bicep, veja Tipos de dados definidos pelo utilizador.

Parâmetros

parameters Na secção do modelo, especifique os valores que pode introduzir ao implementar os recursos. Está limitado a 256 parâmetros num modelo. Pode reduzir o número de parâmetros com objetos que contêm 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 Necessário Descrição
parameter-name Yes Nome do parâmetro . Tem de ser um identificador JavaScript válido.
tipo Yes Tipo do valor do parâmetro. Os tipos e valores permitidos são cadeia, securestring, int, bool, object, secureObject e matriz. Veja Tipos de dados em modelos do ARM.
valordepredefinido No Valor predefinido para o parâmetro, se não for fornecido nenhum valor para o parâmetro .
allowedValues No Matriz de valores permitidos para o parâmetro para garantir que o valor certo é fornecido.
minValue No O valor mínimo para parâmetros de tipo int, este valor é inclusivo.
maxValue No O valor máximo para parâmetros de tipo int, este valor é inclusivo.
minLength No O comprimento mínimo para os parâmetros de cadeia, cadeia segura e tipo de matriz, este valor é inclusivo.
maxLength No O comprimento máximo para os parâmetros de cadeia, cadeia segura e tipo de matriz, este valor é inclusivo.
prefixItems No A definição de tipo para validar o elemento de uma matriz no mesmo índice. prefixItems só é suportado em languageVersion 2.0.
itens No O esquema que é aplicado a todos os elementos da matriz cujo índice é maior do que o maior índice da prefixItems restrição ou booleano para controlar os elementos da matriz cujo índice é maior do que o maior índice da prefixItems restrição. items só é suportado em languageVersion 2.0.
propriedades No O esquema para validar o objeto. properties só é suportado em languageVersion 2.0.
additionalProperties No O esquema aplicado a todas as propriedades não mencionadas na properties restrição ou booleano para aceitar qualquer propriedade não definida na properties restrição. additionalProperties só é suportado em languageVersion 2.0.
discriminador No O esquema a aplicar com base numa propriedade discriminatória. discriminator só é suportado em languageVersion 2.0.
Nulo No Um booleano que indica que o valor pode ser nulo ou omitido. nullable só é suportado em languageVersion 2.0.
descrição No Descrição do parâmetro que é apresentado aos utilizadores através do portal. Para obter mais informações, veja Comentários em modelos.

Para obter exemplos de como utilizar parâmetros, veja Parameters in ARM templates (Parâmetros nos modelos do ARM).

No Bicep, veja parâmetros.

Variáveis

variables Na secção, vai construir valores que podem ser utilizados em todo o modelo. Não precisa de definir variáveis, mas muitas vezes simplificam o seu modelo ao reduzir expressões complexas. O formato de cada variável corresponde a um dos tipos de dados. Está limitado a 256 variáveis num modelo.

O exemplo seguinte 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 utilizar copy para criar vários valores para uma variável, veja Iteração variável.

Para obter exemplos de como utilizar variáveis, veja Variables in ARM template (Variáveis no modelo arm).

No Bicep, veja variáveis.

Funções

No seu modelo, pode criar as suas próprias funções. Estas funções estão disponíveis para utilização no seu modelo. Normalmente, define expressões complicadas que não pretende repetir em todo o modelo. Pode criar as funções definidas pelo utilizador a partir de expressões e funções que são suportadas em modelos.

Ao definir uma função de utilizador, existem algumas restrições:

  • A função não consegue aceder a variáveis.
  • A função só pode utilizar parâmetros definidos na função. Quando utiliza a função parâmetros numa função definida pelo utilizador, está restrito aos parâmetros dessa função.
  • A função não pode chamar outras funções definidas pelo utilizador.
  • A função não pode utilizar a função de referência.
  • Os parâmetros da função não podem ter valores predefinidos.
"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 Necessário Descrição
espaço de nomes Yes Espaço de nomes para as funções personalizadas. Utilizado 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 espaço de nomes. Por exemplo, para chamar uma função com o nome uniqueName no espaço de nomes contoso, utilize "[contoso.uniqueName()]".
nome do parâmetro No Nome do parâmetro a utilizar na função personalizada.
parameter-value No Tipo do valor do parâmetro. Os tipos e valores permitidos são cadeia, securestring, int, bool, object, secureObject e matriz.
tipo de saída Yes Tipo do valor de saída. Os valores de saída suportam os mesmos tipos que os parâmetros de entrada de funções.
output-value Yes Expressão de linguagem de modelo que é avaliada e devolvida da função.

Para obter exemplos de como utilizar funções personalizadas, veja Funções definidas pelo utilizador no modelo do ARM.

No Bicep, as funções definidas pelo utilizador não são suportadas. O Bicep suporta várias funções e operadores.

Recursos

resources Na secção, define os recursos que são implementados ou atualizados. Está limitado a 800 recursos num modelo.

Define os 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 Necessário Descrição
condição No Valor booleano que indica se o recurso é aprovisionado durante esta implementação. Quando true, o recurso é criado durante a implementação. Quando false, o recurso é ignorado para esta implementação. Ver condição.
tipo Yes Tipo de recurso. Este valor é uma combinação do espaço de nomes do fornecedor de recursos e do tipo de recurso (como Microsoft.Storage/storageAccounts). Para determinar os valores disponíveis, veja referência de modelo. Para um recurso subordinado, o formato do tipo depende se está aninhado no recurso principal ou definido fora do recurso principal. Veja Definir nome e tipo para recursos subordinados.
apiVersion Yes Versão da API REST a utilizar para criar o recurso. Ao criar um novo modelo, defina este valor para a versão mais recente do recurso que está a implementar. Desde que o modelo funcione conforme necessário, continue a utilizar a mesma versão da API. Ao continuar a utilizar a mesma versão da API, minimiza o risco de uma nova versão da API alterar o funcionamento do modelo. Considere atualizar a versão da API apenas quando quiser utilizar uma nova funcionalidade introduzida numa versão posterior. Para determinar os valores disponíveis, veja referência de modelo.
name Yes Nome do recurso. O nome tem de seguir as restrições de componentes URI definidas no RFC3986. Os serviços do Azure que expõem o nome do recurso a entidades externas validam o nome para se certificarem de que não é uma tentativa de falsificar outra identidade. Para um recurso subordinado, o formato do nome depende se está aninhado no recurso principal ou definido fora do recurso principal. Veja Definir nome e tipo para recursos subordinados.
comentários No As suas notas para documentar os recursos no seu modelo. Para obter mais informações, veja Comentários em modelos.
localização Varia Localizações geográficas suportadas do recurso fornecido. Pode selecionar qualquer uma das localizações disponíveis, mas normalmente faz sentido escolher uma que esteja próxima dos seus utilizadores. Normalmente, também faz sentido colocar recursos que interagem entre si na mesma região. A maioria dos tipos de recursos requer uma localização, mas alguns tipos (como uma atribuição de função) não necessitam de uma localização. Veja Definir localização do recurso.
dependsOn No Recursos que têm de ser implementados antes de este recurso ser implementado. Resource Manager avalia as dependências entre recursos e implementa-as pela ordem correta. Quando os recursos não dependem uns dos outros, são implementados em paralelo. O valor pode ser uma lista separada por vírgulas de nomes de recursos ou identificadores exclusivos de recursos. Listar apenas os recursos implementados neste modelo. Os recursos que não estão definidos neste modelo já têm de existir. Evite adicionar dependências desnecessárias, uma vez que podem atrasar a implementação e criar dependências circulares. Para obter orientações sobre como definir dependências, veja Definir a ordem de implementação de recursos em modelos do ARM.
etiquetas No Etiquetas associadas ao recurso. Aplique etiquetas para organizar logicamente recursos na sua subscrição.
identidade No Alguns recursos suportam identidades geridas para recursos do Azure. Esses recursos têm um objeto de identidade no nível de raiz da declaração de recursos. Pode definir se a identidade é atribuída pelo utilizador ou pelo sistema. Para identidades atribuídas pelo utilizador, forneça uma lista de IDs de recursos para as identidades. Defina a chave para o ID do recurso e o valor para um objeto vazio. Para obter mais informações, veja Configurar identidades geridas para recursos do Azure numa VM do Azure com modelos.
sku No Alguns recursos permitem valores que definem o SKU a implementar. Por exemplo, pode especificar o tipo de redundância para uma conta de armazenamento.
tipo No Alguns recursos permitem um valor que define o tipo de recurso que implementa. Por exemplo, pode especificar o tipo de instância do Azure Cosmos DB a criar.
scope No A propriedade de âmbito só está disponível para tipos de recursos de extensão. Utilize-o ao especificar um âmbito diferente do âmbito de implementação. Veja Definir o âmbito dos recursos de extensão nos modelos do ARM.
Cópia No Se for necessária mais do que uma instância, o número de recursos a criar. O modo predefinido é paralelo. Especifique o modo de série quando não quiser que todos ou os recursos sejam implementados ao mesmo tempo. Para obter mais informações, veja Criar várias instâncias de recursos no Azure Resource Manager.
plano No Alguns recursos permitem valores que definem o plano a implementar. Por exemplo, pode especificar a imagem do marketplace para uma máquina virtual.
propriedades No Definições de configuração específicas do recurso. Os valores das propriedades são os mesmos que os valores fornecidos no corpo do pedido para a operação da API REST (método PUT) para criar o recurso. Também pode especificar uma matriz de cópia para criar várias instâncias de uma propriedade. Para determinar os valores disponíveis, veja referência de modelo.
resources No Recursos subordinados que dependem do recurso que está a ser definido. Forneça apenas tipos de recursos permitidos pelo esquema do recurso principal. A dependência do recurso principal não está implícita. Tem de definir explicitamente essa dependência. Veja Definir nome e tipo para recursos subordinados.

Para suportar o 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 obter mais informações, veja Recursos.

No Bicep, veja recursos.

Saídas

outputs Na secção, especifique os valores que são devolvidos da implementação. Normalmente, devolve valores de recursos que foram implementados. Está limitado a 64 saídas num modelo.

O exemplo seguinte 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 Necessário Descrição
output-name Yes Nome do valor de saída. Tem de ser um identificador JavaScript válido.
condição No Valor booleano que indica se este valor de saída é devolvido. Quando true, o valor é incluído na saída da implementação. Quando false, o valor de saída é ignorado para esta implementação. Quando não for especificado, o valor predefinido é true.
tipo Yes Tipo do valor de saída. Os valores de saída suportam os mesmos tipos que os parâmetros de entrada de modelo. Se especificar securestring para o tipo de saída, o valor não é apresentado no histórico de implementações e não pode ser obtido a partir de outro modelo. Para utilizar um valor secreto em mais do que um modelo, armazene o segredo num Key Vault e referencie o segredo no ficheiro de parâmetros. Para obter mais informações, veja Utilizar o Azure Key Vault para transmitir o valor do parâmetro seguro durante a implementação.
valor No Expressão de linguagem de modelo que é avaliada e devolvida como valor de saída. Especifique o valor ou a cópia.
Cópia No Utilizado para devolver mais do que um valor para uma saída. Especifique o valor ou a cópia. Para obter mais informações, veja Iteração de saída em modelos arm.

Para obter exemplos de como utilizar saídas, veja Outputs in ARM template (Saídas no modelo do ARM).

No Bicep, veja saídas.

Comentários e metadados

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

Comentários

Para comentários inline, pode utilizar ou ///* ... */. No Visual Studio Code, guarde os ficheiros de parâmetros com comentários como o JSON com o tipo de ficheiro de comentários (JSONC ), caso contrário, recebe uma mensagem de erro a indicar "Comentários não permitidos no JSON".

Nota

Ao utilizar a CLI do Azure para implementar modelos com comentários, utilize a versão 2.3.0 ou posterior e especifique o --handle-extended-json-format comutador.

{
  "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 detetar automaticamente um modelo do ARM e alterar o modo de idioma. Se vir o Modelo Resource Manager do Azure no canto inferior direito do Visual Studio Code, pode utilizar os comentários inline. Os comentários inline já não são marcados como inválidos.

Captura de ecrã a mostrar o Visual Studio Code no modo de modelo Resource Manager do Azure.

No Bicep, veja comentários.

Metadados

Pode adicionar um metadata objeto em praticamente qualquer lugar no seu modelo. Resource Manager ignora o objeto, mas o editor JSON pode avisá-lo de que a propriedade não é válida. No objeto, defina as propriedades de que precisa.

{
  "$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 metadata objeto com uma description propriedade.

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

Ao implementar o modelo através do portal, o texto fornecido na descrição é automaticamente utilizado como uma sugestão para esse parâmetro.

Captura de ecrã a mostrar a sugestão do parâmetro no portal do Azure.

Para resources, adicione um comments elemento ou um metadata objeto. O exemplo seguinte mostra um comments elemento e um metadata objeto.

"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 metadata objeto ao valor de saída.

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

Não pode adicionar um metadata objeto a funções definidas pelo utilizador.

Cadeias de várias linhas

Pode dividir uma cadeia em múltiplas linhas. Por exemplo, veja a location propriedade e um dos comentários no exemplo JSON seguinte.

Nota

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

As cadeias de várias linhas não são suportadas quando implementa o modelo através 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, veja cadeias de várias linhas.

languageVersion 2.0

Nota

A utilização de qualquer languageVersion que termine em -experimental não é recomendada em ambientes de produção porque a funcionalidade experimental pode ser alterada em qualquer altura.

Nota

A versão atual da extensão do Azure Resource Manager Tools para Visual Studio Code não reconhece os melhoramentos efetuados no languageVersion 2.0.

Para utilizar 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>": {
      ...
    }
  }
}

As melhorias e alterações fornecidas com languageVersion 2.0:

Passos seguintes