Como a infraestrutura como código (IaC) gerencia infraestruturas complexas

Ian Buchanan Ian Buchanan

Resumo: Infraestrutura como código (IaC) é um processo de gerenciamento de infraestrutura de TI que aplica as práticas recomendadas do desenvolvimento de software DevOps para o gerenciamento de recursos de infraestrutura de nuvem.

A ascensão da virtualização de hardware em meados dos anos 2000 gerou novas oportunidades de hospedagem de infraestrutura em nuvem. Os provedores de hospedagem em nuvem começaram a oferecer acesso a plataformas dinâmicas de Infraestrutura como um Serviço (IaaS). À medida que essas plataformas cresceram e começaram a oferecer ativos de infraestrutura mais complexos, a complexidade de uma função tradicional de administração de sistemas também cresceu. A necessidade de configurar e gerenciar com rapidez infraestruturas complexas de nuvem logo se tornou um desafio.

A ideia de Infraestrutura como Código (IaC), ou modelagem de infraestrutura com código, foi estimulada pelo sucesso de CI/CD. A DevOps comprovou a produtividade de fazer o commit do código em um repositório do Git e, em seguida, aplicar ramificações de recurso e fluxos de trabalho de solicitação pull. A automação que esses fluxos de trabalho trouxeram para o desenvolvimento de software ajudou a reduzir a nova complexidade da administração de sistemas em nuvem.

O que é Infraestrutura como código?

Infraestrutura como código é um processo de gerenciamento de infraestrutura de TI que aplica as práticas recomendadas do desenvolvimento de software DevOps ao gerenciamento de recursos de infraestrutura de nuvem. Os recursos de infraestrutura adequados são máquinas virtuais, redes, balanceadores de carga, bancos de dados e outros aplicativos em rede.

IaC é uma forma de gerenciamento de configuração que codifica os recursos de infraestrutura de uma organização em arquivos de texto. Esses arquivos de infraestrutura passam então por commit para um sistema de controle de versão como o Git. O repositório de controle de versão permite fluxos de trabalho de ramificação e solicitação pull de recurso, que são dependências fundamentais de CI/CD.

Infraestrutura como código é possível graças ao surgimento de plataformas de hospedagem de infraestrutura em nuvem, especificamente plataformas IaaS. O IaaS permite provisionamento sob demanda e requisição de recursos de nuvem por meio de APIs remotas, que definem o template para propriedades que passam por commit para os arquivos de configuração da infraestrutura. Os recursos de automação de IaC podem executar os arquivos de configuração nas APIs IaaS remotas.

Uma vez que uma equipe tenha feito o commit da configuração da infraestrutura ao controle de versão, ela vai aplicar práticas de CI/CD às alterações de infraestrutura. As atualizações de infraestrutura podem seguir um fluxo de trabalho de DevOps. Se um membro da equipe tiver editado um dos arquivos de texto de configuração, solicitações pull e fluxos de trabalho de revisão de código podem ser usados para auditar e verificar a exatidão das edições. Além disso, uma infraestrutura habilitada para DevOps como sistema de código vai utilizar implementações e rollbacks automáticos de infraestrutura.

Por que a infraestrutura como código é importante?

A IaC evoluiu para ajudar a resolver o problema da “deriva ambiente”. Aplicativos na nuvem geralmente têm ambientes de implementação separados para os estágios de seu ciclo de vida de versão. É comum ter ambientes de desenvolvimento, de staging e de produção. Esses ambientes são compostos por recursos em rede, como servidores de aplicativos, balanceadores de carga e bancos de dados. O desvio do ambiente ocorre quando a infraestrutura entre esses diferentes ambientes fica fora de sincronia.

Sem a IaC, o gerenciamento de infraestrutura pode ser um processo desorganizado e frágil. Os administradores de sistema estabelecem a conexão manual com provedores de nuvem remotos e usam painéis de API ou da Web para provisionar novos recursos e hardware. Esse fluxo de trabalho manual não oferece uma visão holística da infraestrutura do aplicativo. Os administradores podem fazer alterações manualmente em um ambiente e esquecer de seguir no outro. É assim que a deriva do ambiente acontece.

A deriva do ambiente vira um desperdício de negócios caro. Bugs e falhas acontecem porque as equipes fazem o build em um ambiente de staging ou desenvolvimento e depois descobrem, após a implementação, que o ambiente de produção está fora de sincronia, o que leva a uma investigação demorada do porquê e do que está faltando.

Sem a IaC, o gerenciamento manual de infraestrutura é um processo lento. Se uma alteração de infraestrutura necessária for identificada devido à deriva do ambiente, picos de tráfego ou algum outro problema, pode levar um tempo incerto para que um administrador de sistemas reaja e se adapte. Esse cenário leva a interrupções e frustração do cliente. Com a IaC instalada, a infraestrutura pode se adaptar automaticamente às mudanças na configuração e reagir a picos de tráfego com recursos de dimensionamento automático.

