O que é a infraestrutura como código?

Concluído

É solicitado que você avalie se a infraestrutura como código pode ser uma abordagem valiosa para o provisionamento de recursos em sua empresa. Você está examinando as opções disponíveis para implantação, incluindo:

  • Portal do Azure
  • CLI do Azure
  • Azure PowerShell
  • Modelos de Azure Resource Manager (JSON e Bicep)

Você está procurando uma opção repetível e precisa decidir qual tecnologia usar para implantar sua infraestrutura do Azure.

Nesta unidade, você aprenderá como e por que a infraestrutura como código pode ajudar a implantar sua infraestrutura do Azure de maneira automatizada e repetível.

Os comandos da CLI do Azure são usados para ilustrar conceitos. Você aprenderá mais sobre como usar comandos para implantar recursos em outros módulos do roteiro de aprendizagem do Bicep.

Definir a infraestrutura como código

Sua empresa projeta novos brinquedos para lançamento no mercado, e a maioria deles exige montagem após a compra. A equipe de design da empresa cria manuais de instrução para incluir com cada brinquedo. Cada manual fornece detalhes sobre como montar corretamente o brinquedo.

Você pode pensar na infraestrutura como código como o manual de instruções para sua infraestrutura. O manual detalha a configuração final de seus recursos e como alcançar esse estado de configuração.

A infraestrutura como código é o processo de automatização do provisionamento da infraestrutura. Ele usa uma linguagem de codificação descritiva e um sistema de controle de versão semelhante ao que é usado para o código-fonte. Quando você cria um aplicativo, o código-fonte gera o mesmo resultado toda vez que ele é compilado. De maneira semelhante, implantações de infraestrutura como código são automatizadas, consistentes e repetíveis. A infraestrutura como código pode automatizar as implantações de seus recursos de infraestrutura, como redes virtuais, máquinas virtuais, aplicativos e armazenamento.

Diagrama que mostra a infraestrutura como processo de código usando um repositório de código-fonte com um modelo que implanta recursos do Azure.

Pensando no manual de instruções do brinquedo novo, há várias maneiras de escrever esse manual. Uma opção é detalhar cada etapa do processo de montagem. Outra opção é mostrar uma vista explodida das peças necessárias para montar o brinquedo. Posteriormente nesta unidade, você aprenderá sobre as diferenças entre código imperativo e declarativo e como eles se relacionam com os manuais de instruções da sua empresa.

Por que usar a infraestrutura como código?

A adoção de uma abordagem de infraestrutura como código oferece muitos benefícios para o provisionamento de recursos. Com a infraestrutura como código, você pode:

  • Aumentar a confiança em suas implantações.
  • Gerenciar vários ambientes.
  • Entender melhor seus recursos de nuvem.

Aumentar a confiança

Um dos benefícios de usar a infraestrutura como código é o nível de confiança que você obterá em suas implantações ao ter aprimoramentos em consistência e segurança.

  • Integração com os processos atuais: Se sua organização já usa práticas de desenvolvimento de software padrão, você pode adotar esses mesmos processos para suas implantações de infraestrutura. Por exemplo, as revisões por pares podem ajudar a detectar problemas em configurações que podem ser difíceis de detectar ao fazer alterações manuais.

  • Consistência: a adoção de uma abordagem de infraestrutura como código ajuda sua equipe a seguir processos bem estabelecidos para implantar a infraestrutura. Seguindo esses processos, a responsabilidade passa de um pequeno grupo de indivíduos para seu processo de automação e suas ferramentas. A infraestrutura como código ajuda a reduzir o erro humano no provisionamento de recursos e a garantir implantações consistentes.

  • Varredura automatizada: Você pode verificar as configurações de infraestrutura como código com ferramentas automatizadas que podem verificar se há erros no código. As ferramentas automatizadas também podem examinar as alterações propostas para garantir que as práticas de segurança e desempenho sejam seguidas.

  • Gerenciamento de segredos: muitas soluções exigem segredos, como cadeias de conexão, chaves de criptografia, segredos do cliente e certificados. No Azure, um Azure Key Vault é o serviço usado para armazenar esses segredos com segurança. Muitas ferramentas de infraestrutura como código podem ser integradas ao Key Vault para acessar esses segredos com segurança na implantação.

  • Controle de acesso: com implantações de infraestrutura como código, você tem a opção de usar identidades gerenciadas ou contas de serviço para automatizar o provisionamento de recursos. Esse processo garante que apenas essas identidades possam modificar seus recursos de nuvem. Ele também ajuda a evitar configurações incorretas implantadas em produção. Se necessário, você pode substituir esse processo usando uma conta de acesso de emergência (geralmente chamada de conta de emergência) ou usando o recurso Microsoft Entra ID Privileged Identity Management.

  • Evite o descompasso de configuração: Idempotência é um termo frequentemente associado à infraestrutura como código. Quando uma operação é idempotente, significa que ela fornece o mesmo resultado sempre que é executada. Se você escolher ferramentas que usam operações idempotentes, poderá evitar o descompasso de configurações.

