Infraestrutura como código (IaC) é uma prática de DevOps que automatiza o provisionamento e o gerenciamento de infraestruturas de TI usando arquivos de configuração.
A IaC trata a infraestrutura como software. As equipes usam a IaC para versionar, testar e implementar a infraestrutura usando as mesmas práticas que usam para o código das aplicações.
Essa abordagem permite que as equipes contornem a configuração manual tradicional, que pode ser complicada e propensa a erros. A configuração manual geralmente envolve a configuração de servidores individuais, gerenciamento baseado em console e alterações não documentadas.
Em vez disso, as equipes definem requisitos de infraestrutura em arquivos de configuração que especificam os recursos necessários (servidores, redes, bancos de dados, políticas de segurança) e como configurá-los. Esses arquivos ficam em sistemas de controle de versão, fornecendo recursos de rastreamento, avaliação e reversão.
A IaC é um elemento importante da prática mais ampla de automação da infraestrutura, que usa código e automação para gerenciar a infraestrutura de TI em seu ciclo de vida. Com a IaC, os desenvolvedores não precisam mais provisionar manualmente os componentes de infraestrutura toda vez que desenvolvem, testam ou implementam aplicações. Essa automação ajuda as organizações a controlar custos, reduzir riscos e responder com rapidez a novas oportunidades de negócios.
À medida que as organizações adotam arquiteturas nativas da nuvem, a IaC torna-se cada vez mais essencial. Os ambientes de TI agora abrangem várias nuvens, milhares de contêineres e microsserviços distribuídos. Processos manuais que antigamente gerenciavam alguns servidores não conseguem lidar com essas arquiteturas, onde as equipes implementam frequentemente centenas de aplicações diariamente e constantemente provisionam, escalam e desativam a infraestrutura.
A IaC ajuda a gerenciar esses ambientes complexos de três maneiras críticas:
Por exemplo, uma empresa de varejo que se prepara para a Black Friday pode precisar escalar de 100 a 1.000 servidores em horas. Com a IaC, essa escala acontece automaticamente na infraestrutura no local e na nuvem, com base em modelos predefinidos. Essa capacidade de escalar ajuda a garantir que cada novo servidor mantenha configurações idênticas de segurança e conformidade.
De acordo com o IBM Institute for Business Value, 65% dos executivos relatam que tecnologias de automação, como a IaC, estão aprimorando a produtividade de suas equipes de TI.
Boletim informativo do setor
Mantenha-se atualizado sobre as tendências mais importantes (e intrigantes) do setor em IA, automação, dados e muito mais com o boletim informativo Think. Consulte a Declaração de privacidade da IBM.
Sua assinatura será entregue em inglês. Você pode encontrar um link para cancelar a assinatura em todos os boletins informativos. Você pode gerenciar suas inscrições ou cancelar a inscrição aqui. Consulte nossa Declaração de privacidade da IBM para obter mais informações.
A IaC combina um fluxo de trabalho repetível com ferramentas automatizadas. O fluxo de trabalho (gravar, versionar, provisionar e implementar) define como as equipes migram dos requisitos de infraestrutura para os recursos implementados. O conjunto de ferramentas (arquivos de configuração, sistemas de controle de versão e mecanismos de automação) fornece os mecanismos para definir, rastrear e criar a infraestrutura.
Juntos, esses elementos transformam o gerenciamento da infraestrutura de um processo manual e propenso a erros em uma função automatizada e repetível. As equipes escrevem a infraestrutura como código, com versões exclusivas como com o software, e implementam ambientes idênticos sob demanda.
O fluxo de trabalho da IaC segue quatro estágios:
Os desenvolvedores criam scripts IaC usando linguagens como HCL, YAML ou JSON, da mesma forma que escrevem código de aplicações em Java ou Python. As equipes escrevem definições de infraestrutura que especificam de quais recursos precisam e como configurá-los. Muitas vezes, elas escrevem esses arquivos em ambientes de desenvolvimento integrados (IDEs), que fornecem verificação de erros e funcionalidades de preenchimento automático.
O código é armazenado em sistemas de controle de versão (também conhecidos como controle de origem ou repositórios de código-fonte), como Git ou GitHub. O controle de versão rastreia alterações, mantém versões alternativas e permite que as equipes revertam para versões anteriores quando surgem problemas.
Um mecanismo de automação lê os arquivos de configuração e provisiona os recursos de infraestrutura especificados. Esse estágio transforma o código em infraestrutura real — criando máquinas virtuais (VMs), configurando redes, definindo bancos de dados e estabelecendo grupos de segurança. O processo de provisionamento é idempotente, o que significa que pode ser executado várias vezes sem criar recursos duplicados.
As equipes executam scripts para implementar a infraestrutura em vários ambientes, com a IaC ajudando a garantir configurações consistentes em todos os ambientes. A consistência dos scripts ajuda mais ao usar a implementação contínua, onde as alterações de software em uma aplicação são liberadas automaticamente no ambiente de produção.
Ferramentas automatizadas fornecem mecanismos para definir, rastrear e criar infraestrutura por meio de código.
Os arquivos de configuração definem a infraestrutura. Eles podem ser escritos em HCL, JSON, YAML ou linguagens específicas do domínio. Esses arquivos são blueprints que descrevem exatamente de qual infraestrutura você precisa (quantos servidores, qual tamanho, quais configurações de rede) em um formato que as ferramentas de automação podem ler e executar.
Esses arquivos se tornam a fonte única da verdade para as equipes, ajudando a garantir a consistência em vários ambientes. Eles podem ser atualizados, reutilizados ou variados para novas instalações à medida que as equipes adicionam mais ativos.
Os sistemas de controle de versão armazenam o histórico de cada arquivo. Eles rastreiam o código original e quaisquer alterações nele, incluindo o que foi alterado, por quem e quando. Esse rastreamento permite que as equipes entendam as alterações, recuperem exclusões e revertam quando surgem problemas.
O controle de versão permite que as organizações dividam a infraestrutura em módulos que se combinam por meio da automação. Essa abordagem modular ajuda a criar, atualizar e criar versões de ambientes complexos, reduzindo a duplicação e facilitando o teste e a reutilização de scripts.
Os mecanismos de automação automatizam o provisionamento e a configuração usando código predefinido. Eles executam as definições de infraestrutura em arquivos de configuração, transformando o código em recursos de TI reais, como servidores, redes e bancos de dados.
Alguns mecanismos são específicos da nuvem, como AWS CloudFormation, Azure Resource Manager ou Google Cloud Deployment Manager. Outros são executados em todas as nuvens, como Terraform, OpenTofu (um fork de código aberto do Terraform) ou Pulumi (que usa linguagens de programação de uso geral, como Python).
Esses mecanismos de automação são frequentemente combinados com ferramentas de orquestração, como o Kubernetes, para coordenar recursos e cargas de trabalho em escala.
As ferramentas da IaC geralmente se integram a plataformas de nuvem por meio de interfaces de programação de aplicativos (APIs). Essas conexões de API permitem que as ferramentas de IaC se comuniquem diretamente com os serviços de nuvem, criando e gerenciando recursos programaticamente, em vez de por meio de interações manuais do console.
A IaC também incorpora práticas padrão de desenvolvimento de software para ajudar a garantir a confiabilidade. Os testes automatizados podem ajudar a verificar as configurações de infraestrutura antes da implementação, identificando erros que poderiam causar falhas ou vulnerabilidades de segurança. Alguns sistemas de controle de versão podem acionar esses testes automaticamente quando ocorrem alterações no código, ajudando a garantir que cada modificação seja validada antes de chegar à produção.
Ao implementar a IaC, as organizações fazem duas escolhas principais: como definir uma infraestrutura (declarativa versus imperativa) e se uma infraestrutura pode ser modificada após a implementação (mutável versus imutável).
As abordagens declarativa e imperativa diferem na forma como se escreve o código da infraestrutura.
A abordagem declarativa, também conhecida como abordagem funcional ou IaC declarativa, é o método mais comum. O usuário descreve o estado desejado ("Preciso de três servidores com estas especificações"), e a IaC lida com a implementação. Ele cria os recursos, instala o software necessário, resolve interdependências e gerencia o controle de versão automaticamente.
A abordagem imperativa, também conhecida como abordagem de procedimento, exige que o usuário escreva instruções passo a passo para o provisionamento da infraestrutura. Os comandos exatos são especificados em uma ordem precisa: "Primeiro crie um servidor, depois instale este software e, em seguida, defina essas configurações". Essa abordagem requer mais conhecimento e pode dificultar a manutenção da consistência.
A infraestrutura mutável pode ser modificada após o provisionamento, enquanto a infraestrutura imutável não pode ser modificada após o provisionamento.
A infraestrutura mutável oferece flexibilidade para alterações ad hoc, como lidar com requisitos de aplicações específicos ou patches de segurança de emergência. No entanto, essa flexibilidade pode comprometer a consistência e dificultar o rastreamento de versões.
A maioria das organizações opta pela infraestrutura imutável. Para alterar um servidor ou uma configuração, as equipes devem substituir toda a infraestrutura por novos recursos.
Embora isso pareça proibitivo, na verdade pode ser benéfico por várias razões. Primeiro, a infraestrutura imutável elimina o desvio de configuração. O desvio é um problema comum com infraestrutura mutável, onde as alterações manuais se acumulam ao longo do tempo, tornando mais difícil manter a consistência entre ambientes.
Em segundo lugar, a infraestrutura imutável oferece recursos confiáveis de rastreamento e reversão de versões, pois cada alteração cria uma nova instância versionada. Isso significa que as equipes podem reverter instantaneamente para qualquer configuração anterior.
Por fim, com a IaC baseada na nuvem, uma nova infraestrutura pode ser provisionada rapidamente, muitas vezes em minutos, de modo que o reprovisionamento de todos os recursos da infraestrutura é muito mais prático do que parece inicialmente.
Ao automatizar o gerenciamento de infraestrutura que usa código, a IaC oferece vários benefícios:
O provisionamento manual de infraestrutura pode exigir semanas de configuração de hardware, instalação de sistema operacional e configuração de rede por uma equipe especializada.
A IaC reduz o tempo de provisionamento de semanas para minutos em todos os ambientes. Por exemplo, a IaC pode automatizar o provisionamento de infraestrutura legada que, de outra forma, exigiria processos manuais, como a emissão de um ticket. Em vez de esperar dias pela configuração do banco de dados e do servidor, os desenvolvedores podem executar um script para implementá-la em minutos.
Com a IaC (sempre que a infraestrutura é provisionada), ela segue a configuração idêntica definida no código.
Essa consistência ajuda a eliminar erros de configuração manual, como erros tipográficos, etapas perdidas ou configurações incorretas, ao mesmo tempo em que evita desvios de configuração ou dependências ausentes.
Inconsistências na configuração também podem criar vulnerabilidades de segurança e violar requisitos regulatórios, como a Lei Sarbanes-Oxley (SOX) ou o Regulamento Geral de Proteção de Dados (GDPR). Por exemplo, portas abertas desnecessárias ou HTTPS desabilitado podem desencadear violações de conformidade ou falhas de auditoria. A IaC ajuda a garantir configurações de ambiente idênticas sempre, até que sejam necessárias modificações.
A IaC pode ajudar a acelerar todas as fases do ciclo de vida da entrega de software. Os desenvolvedores podem provisionar rapidamente áreas de testes e ambientes sob demanda. As equipes de QA podem criar ambientes de teste instantaneamente. As equipes de operações podem automatizar a infraestrutura para testes de segurança e aceitação do usuário.
Quando o novo código é aprovado nos testes, tanto a aplicação quanto sua infraestrutura são implementadas juntas, resultando em uma entrega de funcionalidades mais rápida e implementações mais frequentes.
Organizações sem IaC normalmente dependem de alguns especialistas para provisionamento. Quando um desses especialistas sai, seu conhecimento geralmente vai com ele.
A IaC ajuda a preservar o conhecimento da infraestrutura no código, garantindo que o conhecimento crítico permaneça com a organização.
A IaC pode reduzir significativamente o tempo, o esforço e as habilidades especializadas necessários para provisionar e escalar a infraestrutura. Ela também otimiza o preço baseado no consumo da computação em nuvem — as organizações podem provisionar recursos somente quando necessários e desprovisioná-los automaticamente quando ociosos.
Essa abordagem de pagamento conforme o uso pode reduzir significativamente os gastos com infraestrutura, especialmente em ambientes de desenvolvimento e testes que não precisam de disponibilidade ininterrupta.
A IaC é essencial às práticas de DevOps porque permite que a infraestrutura migre à velocidade do desenvolvimento de software.
Sem a IaC, o provisionamento de infraestrutura pode se tornar um gargalo. Embora o código seja implementado em minutos, a configuração da infraestrutura pode levar horas ou dias. Por exemplo, adicionar um novo banco de dados pode exigir um ticket para a equipe de infraestrutura e dias de espera.
A IaC elimina essa lacuna ao aplicar integração contínua e entrega contínua (CI/CD) às implementações da infraestrutura. A infraestrutura e o código das aplicações podem ser testados, validados e implementados juntos em paralelo, em vez de como processos díspares.
Na prática, o código da infraestrutura geralmente convive com o código das aplicações no controle de versão. Quando os desenvolvedores confirmam alterações, o pipeline de CI/CD pode provisionar a infraestrutura de teste usando modelos de IaC, executa testes automatizados e usa os mesmos modelos para implementar em produção. Isso ajuda a garantir que todos os ambientes (desenvolvimento, testes, preparação, produção) tenham configurações de infraestrutura idênticas.
O principal benefício é a consistência. Sem a IaC, podem ocorrer desvios ambientais quando os ambientes de teste não correspondem à produção, causando falhas na implementação. A IaC ajuda a garantir que o que funciona nos testes funcione também na produção, pois ambos usam as mesmas definições de infraestrutura. As equipes podem revisar as alterações na infraestrutura por meio de solicitações de pull, rastrear modificações e reverter quando necessário, tratando a infraestrutura com o mesmo rigor que o código das aplicações.
As ferramentas de IaC se enquadram em categorias principais: ferramentas de provisionamento que criam e implementam infraestrutura e ferramentas de gerenciamento de configuração que mantêm a infraestrutura após a implementação.
Algumas ferramentas são executadas em todas as nuvens (funcionando em vários provedores), enquanto outras são específicas da plataforma.
As organizações normalmente combinam ferramentas de ambas as categorias para criar pipelines de IaC completos.
As ferramentas de provisionamento criam e implementam recursos de infraestrutura: servidores, redes e sistemas de armazenamento. Elas se concentram na definição inicial e na configuração dos componentes da infraestrutura, transformando os requisitos da infraestrutura em recursos de execução.
O Terraform da HashiCorp, uma empresa da IBM, é uma ferramenta de IaC que pode ser executada em todas as nuvens e que usa configuração declarativa para gerenciar a infraestrutura em várias plataformas.
As equipes escrevem definições de infraestrutura em HCL (HashiCorp Configuration Language) e podem implementar o mesmo código no AWS, Azure, Google Cloud ou em data centers locais. Essa portabilidade permite que as organizações evitem o lock-in com fornecedor e combinem provedores de nuvem com base em seus pontos fortes — por exemplo, usando AWS para computação e Google Cloud para aprendizado de máquina.
O Terraform também acelera as implementações ao provisionar recursos em vários provedores simultaneamente. Ele analisa dependências entre recursos e cria outras independentes em paralelo. Por exemplo, ao implementar 10 servidores AWS e cinco bancos de dados Azure sem dependências, o Terraform criará todos os 15 recursos de uma só vez, em vez de sequencialmente, reduzindo o tempo de implementação.
O AWS CloudFormation é a solução de IaC nativa da Amazon para infraestrutura da AWS. As equipes definem stacks inteiras de aplicações (de instâncias de EC2 a bancos de dados Rational Directory Server) usando modelos JSON ou YAML. O CloudFormation lida com dependências de recursos automaticamente, criando-os na ordem correta e revertendo-os em caso de erros.
Embora limitado à AWS, o CloudFormation oferece profunda integração com os serviços da AWS e compatibilidade imediata com novos. Organizações comprometidas com a AWS podem preferir seu desempenho nativo e acesso a funcionalidades proprietárias.
O Azure Resource Manager (ARM) é a ferramenta de IaC nativa da Microsoft para a infraestrutura do Azure. Embora limitado ao Azure, oferece integração profunda com a plataforma.
As organizações usam modelos ARM (formato JSON) para definir, implementar e gerenciar recursos do Azure. O ARM fornece funcionalidades integradas, incluindo controle de acesso baseado em função para segurança, marcação de recursos para organização, bloqueios para evitar exclusão acidental e mapeamento de dependências para ajudar a garantir que os recursos sejam implementados na ordem correta.
O Google Cloud Deployment Manager é a ferramenta de IaC nativa do Google que usa modelos YAML ou Python para orquestrar as implementações do Google Cloud. Embora seja específico de uma plataforma, ele cria e configura recursos em vários serviços (Cloud Storage para dados, Compute Engine para VMs, Cloud SQL para bancos de dados), ajudando a garantir que trabalhem juntos como uma stack completa.
As ferramentas de gerenciamento de configuração mantêm a infraestrutura após o provisionamento, ajudando a garantir que os sistemas permaneçam devidamente configurados, corrigidos e consistentes.
O Ansible é uma ferramenta de automação da Red Hat que gerencia a configuração sem a necessidade de agentes nos sistemas de destino. Em outras palavras, o Ansible não precisa de um software especial instalado nos servidores que ele gerencia. Ele se conecta diretamente usando SSH para executar comandos.
Essa abordagem sem agentes significa que o Ansible funciona em ambientes na nuvem, no local e híbridos. As equipes escrevem playbooks YAML que definem os estados desejados, e o Ansible ajuda a garantir que os sistemas correspondam a esses estados. É popular para gerenciar contêineres do Docker e implementações do Kubernetes.
O Puppet usa configuração declarativa para gerenciar grandes infraestruturas em ambientes de nuvem, locais e data centers.
Ele verifica continuamente milhares de servidores para garantir que correspondam às configurações definidas, corrigindo automaticamente qualquer desvio. O Puppet gera relatórios detalhados que mostram o que e quando foram alterados, tornando-o eficaz para implementações maiores.
O Chef usa “livros de receitas” e “receitas” para definir configurações de infraestrutura em qualquer ambiente, quer seja na nuvem, no local ou híbrido.
As organizações frequentemente recorrem ao Chef para seu framework de testes. As equipes podem verificar as configurações em ambientes de teste antes de enviar para a produção. Essa abordagem de descoberta antecipada de problemas pode torná-la popular em organizações que exigem atualizações frequentes de infraestrutura e valorizam frameworks de testes fortes.
Escale automaticamente sua infraestrutura de TI existente para obter maior desempenho com custos reduzidos.
Descubra como a IA para operações de TI fornece os insights de que você precisa para ajudar a impulsionar o desempenho excepcional dos negócios.
Vá além da automação de tarefas simples para lidar com processos estratégicos voltados para o cliente e geradores de receita, com adoção integrada e escalabilidade.