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 | Não | 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 | Não | Esquemas usados para validar valores de matriz e objeto. As definições só têm suporte em 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 | Sim | Nome da definição de tipo. Deve ser um identificador JavaScript válido. |
tipo | Sim | 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 | Não | Matriz de valores permitidos para a definição de tipo para garantir que o valor correto seja fornecido. |
minValue | Não | O valor mínimo para definições de tipo int, esse valor é inclusivo. |
maxValue | Não | O valor máximo para definições de tipo int, esse valor é inclusivo. |
minLength | Não | O tamanho mínimo para definições de tipo de matriz, cadeia de caracteres segura e cadeia de caracteres, esse valor é inclusivo. |
maxLength | Não | O tamanho máximo para definições de tipo de matriz, cadeia de caracteres segura e cadeia de caracteres, esse valor é inclusivo. |
prefixItems | Não | 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 | Não | 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 . |
discriminator | Não | O esquema a ser aplicado com base em uma propriedade discriminatória. |
nullable | Não | Um booliano que indica que o valor pode ser nulo ou omitido. |
descrição | Não | 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 |
---|---|---|
parameter-name | 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 | 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 . items só tem suporte no languageVersion 2.0. |
properties | Não | O esquema para validar o objeto. properties só tem suporte no languageVersion 2.0. |
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 . additionalProperties só tem suporte no languageVersion 2.0. |
discriminator | Não | O esquema a ser aplicado com base em uma propriedade discriminatória. discriminator só tem suporte no languageVersion 2.0. |
nullable | 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 parameters dentro de uma função definida pelo usuário, fica 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 | Não | 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.
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.
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 valorouter
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.
O uso de qualquer um dos seguintes recursos do Bicep habilita automaticamente a geração de código da versão 2.0 da linguagem:
- tipos definidos pelo usuário
- funções definidas pelo usuário
- importações no momento da compilação
- recursos experimentais
Próximas etapas
- Para exibir modelos completos para muitos tipos diferentes de soluções, consulte os Modelos de Início Rápido do Azure.
- Para obter detalhes sobre as funções que podem ser usadas em um modelo, consulte Funções de modelo do ARM .
- Para combinar vários modelos durante a implantação, confira usando modelos vinculados e aninhados ao implantar recursos do Azure.
- Para obter recomendações sobre a criação de modelos, consultepráticas recomendadas para modelos ARM.
- Para obter respostas a perguntas comuns, consulte perguntas frequentes sobre modelos do ARM.