Cloudformation/Serverless vs Terraform na AWS

Aug 25 2020

Gostaria de entender a necessidade de ferramentas como o Terraform. Quando temos o modelo Cloudformation disponível e é possível criar/atualizar todos os serviços da AWS com ele, qual é o objetivo de usar um serviço como o Terraform. Por favor sugira.

Respostas

Marcin Aug 25 2020 at 15:56

CloudFormation (CFN) e Terraform (CF) são ferramentas de desenvolvimento de Infraestrutura como Código (IaC).

No entanto, CFN é apenas para AWS . Você não pode usá-lo com Azure, GCP ou qualquer outra coisa fora do ecossistema AWS. Por outro lado, o TF é independente de nuvem . Você pode usá-lo não apenas em vários provedores de nuvem, mas também para trabalhar com produtos fora da nuvem, como docker, vários bancos de dados e até pizza de dominó, se desejar.

Portanto, a principal vantagem do TF é que, depois de aprendê-lo apenas uma vez , você pode aplicá-lo a vários provedores de nuvem. O CFN só é útil na AWS e, quando você para de usar o CFN, precisa aprender algo novo para trabalhar com outra nuvem.

Também há diferenças em como o TF e o CFN funcionam. Ambos têm seus pontos fortes e finais de semana . Por exemplo:

  • quando você implanta usando o CFN, todos os recursos ficam disponíveis para visualização em um local central na AWS junto com o código-fonte do modelo. Considerando que com TF não existe tal lugar. Se você logar no console AWS, você não tem ideia do que foi criado pelo TF, qual foi o código fonte usado, etc.

  • O TF tem loops e estruturas e condições de dados complexas, enquanto o CFN não.

  • CFN tem políticas de criação e políticas de atualização, TF não tem.

  • Você pode controlar o acesso ao CFN usando políticas CFN e políticas IAM. Você não pode fazer o mesmo com o TF, pois ele "vive" fora da AWS.

1 Blokje5 Aug 25 2020 at 15:56

Existem alguns motivos pelos quais você pode escolher o Terraform em vez do CloudFormation:

  1. Fornecedor independente: pode haver um ponto no futuro em que você precise migrar sua infraestrutura de nuvem. Isto pode dever-se a várias razões (por exemplo, custos, conformidade regulamentar, etc.). Com o Terraform você ainda pode usar a mesma ferramenta para implantar a nova infraestrutura. Com o uso inteligente dos módulos do Terraform, você pode deixar grandes partes de sua infraestrutura como repositório de código intactas.
  2. Suporte para outras ferramentas: isso também se baseia um pouco no ponto anterior, mas o Terraform pode implantar muito mais do que apenas recursos da AWS. Por exemplo, você pode usar o Terraform para orquestrar a implantação de uma máquina EC2 que é então configurada com Ansible. Ou você pode usar o Terraform para implantar aplicativos no cluster do Kubernetes. Embora o CloudFormation ofereça suporte a recursos personalizados por meio da criação de Lambdas personalizados, é muito trabalhoso manter.
  3. Ecossistema mais amplo: devido à natureza de código aberto do Terraform, existe um enorme ecossistema de ferramentas que ajudam a resolver todos os tipos de problemas, como testar a infraestrutura como código ou criar conformidade de maneira contínua.
  4. Indiscutivelmente uma linguagem melhor: Pessoalmente, acho que o Terraform é uma maneira mais adequada para Infraestrutura como Código do que CloudFormation. O Terraform tem muito mais flexibilidade incorporada à linguagem (HCL) e seu sistema de módulos permite muito mais capacidade de composição do que o que pode ser alcançado no CloudFormation.