Cloudformation/Serverless vs Terraform na AWS
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
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.
Existem alguns motivos pelos quais você pode escolher o Terraform em vez do CloudFormation:
- 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.
- 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.
- 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.
- 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.