Infraestrutura como código traz mais supervisão e visibilidade para a administração manual de sistemas. Com os arquivos de configuração da infraestrutura que passaram por commit para um repositório central de controle de versão, todos os membros da equipe podem visualizar e editar os dados da infraestrutura, possibilitando recursos potentes de auditoria. Por exemplo, se sua equipe for submetida a uma auditoria de conformidade com PCI, você vai precisar saber se uma parte específica da sua infraestrutura está usando criptografia SSL. Com a IaC, você pode ver rápido como o SSL é configurado e executar o código para verificar se a infraestrutura ativa corresponde aos arquivos de configuração, o que identifica se o SSL é permitido. O histórico de commits do controle de versão também atua como um log para revisar quando foi adicionado ou removido.

Como funciona a Infraestrutura como código?

Existem algumas dependências que precisam estar em vigor para alcançar plenamente a Infraestrutura como código.

Hospedagem acessível remota ou plataforma de hospedagem em nuvem IaaS
A primeira e mais importante dependência é a hospedagem de acesso remoto. A ferramenta de gerenciamento de configuração precisa se conectar e modificar o host remoto. Se a infraestrutura remota for autogerenciada, sua equipe precisa garantir que a ferramenta de gerenciamento de configuração tenha acesso. A plataforma de hospedagem em nuvem habilitada para IaaS oferece APIs que permitem a criação, a exclusão e a modificação automáticas dos recursos de infraestrutura sob demanda pelos usuários. Essas APIs também podem ser acessadas por ferramentas de gerenciamento de configuração para automatizar ainda mais essas tarefas. Alguns exemplos de plataformas IaaS populares são DigitalOcean, Amazon AWS e Microsoft Azure.

Plataforma de gerenciamento de configuração
O próximo requisito para concluir o IaC é um conjunto de ferramentas que se conecta às APIs do IaaS e automatiza tarefas comuns. Uma equipe pode criar um conjunto de scripts e ferramentas. Porém exigiria muito trabalho, manutenção futura e é provável que tivesse um baixo retorno do investimento. Já existem muitas plataformas de gerenciamento de configuração de código aberto que resolvem esse problema, incluindo Terraform, Ansible, SaltStack e Chef.

Sistema de controle de versão
Uma plataforma de gerenciamento de configuração usa arquivos de texto legíveis por humanos e por máquina escritos em uma linguagem de marcação como YAML para declarar tarefas e sequências para a plataforma executar. Esses arquivos de texto podem ser tratados como arquivos de código do aplicativo e armazenados em um repositório do sistema de controle de versão. O repositório atua como uma fonte central de verdade e permite solicitações pull e revisão de código. O sistema de controle de versão mais popular é o Git.

Com essas dependências em vigor, considere um exemplo de cenário no qual um desenvolvedor quer adicionar um novo serviço de aplicativo a um sistema. Esse exemplo ajuda a demonstrar um fluxo de trabalho de IaC

  1. O desenvolvedor edita um arquivo de texto de configuração YAML em sua plataforma de gerenciamento de configuração escolhida: a Terraform. As edições especificam que um novo servidor de hospedagem é necessário.
  2. O desenvolvedor faz o commit das edições em uma ramificação de recurso no repositório do Git. Como o repositório do Git do projeto está hospedado no Bitbucket, o desenvolvedor abre uma solicitação pull. Outro membro da equipe analisa a solicitação pull e fica ciente das novas mudanças de infraestrutura. O membro da equipe aprova a solicitação pull e o desenvolvedor faz o merge do commit para a ramificação principal do repositório.
  3. Neste ponto, a plataforma de configuração é necessária para executar uma atualização. O acionamento manual da atualização pode ser feito pelo desenvolvedor. Como a equipe está usando o Bitbucket, ela também tem acesso aos Bitbucket Pipelines e pode automatizar essa etapa com um pipeline.
  4. Após a execução, o Terraform faz interface com o IaaS da equipe. O Terraform executa uma série de comandos em relação à API do IaaS para atualizar o IaaS com a configuração de infraestrutura esperada.

Conclusão...

O IaC é uma forma muito produtiva de gerenciamento de configuração que se concentra na automatização do gerenciamento de infraestrutura de TI na nuvem. Depois que o IaC estiver em vigor, ele pode ser usado para atingir níveis de automação de CI/CD para mudanças na infraestrutura de um projeto. A IaC permite muitos insights benéficos sobre comunicação e transparência em relação às mudanças na infraestrutura. Ela requer um conjunto de dependências, como plataformas de hospedagem e ferramentas de automação, que estão amplamente disponíveis de empresas de hospedagem modernas.