Compartilhar via


Infraestrutura como código

A IaC (Infraestrutura como Código) é uma prática importante do DevOps que envolve o gerenciamento de infraestrutura, como redes, serviços de computação, bancos de dados, armazenamentos e topologia de conexão, em um modelo descritivo. A IaC permite que as equipes desenvolvam e liberem alterações mais rapidamente e com maior confiança. Os benefícios da IaC incluem:

  • Maior confiança nas implantações
  • Capacidade de gerenciar vários ambientes
  • Melhor compreensão do estado da infraestrutura

Para obter mais informações sobre os benefícios de usar a Infraestrutura como Código, confira Infraestrutura repetível.

Ferramentas

Existem duas abordagens que você pode adotar ao implementar a Infraestrutura como Código.

  • A Infraestrutura Imperativa como Código envolve a gravação de scripts em linguagens como o Bash ou o PowerShell. Você declara explicitamente os comandos executados para produzir um resultado desejado. Ao usar implantações imperativas, cabe a você gerenciar a sequência de dependências, controle de erros e atualizações de recursos.
  • A Infraestrutura Declarativa como Código envolve a gravação de uma definição da aparência desejada do ambiente. Nesta definição, você especifica um resultado desejado, em vez de como deseja que ele seja alcançado. As ferramentas descobrem como fazer o resultado acontecer inspecionando o estado atual, comparando-o ao estado de destino e aplicando as diferenças.

Modelos do ARM

Examine as informações sobre modelos de Resource Manager do Azure (modelos do ARM).

Bicep

O Bicep é um DSL (linguagem específica de domínio) que usa sintaxe declarativa para implantar recursos do Azure. Nos arquivos Bicep, você define a infraestrutura que pretende implantar e as respectivas propriedades. Em comparação aos modelos do ARM, os arquivos Bicep são mais fáceis de ler e gravar para um público não desenvolvedor, pois usam uma sintaxe concisa.

param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Terraform

Examine as informações sobre o Terraform.

CLI do Azure

Examine as informações sobre a CLI do Azure.

Módulos de Infraestrutura como Código

Uma das metas de uso do código para implantar a infraestrutura é evitar a duplicação de trabalho ou a criação de vários modelos para finalidades iguais ou semelhantes. Os módulos de infraestrutura devem ser reutilizáveis e flexíveis e ter uma finalidade clara.

Os módulos são arquivos independentes, que normalmente contêm um conjunto de recursos destinados a serem implantados juntos. Os módulos permitem que você divida modelos complexos em conjuntos de código menores e mais gerenciáveis. Você pode garantir que cada módulo se concentre em uma tarefa específica e que todos os módulos sejam reutilizáveis para várias implantações e cargas de trabalho.

Módulos Bicep

O Bicep permite que você crie e chame os módulos. Uma vez criados, os módulos podem ser consumidos a partir de qualquer outro modelo Bicep. Um módulo Bicep de alta qualidade deve definir vários recursos relacionados. Por exemplo, quando você define uma função do Azure, normalmente implanta um aplicativo específico, um plano de hospedagem para esse aplicativo e uma conta de armazenamento para os metadados desse aplicativo. Esses componentes são definidos separadamente, mas formam um agrupamento lógico de recursos. Portanto, você deve defini-los em conjunto, como módulo.

Os módulos Bicep geralmente usam:

  • Parâmetros para aceitar os valores de um módulo de chamada.
  • Valores de saída para retornar resultados para um módulo de chamada.
  • Recursos para definir um ou mais objetos de infraestrutura para um módulo a ser gerenciado.

Publicar módulos Bicep

Você tem várias opções para publicar e compartilhar os módulos Bicep.

  • Registro público: o registro público de módulo é hospedado em um MCR (Registro de Contêiner da Microsoft). O código-fonte e os módulos que ele contém são armazenados no GitHub.
  • Registro privado: você pode usar o registro de contêiner do Azure para publicar módulos em um registro privado. Para obter informações sobre como publicar os módulos em um registro em um pipeline de CI/CD, confira Bicep e GitHub Actions ou, se preferir, Bicep e Azure Pipelines.
  • Especificação de Modelo: você pode usar as especificações de modelo para publicar módulos Bicep. As especificações de modelo devem ser modelos completos, mas o Bicep permite que você use especificações de modelo para implantar módulos.
  • Sistema de controle de versão: você pode carregar os módulos diretamente nas ferramentas de controle de versão, como o GitHub ou o Azure DevOps.

Módulos do Terraform

O Terraform permite que você crie e chame os módulos. Cada configuração do Terraform tem pelo menos um módulo, conhecido como o módulo raiz, que consiste em recursos definidos em arquivos .tf no diretório de trabalho principal. Cada módulo pode chamar outros módulos, o que permite que você inclua módulos filho no arquivo de configuração principal. Os módulos também podem ser chamados várias vezes na mesma configuração ou a partir de configurações diferentes.

