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 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 o orienta pelo processo de criação de um modelo, consulte Tutorial: Criar e implantar seu primeiro modelo ARM. Para saber mais sobre modelos ARM por meio de um conjunto guiado de módulos do Learn, consulte Implantar e gerenciar recursos no Azure usando modelos ARM.

Gorjeta

Bicep é uma nova linguagem que oferece os mesmos recursos que os modelos ARM, mas com uma sintaxe mais fácil de usar. Se você está considerando a infraestrutura como opções de código, recomendamos que você consulte o Bicep.

Para saber mais sobre os elementos de um arquivo Bicep, consulte Compreender a estrutura e a sintaxe dos 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 Necessário Description
$schema Sim Local do arquivo 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 você estiver usando o Visual Studio Code com a extensão de ferramentas do 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 o 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 gerenciamento, 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 Não Versão linguística do modelo. Para exibir os aprimoramentos do languageVersion 2.0, consulte languageVersion 2.0.
contentVersion Sim 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 usando o modelo, esse valor pode ser usado para garantir que o modelo correto esteja sendo usado.
apiProfile Não Uma versão da API que serve como uma coleção de versões da API para tipos de recursos. Use esse valor para evitar ter que especificar 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 da API para esse tipo de recurso definido no perfil.

A propriedade de perfil da API é especialmente útil ao implantar um modelo em ambientes diferentes, como o Azure Stack e o Azure global. Use a versão do perfil da API para garantir que seu modelo use automaticamente as 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, consulte Perfil da API.

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

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

Definições

definitions Na seção do modelo, especifique os esquemas usados para validar valores de matriz e objeto. Definitions só pode ser usado 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 Description
nome-definição Sim Nome da definição de tipo. tem de ser um identificador JavaScript válido.
tipo Sim Tipo da definição de tipo. Os tipos e valores permitidos são string, securestring, int, bool, object, secureObject e array. Consulte Tipos de dados em modelos ARM.
allowedValues Não Matriz de valores permitidos para a definição de tipo para garantir que o valor correto seja fornecido.
minValor Não O valor mínimo para definições de tipo int, esse valor é inclusivo.
maxValor Não O valor máximo para definições de tipo int, esse valor é inclusivo.
minComprimento Não O comprimento mínimo para definições de cadeia de caracteres, cadeia de caracteres segura e tipo de matriz, esse valor é inclusivo.
maxComprimento Não O comprimento máximo para definições de cadeia de caracteres, cadeia de caracteres segura e tipo de matriz, esse valor é inclusivo.
prefixItems Não O esquema para validar o elemento de uma matriz no mesmo índice.
itens Não 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 Não O esquema para validar o objeto.
additionalProperties Não O esquema que é 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 Não O esquema a ser aplicado com base em uma propriedade discriminadora.
anulável Não Um booleano indicando que o valor pode ser nulo ou omitido.
descrição Não Descrição da definição de tipo que é exibida aos usuários através do portal. Para obter mais informações, consulte Comentários em modelos.

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

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

Parâmetros

parameters Na seção do modelo, você especifica quais valores pode ser inserido ao implantar os recursos. Você está limitado a 256 parâmetros em um modelo. Você pode reduzir o número de parâmetros usando 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 Description
nome-parâmetro Sim Nome do parâmetro. tem de ser um identificador JavaScript válido.
tipo Sim Tipo do valor do parâmetro. Os tipos e valores permitidos são string, securestring, int, bool, object, secureObject e array. Consulte Tipos de dados em modelos ARM.
defaultValue Não Valor padrão para o parâmetro, se nenhum valor for fornecido para o parâmetro.
allowedValues Não Matriz de valores permitidos para o parâmetro para garantir que o valor correto seja fornecido.
minValor Não O valor mínimo para parâmetros de tipo int, esse valor é inclusivo.
maxValor Não O valor máximo para parâmetros de tipo int, esse valor é inclusivo.
minComprimento Não O comprimento mínimo para parâmetros de cadeia de caracteres, cadeia de caracteres segura e tipo de matriz, esse valor é inclusivo.
maxComprimento Não O comprimento máximo para parâmetros de cadeia de caracteres, cadeia de caracteres segura e tipo de matriz, esse valor é inclusivo.
prefixItems Não A definição de tipo para validar o elemento de uma matriz no mesmo índice. prefixItems só é suportado no languageVersion 2.0.
itens Não 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 no languageVersion 2.0.
propriedades Não O esquema para validar o objeto. properties só é suportado no languageVersion 2.0.
additionalProperties Não O esquema que é 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 no languageVersion 2.0.
discriminador Não O esquema a ser aplicado com base em uma propriedade discriminadora. discriminator só é suportado no languageVersion 2.0.
anulável Não Um booleano indicando que o valor pode ser nulo ou omitido. nullable só é suportado no languageVersion 2.0.
descrição Não Descrição do parâmetro que é exibido aos usuários através do portal. Para obter mais informações, consulte Comentários em modelos.

