AWS CloudFormation e Terraform — não tem certeza de qual escolher? Este artigo ajudará você a tomar uma decisão inteligente.
Computação em nuvem revolucionou o mundo do DevOps. Não é mais apenas uma palavra da moda; ela está aqui para mudar a forma como desenvolvemos e mantemos nossas aplicações. Embora haja inúmeras razões para você usar computação em nuvem para todos os tamanhos de negócios, há uma pequena limitação: você precisa provisionar sua infraestrutura manualmente.
Você precisa acessar os consoles de seus provedores de nuvem e dizer exatamente o que deseja. Isso funciona bem para pequenos casos de uso, mas e se diferentes pessoas estiverem fazendo alterações de configuração no console? Você pode acabar com uma infraestrutura super complicada que se tornará cada vez mais difícil de manter. Não há uma maneira eficiente de colaborar ou acompanhar as mudanças na infraestrutura de nuvem. Bem, existe a Infraestrutura como Código.
Infraestrutura como Código (IaC) é um termo da moda em computação em nuvem. É o processo de gerenciar sua TI IaC. Sim, isso mesmo. Em vez de ir ao console e fazer tudo manualmente, IaC permite que você escreva arquivos de configuração para provisionar sua infraestrutura de nuvem. IaC nos oferece benefícios como consistência, manutenção fácil e rápida, e nenhuma margem para erros humanos.
Usando IaC com Amazon Web Services
A 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. Ele 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ê muitas vezes reduzirá suas escolhas para AWS CloudFormation e a ferramenta de código aberto Terraform. Se você deseja escolher entre os dois, entender a multiplicidade de recursos oferecidos por ambas as ferramentas pode ser avassalador. Neste artigo, examinaremos as diferenças entre a AWS CloudFormation e o 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, ele 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.
Existe também um serviço da AWS, o AWS Service Catalog, que pode ajudar com modularidade para o CloudFormation. O AWS Service Catalog é projetado para organizações que precisam limitar o escopo dos serviços da AWS para atender requisitos de conformidade, segurança, custo ou desempenho. Ele utiliza modelos do CloudFormation nos bastidores.
Vamos entender isso rapidamente com um exemplo. Se não usado corretamente, os buckets S3 podem logo se tornar catastróficos para seus dados confidenciais. Vamos pegar o mesmo exemplo. Você quer ter uma forma padrão de usar o S3 em sua organização. A primeira opção é criar o modelo de pilha aninhada, que pode ser usado dentro de 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 personalizaçõ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 o AWS Service Catalog do CloudFormation também podem suportar configurações padrão em grandes organizações, embora isso 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 CloudFormation da AWS e as use 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 privado.
O suporte nativo do Terraform para módulos fornece uma abordagem direta para modularidade. No entanto, gerenciar módulos em uma equipe grande 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 usar módulos no Terraform. O principal fator é 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 via 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 Infraestrutura
Se você deseja limitar os recursos que suas pessoas podem criar em suas Contas AWS, o CloudFormation da AWS e o Terraform fornecem os meios para fazê-lo.
CloudFormation
O CloudFormation fornece controle via políticas do 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 for totalmente centrada na AWS.
No nosso exemplo de bucket S3, você pode querer limitar todas as permissões de “Criação de S3” para os 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 lógicas detalhadas 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 buckets S3 a partir de um módulo padrão.
Gerenciamento de Estado
O AWS CloudFormation e o Terraform precisam manter o controle dos recursos que eles mantêm.
Terraform
O Terraform armazena o estado da sua infraestrutura em um arquivo de estado. Esse arquivo é armazenado localmente por padrão; 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 realiza a manutenção de estado internamente em segundo plano, então os usuários não precisam 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 mudanças 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 incorporados.
CloudFormation
Os templates do CloudFormation são escritos nos formatos YAML ou JSON.
Registro e Reversões
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 mudanças em caso de uma falha na alteração da pilha. Este é um bom recurso, mas pode ser desativado para fins de depuração.
Terraform
O Terraform não reverterá automaticamente suas mudanças se falhar. Isso não é um problema, pois você sempre pode 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, e fornece flexibilidade se você estiver trabalhando em um ambiente multi-nuvem.
CloudFormation
O CloudFormation está intimamente integrado com a AWS, tornando-o uma boa opção para infraestruturas exclusivas da AWS, mas limitado para configurações multi-cloud.
Suporte de Recursos
CloudFormation
O AWS CloudFormation geralmente recebe atualizações primeiro para novos serviços e recursos, dada a sua estreita integração com a AWS.
Terraform
Em casos em que o Terraform não possui certos recursos da AWS, você pode integrar diretamente pilhas do CloudFormation em seu código Terraform como 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 possui planos pagos para suporte técnico no Terraform também.
Conclusão
Tanto o 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 às suas necessidades. Se você planeja usar várias plataformas de nuvem, o Terraform oferece suporte multi-cloud, enquanto o AWS CloudFormation é uma excelente escolha para ambientes específicos da AWS. Em última análise, ambas as ferramentas são válidas e podem gerenciar efetivamente a Infraestrutura como Código (IaC). A escolha certa depende de seus requisitos, seja você focado apenas na AWS ou trabalhando com vários provedores de nuvem.
Source:
https://dzone.com/articles/understanding-iac-tools-cloudformation-vs-terraform