Está indeciso entre o AWS CDK e o Terraform? Este artigo visa clarificar as suas dúvidas, auxiliando na tomada de uma decisão bem fundamentada.
A computação em nuvem transformou profundamente o setor da tecnologia e informação. Desde a forma como implementamos e mantemos aplicações até às práticas de desenvolvimento, tudo foi significativamente influenciado pela Cloud Computing. Atualmente, a maioria das novas aplicações são concebidas para serem nativas da nuvem e compatíveis com os serviços oferecidos.
A nuvem possibilita a criação de arquiteturas altamente disponíveis, escaláveis e eficazes, o que impulsiona a procura por serviços de nuvem. Com o crescimento da computação em nuvem, tornou-se crucial manter a infraestrutura como código. Gerenciar recursos de nuvem manualmente através do console pode ser complexo e difícil de monitorizar.
A Infraestrutura como Código (IaC), também conhecida como IaC ou IAAC, resolve este problema. Através da IaC, podemos descrever os nossos recursos utilizando código, que depois é utilizado para provisionar serviços na nuvem. Desta forma, vários programadores podem colaborar na infraestrutura e acompanhar as alterações realizadas.
Infraestrutura como Código na AWS
A AWS destaca-se como o maior e mais utilizado fornecedor de serviços de nuvem em todo o mundo. Oferece a sua própria ferramenta IaC, o AWS CloudFormation ou AWS CDK, e também permite o uso de ferramentas de terceiros como o Terraform para provisionar recursos. Ao escolher ferramentas IaC para a AWS, o Terraform, sendo de terceiros, representa uma alternativa forte às soluções geridas pela AWS, como o AWS CloudFormation e o AWS CDK.
Com a variedade de opções disponíveis, selecionar a ferramenta IaC mais apropriada pode ser um desafio. Neste artigo, analisaremos as diferenças entre o AWS CDK e o Terraform. O AWS CDK usa internamente o Cloudformation, por isso, para uma análise mais aprofundada do Cloudformation e do Terraform, consulte o artigo relacionado: Fundamentos das Ferramentas IaC: CloudFormation vs. Terraform.
Terraform
O Terraform é uma ferramenta de código aberto para infraestrutura como código, desenvolvida inicialmente pela Hashicorp. É uma ferramenta consolidada que suporta vários fornecedores de nuvem, incluindo a AWS. O Terraform oferece suporte a todos os serviços da AWS, e a comunidade de desenvolvimento rapidamente incorpora qualquer nova funcionalidade que a AWS adicione. Permite a escrita de código na linguagem HCL (HashiCorp Configuration Language), que é semelhante ao JSON, para definir recursos de infraestrutura.
AWS CDK
O AWS CDK funciona como uma camada sobre o AWS CloudFormation. Para entender o funcionamento do AWS CDK, é útil ter algum conhecimento sobre o AWS CloudFormation. O AWS CloudFormation é uma ferramenta da AWS que permite definir a infraestrutura em formatos YML ou JSON. Embora ler JSON e YML seja fácil, estas não são linguagens de programação completas. A falta de suporte nativo para loops e funções torna a manutenção de grandes infraestruturas mais complexa, e é aqui que o AWS CDK se torna útil.
O AWS CDK permite utilizar linguagens de programação conhecidas como JAVA ou Python para criar a infraestrutura. Isto simplifica a escrita e manutenção do código.
Terraform vs. AWS CDK: Análise Comparativa
#1. Linguagem e Facilidade de Uso
A linguagem e a facilidade de utilização são fatores cruciais para distinguir o AWS CDK do Terraform.
Começando pelo Terraform, este utiliza uma linguagem semelhante a JSON, a HCL, para descrever recursos e dados. A sua documentação é acessível e fácil de seguir, mesmo para iniciantes.
Vejamos um exemplo de código para criar um bucket S3:
resource "aws_s3_bucket" "my_s3_bucket" { bucket = "my-tf-bucket" tags = { Name = "My bucket" Environment = "Dev" } }
O código é facilmente compreensível. Pode encontrar mais informações na documentação do Terraform.
Como já mencionado, o AWS CDK permite definir recursos usando linguagens de programação. Abaixo está um exemplo de código AWS CDK para criar um bucket S3:
import * as cdk from '@aws-cdk/core'; import * as s3 from '@aws-cdk/aws-s3'; export class BucketStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new s3.Bucket(this, 'MyFirstBucket', { bucketName: 'my-first-bucket', }); } }
O código do Terraform pode parecer um pouco mais organizado do que o CDK, mas ambos são simples. Para projetos menores, tanto o Terraform quanto o CDK são boas opções em termos de linguagem e facilidade de uso.
No entanto, ao escolher uma ferramenta IaC para um projeto grande, o Terraform tem uma desvantagem. Apesar de ser simples, é uma linguagem nova, o que exige formação dos programadores. A manipulação de dados no Terraform não é tão direta como noutras linguagens de programação. Iterar listas e objetos e transformar valores pode ser complexo, especialmente para iniciantes.
Em termos de facilidade de uso, o AWS CDK é preferível. Ao usar o Terraform, algumas vezes tive que recorrer a soluções alternativas ou scripts complexos. A facilidade de manipulação de dados nas linguagens do AWS CDK é uma vantagem significativa.
#2. Abrangência
O Terraform é uma ferramenta IaC multi-cloud, o que significa que pode ser usado com vários fornecedores de nuvem, como Azure ou GCP. É uma excelente opção para implantações em várias nuvens.
Já aconteceram casos de plataformas globais caírem devido a problemas em serviços de um determinado provedor. Por isso, ter mais do que um provedor de nuvem para as aplicações é uma decisão sensata.
O AWS CDK é uma oferta da AWS para IaC, estando limitado à sua nuvem. Apesar do poder e maturidade do CDK, o seu escopo restringe-se à AWS.
Neste ponto, o Terraform claramente ganha, já que permite que os desenvolvedores utilizem uma única ferramenta para diferentes plataformas de nuvem.
#3. Desempenho
O desempenho geralmente não é o fator mais importante na escolha de uma ferramenta IaC, mas pode ser relevante em projetos de grande escala. O Terraform utiliza o AWS SDK para implementar recursos, enquanto o código CDK é primeiro transformado em templates CloudFormation.
Em geral, o Terraform apresenta um desempenho um pouco mais rápido, devido ao tempo que o CDK leva a converter o código para o formato CloudFormation.
#4. Modularidade
Tanto o Terraform como o AWS CDK suportam a criação de módulos. O Terraform oferece suporte nativo a módulos, podendo criar e hospedar os seus próprios módulos num registo privado, ou utilizar módulos públicos.
No AWS CDK, é possível criar funções e classes reutilizáveis, que podem ser partilhadas dentro da organização. Esta é uma vantagem do AWS CDK, pois a outra ferramenta IaC da AWS, o CloudFormation, não permite criar e reutilizar código da mesma forma. É possível usar pilhas aninhadas no CloudFormation, mas o AWS CDK oferece uma solução mais adequada.
Em resumo, ambas as ferramentas são semelhantes neste aspeto.
#5. Controlo e Governança
O acesso ao console AWS é controlado pelo IAM (Identity Management Service). É possível utilizar políticas IAM com o AWS CDK e o Terraform para permitir ou negar determinadas ações. O IAM possibilita o controlo detalhado das ações que podem ser executadas.
Além do IAM, o Terraform oferece o Sentinel, uma estrutura para políticas como código. O Sentinel permite a criação de políticas detalhadas para controlar ações através do Terraform.
Conclusão
Uma vez que o AWS CDK utiliza o CloudFormation internamente, sugiro a leitura do artigo CloudFormation vs. Terraform, para uma melhor compreensão das diferenças entre o AWS CDK e o Terraform.
De um modo geral, o AWS CDK e o Terraform são ferramentas avançadas e eficazes. O Terraform apresenta uma pequena desvantagem na manipulação de dados, mas, com a prática, torna-se mais fácil usar soluções alternativas e transformações de dados. Para operações em várias nuvens, o Terraform é a opção mais indicada. No entanto, para projetos exclusivamente na AWS, o AWS CDK é uma alternativa excelente.