Como exemplo de idempotência, considere o seguinte comando da CLI do Azure. O seguinte comando cria um grupo de recursos do Azure chamado storage-resource-group na região Leste dos EUA.

az group create \
  --name storage-resource-group \
  --location eastus

Se você executar esse comando uma segunda vez, receberá exatamente a mesma saída porque esse comando da CLI do Azure foi projetado para ser idempotente. Você não recebe um erro ou um grupo de recursos duplicado.

Ao usar a infraestrutura como código, você pode reimplantar seu ambiente em cada versão da solução. Essas versões podem incorporar pequenas alterações de configuração ou até mesmo atualizações significativas. Esse processo ajuda a evitar o descompasso das configurações. Se uma alteração acidental for feita em um recurso, ela poderá ser corrigida ao reimplantar a configuração. Seguindo essa abordagem, você está documentando seu ambiente usando código.

Gerenciar vários ambientes

Muitas organizações mantêm vários ambientes de aplicativo. Os desenvolvedores em sua empresa de brinquedos podem ter várias versões do código do aplicativo preparadas em um repositório para lançamento em ambientes diferentes. Esses ambientes podem incluir desenvolvimento, teste e produção. Algumas organizações mantêm vários ambientes de produção para aplicativos que são distribuídos globalmente. Outras organizações, como ISVs (fornecedores independentes de software), mantêm ambientes multilocatários para seus clientes.

Confira abaixo algumas das principais maneiras pelas quais a infraestrutura como código pode ajudar a gerenciar seus ambientes:

  • Provisionar novos ambientes: um dos principais benefícios da computação em nuvem é a capacidade de escalar. A infraestrutura como código pode ajudar você a escalar para várias instâncias do seu aplicativo. Essas instâncias podem ser úteis durante momentos de aumento de carga, ou você pode implantá-las para usuários em outras áreas do mundo. Essa agilidade também pode ser benéfica quando você testa seu aplicativo, como durante testes de penetração, testes de carga e testes de bugs. Com uma base de código bem definida, você pode provisionar dinamicamente esses novos ambientes de maneira consistente.

  • Ambientes de não produção: Um problema comum que as organizações enfrentam é a diferenciação entre os ambientes de produção e não produção. Quando você provisiona recursos manualmente em ambientes separados, é possível que as configurações finais não sejam as mesmas. Um exemplo é quando você implanta um novo recurso em um ambiente de não produção que difere do ambiente de produção. É possível que o novo recurso não funcione conforme o esperado no ambiente de produção devido às diferenças entre os dois ambientes. O uso da infraestrutura como código pode ajudar a minimizar esses problemas. Você pode usar os mesmos arquivos de configuração para cada ambiente, mas fornecer parâmetros de entrada diferentes para criar exclusividade.

  • Recuperação de desastre: em algumas situações, a infraestrutura como código pode ser usada como parte do plano de recuperação de desastre de uma organização. Por exemplo, talvez seja necessário recriar o ambiente em outra região devido a uma interrupção do serviço. Usando a infraestrutura como código, você pode provisionar rapidamente uma nova instância para fazer failover em vez de implantar e reconfigurar tudo manualmente.

Entender melhor os recursos de nuvem

