Explorar a estrutura do modelo do Azure Resource Manager

Concluído

Nessa unidade, você aprenderá a usar modelos do Azure Resource Manager (ARM) para implementar a infraestrutura como código. Você irá pesquisar as seções de um modelo do ARM, aprender como implantá-lo no Azure e se aprofundar nos detalhes na seção 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 descreve que tipo de recursos teremos sem descrever seu 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 for possível, os recursos também serão criados em paralelo, de modo que as implantações do modelo do ARM serão concluídas mais rápido do que as implantações com script.

Diagram showing a mapping of the template processing procedure. There's only one call to process a template as opposed to several calls to process 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. Esses valores podem ser fornecidos por 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 que serão 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ê precisará 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ê precisará do provedor de recursos Microsoft.Storage. Um dos tipos para esse provedor é storageAccount. Portanto, o tipo de recurso será 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. Exiba a lista na coluna à esquerda para localizar o recurso. Observe que as propriedades são classificadas por versão da API.

Screenshot of a Microsoft documentation page showing the storage account documentation selected.

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

Screenshot of a Microsoft documentation page showing some of the storage account properties.

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": {}
}