Pesquisa de site

Terraform vs Cloudformation: Confronto de infraestrutura como código


Quando falamos da cadeia de ferramentas de DevOps e CI/CD (entrega contínua/integração), estamos nos referindo a um superconjunto de ferramentas, muitas com recursos sobrepostos, para ajudar as organizações a alcançar uma velocidade de implantação mais rápida e segura. Isso abrange uma ampla gama de soluções: ferramentas de provisionamento, ferramentas de orquestração, estruturas de teste, gerenciamento de configuração (CM) e plataformas de automação e muito mais. As comparações entre os produtos CM geralmente roubam a cena (por exemplo, Puppet vs. Chef), mas, neste caso, compararemos duas ferramentas de orquestração e gerenciamento para provisionamento de infraestruturas: Terraform e CloudFormation.

Se as complexidades da cadeia de ferramentas de DevOps e CI/CD são um obstáculo mental para você, tenha certeza de que você não é o culpado. Soluções com recursos concorrentes geralmente são implantadas juntas para preencher as deficiências umas das outras e, em muitos casos, os benefícios declarados das ferramentas se sobrepõem. O seguinte pode ajudar a esclarecer as coisas — pelo menos neste contexto.

As ferramentas de CM lidam principalmente com máquinas que já foram criadas, agilizando/automatizando a instalação e gerenciamento de software e serviços. Soluções como Terraform e CloudFormation não são ferramentas de CM, mas codificam infraestruturas e datacenters inteiros em abstrações de alto nível para facilitar a replicação e o gerenciamento, geralmente servindo como ponto de partida para pipelines de DevOps totalmente realizados. Essas soluções criam os fundamentos da infraestrutura para dar suporte a instâncias de servidor, enquanto a ferramenta CM real, seja Puppet ou Chef, gerencia os detalhes das implantações reais: configurações, detalhes do aplicativo, dependências e assim por diante.

Terraform por Hashicorp

Tendo desenvolvido ferramentas populares como Vagrant, Atlas e Packer, a Hashicorp começou a criar uma solução para codificar a criação de todo o datacenter. O Terraform é o culminar desses esforços, dando aos desenvolvedores e à equipe de operações a capacidade de construir, combinar e lançar infraestruturas de sopa a nozes

Se você estiver familiarizado com a infraestrutura como código, o valor do Terraform será imediatamente aparente: a ferramenta permite a abstração de configurações de infraestrutura em código arquivável e controlado por versão. Portanto, enquanto o Puppet e o Chef automatizam o provisionamento de nós - servidores, aplicativos e outros - o Terraform lida com toda a configuração de recursos e serviços de infraestrutura subjacentes necessários para que as ferramentas de automação façam seus trabalhos com eficiência.

O Terraform usa sua própria linguagem específica de domínio (DSL) chamada Hashicorp Configuration Language (HCL): uma linguagem totalmente compatível com JSON para descrever a infraestrutura como código. Os arquivos de configuração criados com HCL descrevem os componentes necessários para criar uma infraestrutura e podem ser verificados no controle do código-fonte, bem como usados para criar solicitações de pull do GitHub e executados como documentação executável. Isso, por sua vez, estabelece a base para outras ferramentas de CM e automação, como Puppet e Chef, implantarem sistemas em um ambiente de infraestrutura. Portanto, em uma configuração hipotética do Terraform e do Puppet, o Puppet é chamado pelos provisionadores do Terraform para criar recursos de servidor durante as execuções de configuração baseadas em HCL.

Amazon CloudFormation

Assim como o Terraform, o Amazon CloudFormation oferece aos desenvolvedores e operadores as ferramentas para provisionar recursos de infraestrutura subjacentes de maneira fácil e automática. Esses recursos são gerenciados como pilhas e codificados em arquivos de configuração JSON conhecidos como modelos. Ao descrever a infraestrutura como código nesses modelos, os clientes da Amazon AWS desfrutam de previsibilidade e reutilização em suas implantações de infraestrutura: as alterações são feitas facilmente em um só lugar, com o CloudFormation cuidando da criação, atualização e exclusão dos recursos da AWS descritos na pilha.

O CloudFormation permite todos os benefícios esperados da infraestrutura como código. Como os modelos e as pilhas são legíveis e servem como documentação executável, a solução permite eficiência operacional significativa e redução de erros por meio da automação e consolidação de configurações de infraestrutura. E como ele captura detalhes de configuração em código de infraestrutura testável e controlável por versão, o CloudFormation pode ser integrado facilmente ao pipeline de CI/CD existente de uma organização.

Lado a lado: Terraform e CloudFormation