Para obter exemplos de como usar parâmetros, consulte Parâmetros em modelos ARM.

No Bicep, consulte parâmetros.

Variáveis

Na seção , você constrói valores que podem ser usados em todo o variables modelo. Você não precisa definir variáveis, mas elas geralmente 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 copy para criar vários valores para uma variável, consulte Iteração de variáveis.

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

No Bicep, consulte variáveis.

Funções

Dentro do 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 expressões complicadas que não deseja repetir em todo o modelo. Você cria as funções definidas pelo usuário a partir de expressões e funções suportadas em modelos.

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

  • A função não pode acessar variáveis.
  • A função só pode usar parâmetros que são definidos na função. Quando você usa a função de parâmetros dentro de uma função definida pelo usuário, você está restrito aos parâmetros para essa 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 Necessário Description
espaço de nomes Sim Namespace para as funções personalizadas. Use para evitar conflitos de nomenclatura com funções de modelo.
nome-função Sim Nome da função personalizada. Ao chamar a função, combine o nome da função com o namespace. Por exemplo, para chamar uma função nomeada uniqueName no namespace contoso, use "[contoso.uniqueName()]".
nome-parâmetro Não Nome do parâmetro a ser usado dentro da função personalizada.
valor-parâmetro Não Tipo do valor do parâmetro. Os tipos e valores permitidos são string, securestring, int, bool, object, secureObject e array.
tipo de saída Sim Tipo do valor de saída. Os valores de saída suportam os mesmos tipos que os parâmetros de entrada de função.
valor de saída Sim Expressão de linguagem de 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, as funções definidas pelo usuário não são suportadas. Bicep suporta várias funções e operadores.

Recursos

resources Na seção , 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 Necessário Description
condição Não Valor booleano que indica se o recurso é provisionado durante essa implantação. Quando trueo , o recurso é criado durante a implantação. Quando falseo , o recurso é ignorado para esta implantação. Ver condição.
tipo Sim Tipo de recurso. Esse valor é uma combinação do namespace do provedor de recursos e do tipo de recurso (como Microsoft.Storage/storageAccounts). Para determinar os valores disponíveis, consulte Referência do modelo. Para um recurso filho, o formato do tipo depende se ele está aninhado dentro do recurso pai ou definido fora do recurso pai. Consulte Definir nome e tipo para recursos filho.
apiVersion Sim Versão da API REST a ser usada para criar o recurso. Ao criar um novo modelo, defina esse valor como a versão mais recente do recurso que você está implantando. Enquanto o modelo funcionar conforme necessário, continue usando a mesma versão da API. Ao continuar a usar a mesma versão da API, você minimiza o risco de uma nova versão da API alterar o funcionamento do modelo. Considere atualizar a versão da API somente quando quiser usar um novo recurso introduzido em uma versão posterior. Para determinar os valores disponíveis, consulte Referência do modelo.
nome Sim Nome do recurso. O nome deve seguir as restrições do componente URI definidas no RFC3986. Os serviços do Azure que expõem o nome do recurso a terceiros validam o nome para garantir que não seja 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. Consulte Definir nome e tipo para recursos filho.
comentários Não Suas anotações para documentar os recursos em seu modelo. Para obter mais informações, consulte Comentários em modelos.
localização Varia Geo-localizações suportadas do recurso fornecido. Você pode selecionar qualquer um dos locais disponíveis, mas normalmente faz sentido escolher um que esteja perto de seus usuários. Normalmente, também faz sentido colocar recursos que interagem uns com os outros na mesma região. A maioria dos tipos de recursos requer um local, mas alguns tipos (como uma atribuição de função) não exigem um local. Consulte Definir local do recurso.
dependsOn Não Recursos que devem ser implantados antes que esse recurso seja implantado. O Resource Manager avalia as dependências entre recursos e as 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. Liste apenas os recursos implantados neste modelo. Os recursos que não estão definidos neste modelo já devem existir. Evite adicionar dependências desnecessárias, pois elas podem retardar 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.
etiquetas Não Tags associadas ao recurso. Aplique tags para organizar logicamente os recursos em toda a sua assinatura.
de identidade Não Alguns recursos dão suporte a identidades gerenciadas para recursos do Azure. Esses recursos têm um objeto de identidade no nível raiz da declaração de recurso. Você pode definir se a identidade é atribuída pelo usuário ou pelo sistema. Para identidades atribuídas pelo usuário, 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, consulte Configurar identidades gerenciadas para recursos do Azure em uma VM do Azure usando modelos.
sku Não Alguns recursos permitem a implantação de valores que definem a SKU. Por exemplo, você pode especificar o tipo de redundância para uma conta de armazenamento.
variante Não Alguns recursos permitem um valor que define o tipo de recurso que você implanta. Por exemplo, você pode especificar o tipo de instância do Azure Cosmos DB a ser criada.
âmbito Não 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.
Cópia Não Se mais de uma instância for necessária, o número de recursos a serem criados. O modo padrão é paralelo. Especifique o modo serial quando não quiser que todos ou os recursos sejam implantados ao mesmo tempo. Para obter mais informações, consulte Criar várias instâncias de recursos no Azure Resource Manager.
plano Não Alguns recursos permitem valores que definem o plano de implantação. Por exemplo, você pode especificar a imagem do mercado para uma máquina virtual.
propriedades Não Definições de configuração específicas do recurso. Os valores para as propriedades são os mesmos que os valores fornecidos no corpo da solicitação para a operação da API REST (método PUT) para criar o recurso. Você também pode especificar uma matriz de cópia para criar várias instâncias de uma propriedade. Para determinar os valores disponíveis, consulte Referência do modelo.
recursos Não Recursos filho que dependem do recurso que está sendo definido. Forneça apenas os tipos de recursos permitidos pelo esquema do recurso pai. A dependência do recurso pai não está implícita. Você deve definir explicitamente essa dependência. Consulte Definir nome e tipo para recursos filho.