A infraestrutura como código pode ajudar você a entender melhor o estado de seus recursos de nuvem:

  • Trilha de auditoria: as alterações nas configurações da infraestrutura como código recebem o controle de versão da mesma forma que o código-fonte do aplicativo. Essas alterações são controladas em suas ferramentas, como no histórico de versão do Git. Essa trilha de auditoria significa que você pode examinar os detalhes de cada alteração, quem a fez e quando ela foi feita.

  • Documentação: você pode usar muitas configurações de infraestrutura como código para adicionar metadados, como comentários, que descrevem a finalidade do código em sua configuração. Se a sua organização já seguir um processo de documentação de código, considere adotar esses mesmos procedimentos com seu código de infraestrutura.

  • Sistema unificado: muitas vezes, quando um desenvolvedor está trabalhando em um novo recurso, ele deve fazer alterações no código do aplicativo e no código da infraestrutura. Ao usar um sistema comum, sua organização pode entender melhor a relação entre seus aplicativos e sua infraestrutura.

  • Melhor compreensão da infraestrutura de nuvem: quando você usa o portal do Azure para provisionar recursos, muitos dos processos são abstraídos da exibição. A infraestrutura como código pode ajudar a proporcionar uma melhor compreensão de como o Azure funciona e como solucionar os problemas que podem surgir. Por exemplo, quando você cria uma máquina virtual usando o portal do Azure, alguns recursos criados são abstraídos da exibição. Os discos gerenciados e as placas de adaptador de rede são implantados nos bastidores. Ao implantar a mesma máquina virtual usando a infraestrutura como código, você tem controle total sobre todos os recursos criados.

Código imperativo e declarativo

Você pode escrever um manual de instruções para a montagem de um novo brinquedo de maneiras diferentes. Ao automatizar a implantação de serviços e da infraestrutura, há duas abordagens diferentes que você pode adotar: imperativa e declarativa.

  • Com o código imperativo, você executa uma sequência de comandos, em uma ordem específica, para acessar uma configuração final. Esse processo define o que o código deve realizar e como executar a tarefa. A abordagem imperativa é como um manual de instruções passo a passo.

  • Com o código declarativo, você especifica apenas a configuração final. O código não define como realizar a tarefa. A abordagem declarativa é como um manual de instruções com vista explodida.

Ao escolher entre usar uma abordagem imperativa e uma abordagem declarativa para o provisionamento de recursos, considere as ferramentas que podem já estar em uso em sua organização. Considere também qual abordagem pode corresponder às suas habilidades.

Código imperativo

No Azure, uma abordagem de código imperativa é realizada programaticamente usando uma linguagem de script como Bash ou o Azure PowerShell. Os scripts executam uma série de etapas para criar, modificar e até mesmo remover seus recursos.

Este exemplo mostra dois comandos da CLI do Azure que criam um grupo de recursos e uma conta de armazenamento.

#!/usr/bin/env bash
az group create \
  --name storage-resource-group \
  --location eastus

az storage account create \
  --name mystorageaccount \
  --resource-group storage-resource-group \
  --location eastus \
  --sku Standard_LRS \
  --kind StorageV2 \
  --access-tier Hot \
  --https-only true

O primeiro cria um grupo de recursos chamado storage-resource-group na região Leste dos EUA. O segundo comando cria uma conta de armazenamento chamada mystorageaccount no grupo de recursos storage-resource-group, que foi criado com o primeiro comando. O segundo comando também configura algumas propriedades para a conta de armazenamento, incluindo o tipo de conta de armazenamento e a camada de acesso.

Você pode usar uma abordagem imperativa para automatizar totalmente o provisionamento de recursos, mas ela tem algumas desvantagens. À medida que sua arquitetura amadurece, os scripts podem se tornar complexos de gerenciar. Os comandos podem ser atualizados ou preteridos, o que requer revisões de scripts existentes.

Código declarativo

No Azure, uma abordagem de código declarativa é realizada usando modelos. Muitos tipos de modelos estão disponíveis para uso, incluindo:

  • JSON
  • Bicep
  • Ansible, da RedHat
  • Terraform, da HashiCorp

Observação

Este módulo se concentra no uso de modelos Bicep.

Confira a seguir o exemplo de um modelo Bicep que configura uma conta de armazenamento. A configuração da conta de armazenamento corresponde ao exemplo da CLI do Azure.

resource storageAccount 'Microsoft.Storage/storageAccounts@2203-05-01' = {
  name: 'mystorageaccount'
  location: 'eastus'
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
    supportsHttpsTrafficOnly: true
  }
}

A seção de recursos define a configuração da conta de armazenamento. Essa seção contém o nome, o local e as propriedades da conta de armazenamento, incluindo o SKU e o tipo de conta.

Você pode observar que o modelo Bicep não especifica como implantar a conta de armazenamento. Ele especifica apenas como a conta de armazenamento deve ser. As etapas reais executadas nos bastidores para criar essa conta de armazenamento ou para atualizá-la de modo que corresponda à especificação ficam por decisão do Azure.