Os módulos são definidos com todos os mesmos conceitos de linguagem de configuração. Eles geralmente usam:

  • Variáveis de entrada para aceitar os valores de um módulo de chamada.
  • Valores de saída para retornar resultados para um módulo de chamada.
  • Recursos para definir um ou mais objetos de infraestrutura para um módulo a ser gerenciado.

Publicação de módulos do Terraform

Você tem várias opções para publicar e compartilhar os módulos do Terraform:

  • Registro público: a HashiCorp tem seu próprio Registro de Módulo do Terraform, que permite que os usuários gerem módulos compartilháveis do Terraform. No momento, existem vários módulos do Azure publicados no Registro de Módulos do Terraform.
  • Registro privado: você pode publicar facilmente os módulos do Terraform em um repositório privado, como o Registro Privado de Nuvem do Terraform ou o Registro de Contêiner do Azure.
  • Sistema de controle de versão: você pode carregar os módulos privados diretamente nas ferramentas de controle de versão, como o GitHub. Para obter informações sobre as fontes com suporte, confira Fontes de módulo do Terraform.

Considerações sobre o design

  • Use a IaC ao implantar os recursos de zona de destino no Azure. A IaC cumpre totalmente a otimização de implantação, reduz os esforços de configuração e automatiza as implantações de todo o ambiente.

  • Determine se você deve adotar uma abordagem de IaC imperativa ou declarativa.

    • Se estiver adotando uma abordagem imperativa, declare explicitamente os comandos a serem executados para gerar o resultado desejado.

    • Se estiver adotando uma abordagem declarativa, especifique o resultado desejado, em vez de como você deseja que seja feito.

  • Considere os escopos de implantação. Tenha uma boa compreensão dos níveis de gerenciamento e da hierarquia do Azure. Cada implantação de IaC deve saber o escopo em que os recursos do Azure são implantados.

  • Determine se você deve usar uma ferramenta de IaC nativa do Azure ou não nativa do Azure. Considere o seguinte:

    • Há suporte total da Microsoft para as ferramentas nativas do Azure, como a CLI do Azure, os modelos do ARM e o Bicep, o que permite que os novos recursos sejam integrados mais rapidamente.

    • As ferramentas não nativas, como o Terraform, permitem que você gerencie a infraestrutura como código em vários provedores de nuvem, como o AWS ou o GCP. No entanto, os novos recursos do Azure podem demorar um pouco para serem incluídos em ferramentas não nativas. Se sua organização for multicloud ou se sua organização já estiver usando e tiver um amplo conhecimento do Terraform, use o Terraform para implantar as zonas de destino do Azure.

  • Como os módulos permitem que você divida modelos complexos em conjuntos menores de código, use os módulos de IaC para recursos que normalmente são implantados juntos. Você pode garantir que cada módulo se concentre em uma tarefa específica e seja reutilizável para várias implantações e cargas de trabalho.

  • Adote uma estratégia de publicação para módulos de IaC escolhendo entre registros públicos, registros privados ou um sistema de controle de versão, como um repositório Git.

  • Use um pipeline de CI/CD para implantações de IaC. Um pipeline impõe o processo reutilizável definido para garantir a qualidade das implantações e do ambiente do Azure.

Recomendações sobre design

  • Adote uma abordagem de IaC para implantar, gerenciar, reger e dar suporte a implantações da zona de destino do Azure.

  • Use as ferramentas nativas do Azure para IaC nos seguintes cenários:

    • Você deseja usar apenas as ferramentas nativas do Azure. Sua organização pode ter uma experiência de implantação de modelo anterior do ARM ou do Bicep.

    • Sua organização deseja ter suporte imediato para todas as versões prévias e versões de GA dos serviços do Azure.

  • Use as ferramentas não nativas para IaC nos seguintes cenários:

    • No momento, sua organização usa o Terraform para implantar a infraestrutura em outras nuvens, como o AWS ou o GCP.

    • Sua organização não precisar ter suporte imediato para todas as versões prévias e versões de GA dos serviços do Azure.

  • Use os módulos de IaC reutilizáveis para evitar trabalho repetitivo. Você pode compartilhar os módulos em sua organização para implantar vários projetos ou cargas de trabalho e gerenciar código menos complexo.

  • Publique e use os módulos de IaC de registros públicos nos seguintes cenários:

    • Você deseja usar os módulos para Zona de Destino do Azure já publicados em registros públicos. Para obter mais informações, consulte Módulo Terraform das zonas de destino do Azure.

    • Você deseja usar módulos mantidos, atualizados e compatíveis com a Microsoft, o Terraform ou outros provedores de módulo.

      • Verifique se você marcar a instrução de suporte de qualquer provedor de módulo avaliado.
  • Publique e use os módulos de IaC de registros privados ou sistemas de controle de versão nos seguintes cenários:

    • Você deseja criar seus próprios módulos com base nos requisitos organizacionais.

    • Você deseja ter controle total de todos os recursos e manter, atualizar e publicar novas versões de módulos.

  • Use um pipeline de CI/CD para implantar artefatos de IaC e garantir a qualidade da implantação e dos ambientes do Azure.