Declaração de recursos em modelos do ARM

Para implantar um recurso por meio de um modelo do Azure Resource Manager (modelo do ARM), adicione uma declaração de recurso. Use a matriz resources em um modelo JSON.

languageVersion 2.0 faz uma lista de aprimoramentos para modelos JSON do ARM, como alterar a declaração de recursos de uma matriz para um objeto. A maioria dos exemplos mostrados neste artigo ainda usa resources array. Para informações específicas do languageVersion 2.0, confira Usar nome simbólico.

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.

Dica

Recomendamos o Bicep porque ele oferece as mesmas funcionalidades que os modelos do ARM e a sintaxe é mais fácil de usar. Para saber mais, confira declaração de recursos.

Você está limitado a 800 recursos em um modelo. Para obter mais informações, confira Limites de modelo.

Definir versão e tipo de recurso

Ao adicionar um recurso ao modelo, comece definindo o tipo de recurso e a versão da API. Esses valores determinam as outras propriedades disponíveis para o recurso.

O exemplo seguinte mostra como definir o tipo de recurso e a versão de API para uma conta de armazenamento. O exemplo não mostra a declaração completa de recurso.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    ...
  }
]

Definir nome do recurso

Cada recurso tem um nome. Ao definir o nome do recurso, preste atenção às regras e restrições para nomes de recursos.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    ...
  }
]

Definir local

Muitos recursos exigem um local. Você pode determinar se o recurso precisa de um local por meio do intellisense ou da referência de modelo. O exemplo a seguir adiciona um parâmetro location que é usado para a conta de armazenamento.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    ...
  }
]

Para obter mais informações, veja Definir local do recurso no modelo do ARM.

Editar marcas

Você pode aplicar marcas a um recurso durante a implantação. As marcas ajudam você a organizar logicamente seus recursos implantados. Para ver exemplos das diferentes maneiras de especificar as marcas, veja Marcas do Modelo do ARM.

Definir propriedades específicas do recurso

As propriedades anteriores são genéricas para a maior parte dos tipos de recursos. Depois de definir esses valores, defina as propriedades específicas para o tipo de recurso que você está implantando.

Use o intelliSense ou a referência do modelo para determinar quais propriedades estão disponíveis e quais são obrigatórias. O exemplo a seguir define as propriedades restantes para uma conta de armazenamento.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

Usar o nome simbólico

No Bicep, cada definição de recurso tem um nome simbólico. O nome simbólico é usado para fazer referência ao recurso de outras partes do arquivo Bicep. Para dar suporte ao nome simbólico em modelos JSON do ARM, adicione languageVersion com a versão 2.0 e altere a definição de recurso de uma matriz para um objeto. Quando languageVersion é especificado para um modelo, o nome simbólico deve ser especificado para recursos de nível raiz. Por exemplo:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  ]
}

O JSON anterior pode ser gravado no seguinte JSON:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "aks": {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  }
}

Os nomes simbólicos diferenciam maiúsculas de minúsculas. Os caracteres permitidos para nomes simbólicos são letras, números e _. Os nomes simbólicos devem ser exclusivos em um modelo, mas podem se sobrepor a nomes de variáveis, nomes de parâmetros e nomes de saída em um modelo. No exemplo a seguir, o nome simbólico do recurso de conta de armazenamento tem o mesmo nome da saída.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('storage{0}', uniqueString(resourceGroup().id))]"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "myStorage": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  },
  "outputs": {
    "myStorage":{
      "type": "object",
      "value": "[reference('myStorage')]"
    }
  }
}

A função referência pode usar o nome simbólico de um recurso, conforme mostrado no exemplo anterior. A função de referência não pode mais usar o nome de um recurso, por exemplo, reference(parameters('storageAccountName')) não é permitido.

Se o recurso Implantações for usado em uma implantação de nome simbólico, use apiVersion 2020-09-01 ou posterior.

Declarar recursos existentes

Com languageVersion 2.0 e usando o nome simbólico para a declaração de recurso, você pode declarar recursos existentes. Uma propriedade de recurso de nível superior de causas "existing": true faz com que o ARM leia em vez de implantar um recurso, conforme mostrado no exemplo a seguir:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "languageVersion": "2.0",

  "resources": {
    "storageAccount": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "storageacct",
      "existing": true
    }
  },
  "outputs": {
    "saBlocksPlaintext": {
      "type": "bool",
      "value": "[ reference('storageAccount').supportsHttpsTrafficOnly]"
    }
  }
}

Os recursos existentes não precisam definir nenhuma propriedade diferente de type, apiVersion e name.

Próximas etapas