O que é a infraestrutura como código?

Concluído

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

  • Portal do Azure
  • CLI do Azure
  • Azure PowerShell
  • Modelos do 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 ajudá-lo a implantar sua infraestrutura do Azure de forma automatizada e repetível.

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

Definição de infraestrutura como código

Sua empresa projeta novos brinquedos para lançamento no mercado, e a maioria dos brinquedos novos requer alguma montagem após a compra. A equipa de design da empresa cria manuais de instruções para incluir em cada brinquedo. Cada manual fornece detalhes sobre como montar corretamente o brinquedo.

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

Infraestrutura como código é o processo de automatizar o provisionamento de 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, seu código-fonte gera o mesmo resultado cada vez que você o compila. Da mesma forma, as 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.

Se você se lembrar do manual de instruções do novo brinquedo, há várias maneiras de escrever o manual de instruções. Uma opção é detalhar cada etapa do processo de compilação. Outra opção é mostrar uma visão explodida das peças e peças necessárias para montar o brinquedo. Mais adiante 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 ao provisionamento de recursos. Com a infraestrutura como código, você pode:

  • Aumente a confiança em suas implantações.
  • Gerencie vários ambientes.
  • Compreenda melhor os seus recursos na nuvem.

Aumentar a confiança

Um dos benefícios de usar a infraestrutura como código é o nível de confiança que você ganha em suas implantações a partir de melhorias na consistência e na segurança.

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

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

  • Verificação automatizada: você pode verificar as configurações de infraestrutura como código com ferramentas automatizadas que podem verificar erros no código. As ferramentas automatizadas também podem analisar 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 de cliente e certificados. No Azure, um Cofre da Chave do Azure é 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 na produção. Se necessário, você pode substituir esse processo usando uma conta de acesso de emergência (geralmente chamada de conta de vidro de quebra) ou usando o recurso Microsoft Entra ID Privileged Identity Management.

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

Como exemplo de idempotência, considere o seguinte comando da CLI do Azure. O comando cria um grupo de recursos do Azure nomeado 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 desvios de configuração. Se uma alteração acidental for feita em um recurso, ela poderá ser corrigida reimplantando a configuração. Ao seguir essa abordagem, você está documentando seu ambiente usando código.

Gerencie vários ambientes

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

Aqui estão algumas das principais maneiras pelas quais a infraestrutura como código pode ajudá-lo a gerenciar seus ambientes:

  • Provisão de novos ambientes: Um dos principais benefícios da computação em nuvem é a capacidade de escala. A infraestrutura como código pode ajudá-lo a dimensionar para várias instâncias do seu aplicativo. Essas instâncias podem ajudar durante períodos de maior 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 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 coincidam. Um exemplo é quando você implanta um novo recurso em um ambiente que não é de produção que difere do ambiente de produção. É possível que o novo recurso não funcione como esperado no ambiente de produção devido às diferenças entre os dois ambientes. Usar a 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 desastres: em algumas situações, a infraestrutura como código pode ser usada como parte do plano de recuperação de desastres de uma organização. Por exemplo, talvez seja necessário recriar seu ambiente em outra região devido a uma interrupção de serviço. Usando a infraestrutura como código, você pode provisionar rapidamente uma nova instância para failover em vez de implantar e reconfigurar tudo manualmente.

Compreenda melhor os seus recursos na nuvem

A infraestrutura como código pode ajudá-lo a entender melhor o estado de seus recursos de nuvem:

  • Trilha de auditoria: as alterações nas configurações de infraestrutura como código são controladas por versão da mesma forma que o código-fonte do aplicativo. Essas alterações são rastreadas em suas ferramentas, como no histórico de versões do Git. Essa trilha de auditoria significa que você pode revisar os detalhes de cada alteração, quem fez a alteração 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 sua organização já segue 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. Quando você usa 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 fornecer uma melhor compreensão de como o Azure funciona e como solucionar problemas que possam surgir. Por exemplo, quando você cria uma máquina virtual usando o portal do Azure, alguns recursos criados são abstraídos do modo de exibição. Discos gerenciados e placas de interface de rede são implantados nos bastidores. Quando você implanta a mesma máquina virtual usando a infraestrutura como código, você tem controle total sobre todos os recursos que são criados.

Código imperativo e declarativo

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

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

  • Com código declarativo, você especifica apenas a configuração final. O código não define como realizar a tarefa. A abordagem declarativa é como o manual de instruções da 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 próprias habilidades.

Código imperativo

No Azure, uma abordagem de código imperativo é realizada programaticamente usando uma linguagem de script como Bash ou 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 comando cria um grupo de recursos nomeado storage-resource-group na região Leste dos EUA. O segundo comando cria uma conta de armazenamento nomeada mystorageaccount no grupo de storage-resource-group recursos que foi criado no primeiro comando. O segundo comando também configura algumas propriedades para a conta de armazenamento, incluindo o tipo de conta de armazenamento e sua camada de acesso.

Você pode usar uma abordagem imperativa para automatizar totalmente o provisionamento de recursos, mas a abordagem 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 declarativo é realizada usando modelos. Muitos tipos de modelos estão disponíveis para uso, incluindo:

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

Nota

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

Dê uma olhada no exemplo a seguir 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. Esta seção contém o nome, o local e as propriedades da conta de armazenamento, incluindo sua SKU e o tipo de conta.

Você pode notar que o modelo Bicep não especifica como implantar a conta de armazenamento. Ele especifica apenas a aparência que a conta de armazenamento precisa ter. As etapas reais que são executadas nos bastidores para criar essa conta de armazenamento ou atualizá-la para corresponder à especificação são deixadas para o Azure decidir.