Compreendendo as Ferramentas IaC: CloudFormation vs. Terraform

AWS CloudFormation e Terraform — não tem certeza de qual escolher? Este artigo irá ajudá-lo a tomar uma decisão inteligente.

Computação em nuvem revolucionou o mundo do DevOps. Não é apenas uma palavra da moda; está aqui para mudar a forma como desenvolvemos e mantemos nossas aplicações. Embora haja inúmeras razões pelas quais você deve usar a computação em nuvem para todos os tamanhos de empresas, há uma pequena limitação: Você tem que provisionar sua infraestrutura manualmente.

Você tem que ir para os consoles de seus provedores de nuvem e dizer exatamente o que você quer. Isso funciona bem para casos de uso pequenos, mas e se você tiver diferentes pessoas fazendo alterações de configuração no console? Você pode acabar com uma infraestrutura super complicada que só ficará cada vez mais difícil de manter. Não há uma maneira eficiente de colaborar ou acompanhar as mudanças na infraestrutura da nuvem. Bem, há a Infraestrutura como Código.

Infraestrutura como Código (IaC) é um termo da moda na computação em nuvem. É o processo de gerenciar sua TI como IaC. Sim, é isso mesmo. Em vez de ir para o console e fazer tudo manualmente, o IaC permite que você escreva arquivos de configuração para provisionar sua infraestrutura na nuvem. O IaC nos oferece benefícios como consistência, manutenção fácil e rápida e sem margem para erros humanos.

Usando IaC com Amazon Web Services

AWS é o principal serviço de computação em nuvem do mundo, com o dobro da participação de mercado do próximo provedor de nuvem. Oferece mais de 200 serviços que podem atender a centenas e milhares de casos de uso.

Ao começar a usar IaC com a AWS, você frequentemente restringirá suas opções a AWS CloudFormation e à ferramenta de código aberto Terraform. Se você quiser escolher entre os dois, entender a multitude de recursos que ambas as ferramentas oferecem pode ser esmagador. Neste artigo, examinaremos as diferenças entre AWS CloudFormation e Terraform para ajudá-lo a decidir qual ferramenta é mais adequada às suas necessidades.

Terraform vs. AWS CloudFormation: Diferenças

Modularidade

Ao usar IaC em grandes organizações, a modularidade pode ser um fator significativo na escolha da ferramenta certa.

CloudFormation

CloudFormation não possui suporte nativo para módulos. Em vez disso, permite que você use algo chamado pilhas aninhadas como módulos.

Por exemplo, você pode criar um modelo padrão do CloudFormation para provisionar um bucket S3 em sua organização. Quando os usuários finais desejam criar um bucket S3, eles podem usar este modelo do CloudFormation como uma pilha aninhada para provisionar o bucket S3 padrão.

Também há um serviço da AWS, o AWS Service Catalog, que pode ajudar com a modularidade para o CloudFormation. O AWS Service Catalog é projetado para organizações que precisam limitar o escopo dos serviços da AWS para atender a requisitos de conformidade, segurança, custo ou desempenho. Ele utiliza modelos do CloudFormation nos bastidores.

Vamos entender rapidamente isso com um exemplo. Se não for usado corretamente, os buckets S3 logo podem se tornar catastróficos para seus dados confidenciais. Vamos pegar o mesmo exemplo. Você deseja ter uma maneira padrão de usar o S3 em sua organização. A primeira opção é criar o modelo de pilha aninhada, que pode ser usado em outras pilhas do CloudFormation e é igualmente bom.

Alternativamente, você pode usar o AWS Service Catalog, que permite aos usuários usar este modelo padrão a partir da interface do console e especificar alguns parâmetros para pequenas customizações. Isso permitirá que você controle como a infraestrutura é provisionada em suas Contas da AWS e evite quaisquer cenários indesejados.

O uso de pilhas aninhadas e do AWS Service Catalog do CloudFormation também pode suportar configurações padrão em grandes organizações, embora possa exigir mais configuração manual.

Terraform

O Terraform tem suporte nativo para módulos. Ele permite que você crie configurações padrão semelhantes ao AWS CloudFormation e as utilize em outras configurações do Terraform.

Uma vez que o Terraform é uma ferramenta de código aberto, você também pode encontrar e usar alguns módulos de código aberto pré-fabricados no Registro do Terraform. Você também pode criar seus próprios módulos com suas próprias configurações e hospedá-los em um registro de módulos privados.

O suporte nativo do Terraform para módulos oferece uma abordagem direta para modularidade. No entanto, o gerenciamento de módulos em uma grande equipe pode exigir governança adicional para garantir o uso adequado.

O uso de uma pilha aninhada no CloudFormation não é tão fácil quanto o uso de módulos no Terraform. O fator principal é que passar dados de um modelo CFN para a pilha aninhada pode ser complicado.

O CloudFormation não possui um repositório centralizado para compartilhamento de modelos. O AWS Service Catalog permite que você gerencie esse processo, mas principalmente faz cumprir regras por meio do console. Embora os modelos do CloudFormation possam encapsular tarefas complexas, os usuários ainda teriam que especificar parâmetros ao criar recursos.

