AWS CDK vs. Terraform: Qual ferramenta IaC escolher em 2024?

Foto do autor

By luis

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.