Explorar a estrutura do modelo do Azure Resource Manager

Concluído

Nesta unidade, você aprenderá a usar modelos do ARM (modelos do Azure Resource Manager) para implementar a infraestrutura como código. Pesquise as seções de um modelo do ARM, aprenda como implantá-lo no Azure e se aprofunde nos detalhes na seção de recursos do modelo do ARM.

O que é a infraestrutura como código?

A infraestrutura como código permite que você descreva, por meio de código, a infraestrutura de que você precisa para seu aplicativo.

Com a infraestrutura como código, você pode manter o código do aplicativo e tudo de que precisa para implantar seu aplicativo em um repositório de código central. As vantagens da infraestrutura como código são:

  • Configurações consistentes
  • Escalabilidade aprimorada
  • Implantações mais rápidas
  • Melhor capacidade de rastreamento

Esse vídeo explica a infraestrutura como código:

O que é um modelo do ARM?

Os modelos de ARM são arquivos JSON (JavaScript Object Notation) que definem a infraestrutura e a configuração de sua implantação. O modelo usa uma sintaxe declarativa. A sintaxe declarativa é uma forma de criar a estrutura e os elementos que descrevem a aparência dos recursos sem descrever o fluxo de controle. A sintaxe declarativa é diferente da sintaxe imperativa, que usa comandos para o computador executar. Os scripts imperativos se concentram na especificação de cada etapa na implantação dos recursos.

Os modelos do ARM permitem declarar o que você pretende implantar sem a necessidade de escrever a sequência de comandos de programação para criá-lo. Especifique os recursos e as propriedades deles em um modelo do ARM. A seguir, o Azure Resource Manager usará essas informações para implantar os recursos de uma maneira organizada e consistente.

Benefícios de usar modelos do ARM

Os modelos do ARM permitem automatizar implantações e usar a prática de IaC (infraestrutura como código). O código do modelo se torna parte de sua infraestrutura e de seus projetos de desenvolvimento. Assim como o código do aplicativo, você pode armazenar os arquivos IaC em um repositório de origem e controlar a versão dele.

Os modelos do ARM são idempotentes, o que significa que você pode implantar o mesmo modelo muitas vezes e obter os mesmos tipos de recursos no mesmo estado.

O Resource Manager orquestra a implantação dos recursos para que sejam criados na ordem correta. Quando possível, os recursos são criados em paralelo, para que as implantações de modelo do ARM sejam concluídas mais rapidamente do que as implantações com script.

Diagrama mostrando um mapeamento do procedimento que está processando o modelo. Há somente uma chamada para processar um modelo, em vez de várias chamadas para processar scripts.

O Resource Manager também tem validação interna. Ele verifica o modelo antes de iniciar a implantação para garantir que ela seja bem-sucedida.

Caso as implantações se tornem mais complexas, será possível dividir seus modelos do ARM em componentes menores e reutilizáveis. É possível vincular esses modelos menores no momento da implantação. Também é possível aninhar modelos dentro de outros modelos.

No portal do Azure é possível examinar o histórico da implantação e obter informações sobre o estado dela. O portal exibe valores para todos os parâmetros e todas as saídas.

Você também pode integrar seus modelos do ARM a ferramentas de CI/CD (integração contínua e implantação contínua) como Azure Pipelines, o que pode automatizar seus pipelines de lançamento para atualizações rápidas e confiáveis de aplicativos e de infraestrutura. Ao usar as tarefas do Azure DevOps e do modelo do ARM, você pode criar e implantar seus projetos continuamente.

Estrutura de arquivos do modelo do ARM

Ao escrever um modelo do ARM, você precisa entender todas as partes que compõem o modelo e o que fazem. Os arquivos de modelo do ARM são compostos pelos seguintes elementos:

Elemento Descrição
schema uma seção obrigatória que define a localização do arquivo de esquema JSON que descreve a estrutura de dados JSON. O número de versão usada depende do escopo da implantação e do editor de JSON.
contentVersion uma seção obrigatória que define a versão do modelo (como 1.0.0.0). É possível usar esse valor para documentar alterações significativas no modelo a fim de garantir a implantação do modelo correto.
apiProfile seção opcional que define uma coleção de versões de API para tipos de recursos. É possível usar esse valor para evitar a especificação de versões de API para cada recurso no modelo.
parameters uma seção opcional em que você define valores que são fornecidos durante a implantação. Você pode fornecer esses valores em um arquivo de parâmetro, por parâmetros de linha de comando ou no portal do Azure.
variáveis uma seção opcional em que você define os valores que são usados para simplificar as expressões de linguagem do modelo.
funções uma seção opcional em que é possível definir as funções definidas pelo usuário disponíveis no modelo. As funções definidas pelo usuário podem simplificar o modelo quando expressões complicadas forem usadas repetidamente nele.
recursos uma seção obrigatória que define os itens reais que você deseja implantar ou atualizar em um grupo de recursos ou em uma assinatura.
output Uma seção opcional em que você especifica os valores retornados no final da implantação.