Para dar suporte ao nome simbólico do Bicep em modelos JSON 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, consulte Recursos.

No Bicep, consulte recursos.

Saídas

Na seção , você especifica os outputs 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 Necessário Description
nome da saída Sim Nome do valor de saída. tem de ser um identificador JavaScript válido.
condição Não Valor booleano 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 Sim Tipo do valor de saída. Os valores de saída suportam os 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 Cofre de Chaves e faça referência ao segredo no arquivo de parâmetros. Para obter mais informações, consulte Usar o Azure Key Vault para passar o valor do parâmetro seguro durante a implantação.
valor Não Expressão de linguagem de modelo que é avaliada e retornada como valor de saída. Especifique o valor ou a cópia.
Cópia Não Usado para retornar mais de um valor para uma saída. Especifique o valor ou a cópia. Para obter mais informações, consulte Iteração de saída em modelos ARM.

Para obter exemplos de como usar saídas, consulte Saídas no modelo 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 embutidos, você pode usar um // 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ê receberá uma mensagem de erro dizendo "Comentários não permitidos em JSON".

Nota

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

{
  "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 ARM e alterar o modo de idioma. Se você vir Modelo do Azure Resource Manager no canto inferior direito do Visual Studio Code, poderá usar os comentários embutidos. Os comentários embutidos não são mais marcados como inválidos.

Captura de ecrã do Código do Visual Studio no modo de modelo do Azure Resource Manager.

No Bicep, ver comentários.

Metadados

Você pode adicionar um metadata objeto em praticamente qualquer lugar em seu modelo. O Gerenciador de Recursos ignora o objeto, mas o editor JSON pode avisá-lo 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 metadata objeto com uma description propriedade.

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

Ao implantar o modelo através do portal, o texto fornecido 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 comments elemento ou um metadata objeto. O exemplo a seguir 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 é possível adicionar um metadata objeto a funções definidas pelo usuário.

Strings de várias linhas

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

Nota

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

Não há suporte para cadeias de caracteres de várias linhas quando você implanta 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, consulte cadeias de caracteres de várias linhas.

languageVersão 2.0

Nota

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

Nota

A versão atual da extensão Azure Resource Manager Tools 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 que vêm com languageVersion 2.0:

  • Use o nome simbólico no modelo JSON ARM. Para obter mais informações, consulte Usar nome simbólico.
  • Use o nome simbólico em loops de cópia de recursos. Consulte Usar nome simbólico.
  • Use o nome simbólico em dependsOn matrizes. Consulte DependsOn e Depend on resources in a loop.
  • Use o nome simbólico em vez do nome do recurso na reference função. Veja a referência.
  • Uma função references() que retorna uma matriz de objetos que representam os estados de tempo de execução de uma coleção de recursos. Ver 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.
  • Crie tipos definidos pelo usuário. Consulte Definição de tipo.
  • Restrições adicionais de validação de tipo agregado a serem usadas em parâmetros e saídas.
  • O valor padrão para a expressionEvaluationOptions propriedade é inner. O valor outer está bloqueado. Consulte Escopo de avaliação de expressão em modelos aninhados.
  • A deployment função retorna um subconjunto limitado de propriedades. Consulte a implantação.
  • Se o recurso Deployments 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 Personagens de fuga.

O uso de qualquer um dos seguintes recursos do Bicep habilita automaticamente a geração de código da versão 2.0 do idioma:

Próximos passos