Noções básicas sobre ferramentas de IaC: AWS CDK vs. Terraform

AWS CDK e Terraform – não sabe qual escolher? Este artigo irá ajudá-lo a tomar uma decisão informada.

A computação em nuvem revolucionou o mundo da informação e da tecnologia. Desde a forma como implantamos e mantemos aplicativos até as práticas de desenvolvimento, tudo foi altamente impactado pela Cloud Computing. Todos os novos aplicativos são desenvolvidos para serem nativos da nuvem e compatíveis com serviços em nuvem.

A computação em nuvem nos ajuda a desenvolver arquiteturas altamente disponíveis, escaláveis ​​e eficientes, o que torna os serviços em nuvem cada vez mais procurados. Com esse boom na computação em nuvem, surge a necessidade de manter a infraestrutura como um código. Manter recursos de nuvem manualmente por meio do console pode ser uma tarefa complexa que pode ser muito difícil de rastrear.

A infraestrutura como código, também conhecida como IAC ou IAAC, resolve esse problema. Ao usar o IAC, podemos definir nossos recursos como código e usar esse código para provisionar serviços em nuvem. Usar a infraestrutura como um código permite que vários desenvolvedores colaborem na infraestrutura e acompanhem as alterações feitas pelos desenvolvedores.

Infraestrutura como um código na AWS

A AWS é o maior e mais utilizado provedor de nuvem globalmente. Ele tem sua própria ferramenta de IAC, o AWS CloudFormation ou AWS CDK, e também permite que ferramentas de IAC de terceiros, como o Terraform, provisionem recursos. Ao escolher as ferramentas IAC para AWS, o Terraform, uma ferramenta de terceiros, é uma sólida concorrência para as ferramentas gerenciadas pela AWS, AWS CloudFormation e AWS CDK.

Com tantas opções e recursos que cada uma dessas ferramentas oferece, escolher a ferramenta IAC certa pode ser um desafio. Neste artigo, discutiremos a diferença entre o AWS CDK e o Terraform. O AWS CDK usa o Cloudformation internamente, portanto, para obter uma visão mais detalhada do Cloudformation e do Terraform, consulte o artigo relacionado Noções básicas sobre ferramentas de IAC: CloudFormation vs. Terraform.

Terraform

O Terraform é uma ferramenta de infraestrutura como código de código aberto inicialmente desenvolvida pela Hashicorp. É uma ferramenta altamente precisa e madura que suporta não apenas a AWS, mas também outros provedores de nuvem. O Terraform oferece suporte a todos os serviços da AWS, e a comunidade de desenvolvimento rapidamente percebe qualquer novo recurso que a AWS adiciona aos seus serviços. Ele nos permite escrever código na linguagem desenvolvida pela Hashicorp (HCL). HCL é uma linguagem semelhante a JSON para definir recursos de infraestrutura.

  Como adicionar o DNS do Google no seu iPhone

AWS CDK

AWS CDK é um wrapper em torno do AWS CloudFormation. Para entender o funcionamento do AWS CDK, você deve conhecer um pouco sobre o AWS CloudFormation. AWS CloudFormation é uma ferramenta gerenciada pela AWS que nos permite definir a infraestrutura da AWS no formato YML ou JSON. Mesmo que ler JSON e YML seja fácil, eles não são linguagens de programação reais. Não há suporte nativo para loops e funções, o que dificulta cada vez mais a manutenção de grandes infraestruturas. É aí que entra o AWS CDK.

O AWS CDK é um wrapper em torno do AWS CloudFromation que permite usar linguagens de programação familiares como JAVA ou Python para provisionar sua infraestrutura. Isso torna mais fácil escrever e manter o código.

Terraform vs. AWS CDK: diferenças

#1. Idioma e facilidade de uso

A linguagem e a facilidade de uso são vitais para entender a diferença entre o AWS CDK e o Terraform.

Vamos falar primeiro sobre o Terraform. O Terraform usa uma linguagem semelhante a JSON para definir recursos e outros dados, a HCL ou a linguagem de configuração HashiCorp. É bastante simples e a documentação é fácil de entender e seguir, mesmo para iniciantes.

Vamos ver um código para criar um bucket do S3.