Por outro lado, o Terraform possui um método definido para criar, manter e compartilhar módulos. Você pode ver os requisitos exatos dos módulos no Registro de Módulos do Terraform e usá-los facilmente em seus arquivos do Terraform.

Controle e Governança sobre a Infraestrutura

Se você deseja limitar quais recursos suas pessoas podem criar em suas Contas da AWS, o AWS CloudFormation e o Terraform fornecem os meios para fazer isso.

CloudFormation

O CloudFormation fornece controle via políticas IAM, permitindo que você gerencie o acesso do usuário aos recursos. No entanto, esse controle é específico da AWS, o que pode ser ideal se sua infraestrutura estiver totalmente centrada na AWS.

No nosso exemplo de bucket S3, você pode querer limitar todas as permissões de “Criar S3” para usuários e permitir que eles criem buckets S3 apenas a partir do Catálogo de Serviços da AWS ou Pilhas Aninhadas.

Terraform

O Terraform permite que você controle quais recursos seus usuários podem criar usando uma ferramenta de política como código, o Sentinel. O Sentinel permitirá que você aplique políticas baseadas em lógica finamente granuladas para permitir ou negar ações de usuários via Terraform. Por exemplo, você pode negar todos os recursos que criam buckets S3 e permitir que os usuários criem apenas buckets S3 a partir de um módulo padrão.

Gerenciamento de Estado

O AWS CloudFormation e o Terraform precisam acompanhar os recursos que mantêm.

Terraform

O Terraform armazena o estado da sua infraestrutura em um arquivo de estado. Por padrão, esse arquivo é armazenado localmente; no entanto, você pode armazená-lo em backends remotos como S3 e permitir que vários usuários façam alterações no mesmo conjunto de infraestrutura.

CloudFormation

O CloudFormation faz a manutenção do estado internamente em segundo plano, para que os usuários não precisem se preocupar em gerenciar manualmente um arquivo de estado. Isso é bom para aqueles que desejam um serviço totalmente gerenciado.

Tanto o AWS CloudFormation quanto o Terraform permitem que você verifique quais mudanças serão feitas em sua infraestrutura. No Terraform, você pode executar o comando “terraform plan” para ver como o Terraform planeja aplicar suas alterações de configuração. No CloudFormation, os usuários podem ver essas informações por meio de Change Sets.

Idioma

Terraform

O Terraform utiliza a HashiCorp Configuration Language, HCL, uma linguagem criada pela HashiCorp. É muito semelhante ao JSON, com recursos e capacidades adicionais integrados.

CloudFormation

Os modelos do CloudFormation são escritos nos formatos YAML ou JSON.

Registro e Retrocessos

Tanto o AWS CloudFormation quanto o Terraform possuem boas capacidades de registro. Na minha experiência, os erros e problemas foram diretos (na maior parte do tempo).

CloudFormation

Por padrão, o CloudFormation reverte todas as suas alterações em caso de uma mudança de pilha com falha. Este é um bom recurso, mas pode ser desativado para fins de depuração.

Terraform

O Terraform não reverterá automaticamente suas alterações se falhar. Isso não é um problema, já que você pode sempre executar o comando Terraform destroy para deletar a configuração parcialmente provisionada e reiniciar uma execução do Terraform novamente.

Escopo

Terraform

O suporte multi-nuvem do Terraform permite que você implante infraestrutura em AWS, Azure, Google Cloud e outras plataformas, proporcionando flexibilidade se você estiver trabalhando em um ambiente multi-nuvem.

CloudFormation

O CloudFormation está fortemente integrado com a AWS, tornando-o uma boa opção para infraestruturas exclusivas da AWS, mas limitado para configurações de múltiplas nuvens.

Suporte a Recursos

CloudFormation

A AWS CloudFormation geralmente recebe atualizações primeiro para novos serviços e recursos, dada sua estreita integração com a AWS.

Terraform

Nos casos em que o Terraform carece de certos recursos da AWS, você pode integrar pilhas do CloudFormation diretamente em seu código Terraform como uma solução alternativa.

Suporte Técnico

CloudFormation

O plano de suporte técnico pago da AWS também cobre o suporte ao CloudFormation.

Terraform

A HashiCorp tem planos pagos para suporte técnico ao Terraform também.

Conclusão

Tanto a AWS CloudFormation quanto o Terraform são ferramentas robustas e totalmente desenvolvidas, cada uma com suas próprias vantagens. As diferenças acima podem ajudá-lo a determinar qual ferramenta melhor atende suas necessidades. Se você planeja usar várias plataformas de nuvem, o Terraform oferece suporte a múltiplas nuvens, enquanto o AWS CloudFormation é uma excelente escolha para ambientes específicos da AWS. No final das contas, ambas as ferramentas são válidas e podem gerenciar efetivamente IaC. A escolha certa depende de suas exigências, seja você focando apenas na AWS ou trabalhando com vários provedores de nuvem.

Source:
https://dzone.com/articles/understanding-iac-tools-cloudformation-vs-terraform