Declaração de recursos em modelos ARM

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

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

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.

Gorjeta

Recomendamos o Bicep porque ele oferece os mesmos recursos que os modelos ARM e a sintaxe é mais fácil de usar. Para saber mais, consulte Declaração de recursos.

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

Definir o tipo e a versão do recurso

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

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

"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 localização

Muitos recursos requerem uma localização. 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, consulte Definir local do recurso no modelo ARM.

Definir tags

Você pode aplicar tags a um recurso durante a implantação. As tags ajudam você a organizar logicamente os recursos implantados. Para obter exemplos das diferentes maneiras de especificar as tags, consulte Tags de modelo ARM.

Definir propriedades específicas do recurso

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

Use intellisense ou referência de modelo para determinar quais propriedades estão disponíveis e quais são necessárias. O exemplo a seguir define as propriedades restantes de 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 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 das outras partes do arquivo Bicep. Para dar suporte ao nome simbólico em modelos JSON ARM, adicione languageVersion com a versão 2.0e 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 escrito 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 que a 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 de referência pode usar o nome simbólico de um recurso, como 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 é permitida.

Se o recurso Deployments 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 recursos, você pode declarar recursos existentes. Uma propriedade de recurso de nível superior faz com que o ARM leia em vez de "existing": true 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 além de type, apiVersione name.

Próximos passos