Implantar um modelo do ARM no Azure

É possível implantar um modelo do ARM no Azure usando uma das seguintes maneiras:

  • Implantar um modelo local
  • Implantar um modelo vinculado
  • Implantar em um pipeline de implantação contínua

O foco deste módulo é a implantação de um modelo do ARM local. Nos próximos módulos do Learn, você aprenderá a implantar uma infraestrutura mais complicada e de que modo integrar com o Azure Pipelines.

Para implantar um modelo local, será necessário ter a CLI do Azure ou o Azure PowerShell instalado localmente.

Primeiro, entre no Azure usando a CLI do Azure ou o Azure PowerShell.

az login

Então defina o grupo de recursos. É possível criar um grupo de recursos ou usar um que já esteja definido com o comando a seguir. Você pode obter valores de localização disponíveis de: az account list-locations (CLI) ou Get-AzLocation (PowerShell). Você pode configurar o local padrão usando az configure --defaults location=<location>.

az group create \
  --name {name of your resource group} \
  --location "{location}"

Para iniciar uma implantação de modelo no grupo de recursos, use o comando da CLI do Azure az deployment group create ou o comando do Azure PowerShell new-AzResourceGroupDeployment.

Dica

A diferença entre az deployment group create e az group deployment create é que az group deployment create é um comando antigo que será preterido e substituído por az deployment group create. Portanto, recomendamos usar az deployment group create para implantar recursos dentro do escopo do grupo de recursos.

Ambos os comandos exigem o grupo de recursos, a região e o nome da implantação para que você possa identificá-lo facilmente no histórico de implantação. Para maior conveniência, o exercício cria uma variável que armazena o caminho para o arquivo de modelo. Essa variável facilita a execução dos comandos de implantação porque você não precisa digitar novamente o caminho a cada vez que implantar. Veja um exemplo:

Para executar esse comando de implantação, você precisa ter a versão mais recente da CLI do Azure.

templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile

Use modelos vinculados para implantar soluções complexas. É possível dividir um modelo em vários outros e implantá-los por meio de um modelo principal. Quando você implanta o modelo principal, ele dispara a implantação do modelo vinculado. É possível armazenar e proteger o modelo vinculado usando um token SAS.

Um pipeline de CI/CD automatiza a criação e a implantação de projetos de desenvolvimento, inclusive projetos de modelo do ARM. Os pipelines mais comuns usados para a implantação de modelo são o Azure Pipelines ou o GitHub Actions.

Mais informações sobre esses dois tipos de implantação serão abordadas em outros módulos.

Adicionar recursos ao modelo

Para adicionar um recurso ao modelo, você precisa saber qual é o provedor de recursos e seus tipos de recursos. A sintaxe dessa combinação está na forma {resource-provider}/{resource-type}. Por exemplo, para adicionar um recurso de conta de armazenamento ao seu modelo, você precisa do provedor de recursos Microsoft.Storage. Um dos tipos para esse provedor é storageAccount. Portanto, o tipo de recurso é exibido como Microsoft.Storage/storageAccounts. Você pode usar uma lista de provedores de recursos para serviços do Azure para encontrar os provedores necessários.

Depois de definir o provedor e o tipo de recurso, será necessário entender as propriedades de cada tipo de recurso que deseja usar. Para obter detalhes, confira Definir recursos em modelos do Azure Resource Manager. Para localizar o recurso, exiba a lista na coluna à esquerda. Observe que as propriedades são classificadas por versão da API.

Captura de tela da página de documentação da Microsoft mostrando a documentação da conta de armazenamento selecionada.

Veja um exemplo de algumas das propriedades listadas na página Contas de Armazenamento:

Captura de tela da página de documentação da Microsoft mostrando algumas das propriedades da conta de armazenamento.

Para nosso exemplo de armazenamento, seu modelo pode ter a seguinte aparência:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-05-01",
      "name": "learntemplatestorage123",
      "location": "westus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {}
}