resource "aws_s3_bucket" "my_s3_bucket" {
  bucket = "my-tf-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

O código é bastante simples de ler, e você pode ver outros parâmetros que este recurso suporta no Documentação do Terraform.

Como mencionado anteriormente, o AWS CDK é um wrapper do CloudFormation que nos permite definir nossos recursos em linguagens de programação. Vamos ver um código AWS CDK para criar um bucket do 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 os códigos do Terraform e do CDK são bem simples. Se você planeja usar o IAC para um projeto pequeno, tanto o Terraform quanto o CDK são ótimas opções em termos de linguagem e facilidade de uso.

  Como remover dados de localização ao compartilhar fotos no iPhone

No entanto, ao escolher a ferramenta IAC certa para um grande projeto com muitos desenvolvedores, o Terraform tem uma desvantagem. Por mais simples que o Terraform seja, é uma nova linguagem, e você precisará treinar seus desenvolvedores em uma linguagem totalmente nova que não seja semelhante às outras linguagens de programação em uso. Mais importante, a manipulação de dados no Terraform não é tão simples quanto em outras linguagens de programação. Por exemplo, iterar por meio de listas e objetos e transformar valores não é tão simples, especialmente para iniciantes.

Pessoalmente, eu preferiria o AWS CDK ao Terraform se considerar a facilidade de uso. Ao usar o Terraform, houve momentos em que tive que usar soluções alternativas ou scripts complicados para obter os resultados desejados. O controle que temos sobre os dados e a capacidade de manipular dados facilmente nas linguagens do AWS CDK é uma grande vitória para o AWS CDK.

#2. Alcance

O Terraform é uma ferramenta IAC multinuvem, o que significa que você pode não apenas usar o Terraform com AWS, mas também com outros provedores de nuvem, como Azure ou GCP. O Terraform é uma ótima ferramenta para criar implantações em várias nuvens e ter qualquer número de provedores de nuvem para seu aplicativo.

Houve momentos em que plataformas globais amplamente utilizadas caíram devido a um problema nos serviços do provedor de nuvem. Atualmente, é uma decisão inteligente ter mais de um provedor de nuvem para seus aplicativos.

AWS CDK é uma oferta da AWS para IAC. Por mais poderoso e maduro que seja o CDK, ele é limitado apenas à Nuvem AWS.

Ao considerar o escopo das ferramentas IAC, o Terraform é o vencedor óbvio dos dois. Faz muito sentido que seus desenvolvedores usem uma única ferramenta para todas as plataformas de nuvem.

#3. atuação

O desempenho geralmente não é o critério mais importante ao escolher a ferramenta IAC certa, mas pode ser importante em grandes projetos. O Terraform implanta recursos usando o AWS SDK, enquanto o código CDK é primeiro convertido em modelos do CloudFormation e depois aplicado.

  Como aumentar seu sinal Wi-Fi

O Terraform funcionaria um pouco mais rápido que o AWS CDK, principalmente devido ao tempo que o CDK leva para converter o código para o modelo do CloudFormation.

#4. Modularidade

Tanto o Terraform quanto o AWS CDK podem ser usados ​​para criar módulos. O Terraform tem suporte nativo para módulos. Você pode criar seus próprios módulos e hospedá-los em um registro de módulo privado para uso em sua organização. O Terraform também possui um registro de módulo público para hospedagem e uso de módulos públicos.

No AWS CDK, você pode criar funções e classes reutilizáveis ​​e compartilhar esse código em sua organização para obter o mesmo resultado. Essa é uma grande vantagem no AWS CDK como a outra ferramenta AWS IAC – o CloudFormation não permite que você crie e reutilize código como módulos. Você pode usar pilhas aninhadas no CloudFormation para atender a esse requisito, mas usar o AWS CDK é uma alternativa muito mais adequada.

Em suma, ambas as ferramentas são semelhantes neste aspecto.

#5. Controle e Governança

Em última análise, todo o acesso ao Console AWS é controlado pelo IAM, o Identity Management Service da AWS. Você pode usar políticas do IAM com o AWS CDK e o Terraform para permitir e negar determinadas ações. O IAM permite que você tenha controle refinado sobre quais ações podem ser executadas em sua conta.

Além de usar o IAM para controlar o acesso aos recursos da conta, o Terraform oferece uma política como estrutura de código, o Sentinel. O Sentinel permite escrever políticas refinadas para controlar corretamente as ações de um usuário por meio do Terraform.

Conclusão

Como o AWS CDK usa o CloudFormation internamente, sugiro que você leia o artigo CloudFormation vs. Terraform para entender melhor as diferenças entre o AWS CDK e o Terraform.

No geral, o AWS CDK e o Terraform são ferramentas maduras e poderosas. O Terraform tem uma pequena desvantagem quando se trata de manipulação de dados. No entanto, na minha experiência, uma vez que você se sente mais à vontade para escrever o Terraform, fica mais fácil usar soluções alternativas e realizar transformações de dados. Para operações em várias nuvens, o Terraform é uma escolha óbvia; no entanto, se você deseja usar a AWS como seu provedor de nuvem, o AWS CDK é uma excelente alternativa.