Você pode estar se perguntando novamente: por que a necessidade do Terraform e do CloudFormation, se ferramentas como o Puppet e o Chef também podem fazer infraestrutura como código? Embora as ferramentas de automação e CM possam gerenciar a maioria das configurações relacionadas à infraestrutura e ao sistema, elas geralmente pressupõem a pré-existência de certos componentes e serviços bare-metal. A abstração desses itens no nível do datacenter é mais adequada para ferramentas como Terraform e CloudFormation. Além disso, os dois não são ferramentas de CM, por si só, mas sim os componentes subjacentes para que ferramentas como Chef e Puppet façam seu trabalho.

Terraform resume isso muito bem em seu site:

"As ferramentas de gerenciamento de configuração instalam e gerenciam software em uma máquina que já existe. O Terraform não é uma ferramenta de gerenciamento de configuração e permite que as ferramentas existentes se concentrem em seus pontos fortes: inicializar e inicializar recursos. "

O mesmo vale para o CloudFormation. Ele cria todos os componentes e serviços de infraestrutura subjacentes necessários para especificação por meio de modelos - gerenciados como pilhas - e, em seguida, inicia todas as ferramentas de CM/automação para cuidar das configurações no nível do aplicativo. Por exemplo, depois de preparar os serviços associados ao datacenter e outras abstrações relacionadas à infraestrutura, o CloudFormation inicia o Puppet ou o Chef para provisionar os componentes de camada de software necessários, com personalização adicional fornecida por meio de receitas do Chef ou manifestos do Puppet.

Agora, quanto à comparação entre o Terraform e o CloudFormation:

Integração multi-cloud

O CloudFormation é específico para recursos de nuvem da AWS, enquanto o Terraform oferece suporte a todos os fornecedores de nuvem. Portanto, se o seu ambiente consiste em implantações de várias nuvens (por exemplo, Microsoft AWS ou Google Cloud), o CloudFormation não é para você. Dito isso, alguns recursos do Amazon AWS não podem ser gerenciados pelo Terraform, portanto, se você estiver usando recursos da AWS, como instâncias de servidor EC2 e armazenamento S3, é melhor ficar com o CloudFormation. Chame-o de "o fornecedor sabe melhor" - é o que é.

*Observação: o Terraform 0.6.16 agora oferece suporte total ao Amazon AWS, com recursos de criação/atualização/versionamento no mesmo nível do AWS CloudFormation. Confira o artigo da AWS sobre como usar o Terraform para gerenciar recursos da Nuvem AWS.

Gerenciamento do ciclo de vida da infraestrutura

Alguns recursos altamente úteis do Terraform ausentes no CloudFormation incluem ferramentas separadas para as fases de planejamento e execução da implantação. Isso elimina as suposições na implementação de mudanças na infraestrutura, pois a ferramenta de fase de planejamento do Terraform mostra quais recursos serão criados, modificados e encerrados. Visualizações como o gráfico Terraform oferecem aos desenvolvedores e operadores uma maneira fácil de compreender a ordenação dependente. Isso permite um certo nível de validação de implantação ausente no CloudFormation.

Maturidade e suporte do produto

O Terraform está na versão 0.6.3, o que o torna ainda não totalmente pronto para o horário nobre. Por outro lado, o CloudFormation é uma ferramenta estável e madura gerenciada pela Amazon e tem sido utilizada em infraestruturas corporativas de missão crítica há anos. Dito isso, estamos ansiosos para ver o que a Hashicorp - as marcas de Vagrant, Packer e Consul - tem vindo para o Terraform em versões futuras.

Em suma, as infraestruturas de nuvem centradas no Amazon AWS serão as que mais se beneficiarão do CloudFormation, enquanto aqueles que buscam suporte multinuvem optarão pelo Terraform. As empresas podem ficar mais à vontade com uma solução testada e comprovada como o CloudFormation, mas para aqueles que desejam evitar o bloqueio do fornecedor, o Terraform oferece os recursos de integração aberta necessários.

Independentemente da ferramenta de orquestração e gerenciamento de infraestrutura que você usa, os mecanismos de validação adequados são necessários para garantir que seus ambientes, desde o bare-metal até a pilha de aplicativos, estejam livres de déficits de qualidade e configurações incorretas. Em conjunto com ferramentas de CM/automação, essas soluções podem facilmente suportar ambientes de desenvolvimento que são supostamente idênticos à produção, mas não fornecem mecanismos independentes para validação adicional. Para isso, o ScriptRock pode validar se todo o ciclo de vida da infraestrutura está livre de vulnerabilidades e lacunas de segurança e se as configurações são as esperadas.

Artigos relacionados