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.
últimas postagens
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.
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.
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.
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.