Descripción de las herramientas de IaC: AWS CDK frente a Terraform

AWS CDK y Terraform: ¿no está seguro de cuál elegir? Este artículo le ayudará a tomar una decisión informada.

El Cloud Computing ha revolucionado el mundo de la información y la tecnología. Desde la forma en que implementamos y mantenemos las aplicaciones hasta las prácticas de desarrollo, todo se ha visto muy afectado por la computación en la nube. Todas las aplicaciones nuevas se desarrollan para ser nativas de la nube y compatibles con los servicios en la nube.

Cloud Computing nos ayuda a desarrollar arquitecturas altamente disponibles, escalables y eficientes, lo que hace que los servicios en la nube sean cada vez más demandados. Con este auge de la computación en la nube surge la necesidad de mantener la infraestructura como un código. Mantener los recursos de la nube manualmente a través de la consola puede ser una tarea compleja que puede ser muy difícil de rastrear.

La infraestructura como código, también conocida como IAC o IAAC, resuelve este problema. Al usar IAC, podemos definir nuestros recursos como código y usar este código para aprovisionar servicios en la nube. El uso de la infraestructura como código permite que varios desarrolladores colaboren en la infraestructura y realicen un seguimiento de los cambios realizados por los desarrolladores.

Infraestructura como código en AWS

AWS es el proveedor de nube más grande y más utilizado a nivel mundial. Tiene su propia herramienta IAC, AWS CloudFormation o AWS CDK, y también permite que herramientas IAC de terceros como Terraform aprovisionen recursos. Al elegir las herramientas de IAC para AWS, Terraform, una herramienta de terceros, es una sólida competencia para las herramientas administradas por AWS, AWS CloudFormation y AWS CDK.

Con tantas opciones y características que ofrece cada una de estas herramientas, elegir la herramienta IAC correcta puede ser un desafío. En este artículo, discutiremos la diferencia entre AWS CDK y Terraform. AWS CDK utiliza Cloudformation internamente, por lo que para obtener una visión más profunda de Cloudformation y Terraform, consulte el artículo relacionado, Comprensión de las herramientas de IAC: CloudFormation vs. Terraform.

Terraformar

Terraform es una infraestructura de código abierto como herramienta de código desarrollada inicialmente por Hashicorp. Es una herramienta altamente precisa y madura que admite no solo AWS, sino también otros proveedores de la nube. Terraform es compatible con todos los servicios de AWS, y la comunidad de desarrollo se da cuenta rápidamente de cualquier característica nueva que AWS agregue a sus servicios. Nos permite escribir código en lenguaje desarrollado por Hashicorp (HCL). HCL es un lenguaje similar a JSON para definir recursos de infraestructura.

CDK de AWS

AWS CDK es un contenedor de AWS CloudFormation. Para comprender el funcionamiento de AWS CDK, debe saber un poco sobre AWS CloudFormation. AWS CloudFormation es una herramienta administrada por AWS que nos permite definir la infraestructura de AWS en formato YML o JSON. Aunque leer JSON y YML es fácil, no son lenguajes de programación reales. No hay soporte nativo para bucles y funciones, lo que hace que el mantenimiento de grandes infraestructuras sea cada vez más difícil. Aquí es donde entra AWS CDK.

AWS CDK es un contenedor de AWS CloudFromation que le permite utilizar lenguajes de programación familiares como JAVA o Python para aprovisionar su infraestructura. Esto facilita la escritura y el mantenimiento del código.

Terraform frente a AWS CDK: diferencias

#1. Idioma y Facilidad de uso

El idioma y la facilidad de uso son vitales para comprender la diferencia entre AWS CDK y Terraform.

Hablemos primero de Terraform. Terraform utiliza un lenguaje similar a JSON para definir recursos y otros datos, HCL o HashiCorp Configuration Language. Es bastante sencillo y la documentación es fácil de entender y seguir, incluso para principiantes.

Veamos un código para crear un depósito S3.

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

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

El código es bastante simple de leer y puede ver otros parámetros que admite este recurso en el Documentación de Terraform.

Como se mencionó anteriormente, AWS CDK es un contenedor de CloudFormation que nos permite definir nuestros recursos en lenguajes de programación. Veamos un código de AWS CDK para crear un depósito 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',
    });
 }
}

El código de Terraform puede verse un poco más ordenado que el CDK, pero tanto los códigos de Terraform como los de CDK son bastante simples. Si planea usar IAC para un proyecto pequeño, tanto Terraform como CDK son excelentes opciones en lo que respecta al lenguaje y la facilidad de uso.

Sin embargo, al elegir la herramienta IAC adecuada para un gran proyecto con muchos desarrolladores, Terraform tiene un inconveniente. Tan simple como es Terraform, es un lenguaje nuevo, y necesitará capacitar a sus desarrolladores en un lenguaje completamente nuevo que no es similar a los otros lenguajes de programación en uso. Más importante aún, la manipulación de datos en Terraform no es tan simple como en otros lenguajes de programación. Por ejemplo, iterar a través de listas y objetos y transformar valores no es tan simple, especialmente para los principiantes.

Personalmente, preferiría AWS CDK sobre Terraform si se considera la facilidad de uso. Al usar Terraform, ha habido momentos en los que he tenido que usar soluciones alternativas o scripts complicados para obtener los resultados deseados. El control que tenemos sobre los datos y la capacidad de manipular fácilmente los datos en los lenguajes de AWS CDK es una gran victoria para AWS CDK.

#2. Alcance

Terraform es una herramienta IAC multinube, lo que significa que no solo puede usar Terraform con AWS, sino también con otros proveedores de nube como Azure o GCP. Terraform es una excelente herramienta para crear implementaciones de múltiples nubes y tener cualquier número de proveedores de nube para su aplicación.

Ha habido momentos en que las plataformas globales ampliamente utilizadas dejaron de funcionar debido a un problema en los servicios del proveedor de la nube. En la actualidad, es una decisión inteligente tener más de un proveedor de nube para sus aplicaciones.

AWS CDK es una oferta de AWS para IAC. Por poderoso y maduro que sea el CDK, está limitado solo a la nube de AWS.

Al considerar el alcance de las herramientas de IAC, Terraform es el ganador obvio de los dos. Tiene mucho sentido que sus desarrolladores usen una sola herramienta para todas las plataformas en la nube.

#3. Actuación

El rendimiento no suele ser el criterio más importante a la hora de elegir la herramienta IAC adecuada, pero puede ser importante en proyectos grandes. Terraform implementa recursos mediante el SDK de AWS, mientras que el código del CDK se convierte primero en plantillas de CloudFormation y luego se aplica.

Terraform funcionaría un poco más rápido que AWS CDK, especialmente debido al tiempo que tarda CDK en convertir el código a la plantilla de CloudFormation.

#4. Modularidad

Tanto Terraform como AWS CDK se pueden usar para crear módulos. Terraform tiene soporte nativo para módulos. Puede crear sus propios módulos y alojarlos en un registro de módulos privado para su uso dentro de su organización. Terraform también tiene un registro de módulos públicos para hospedar y usar módulos públicos.

En AWS CDK, puede crear funciones y clases reutilizables y compartir este código dentro de su organización para lograr el mismo resultado. Esta es una gran ventaja en AWS CDK como la otra herramienta de AWS IAC: CloudFormation no le permite crear y reutilizar código como módulos. Puede usar pilas anidadas en CloudFormation para lograr este requisito, pero usar AWS CDK es una alternativa mucho más adecuada.

Con todo, ambas herramientas son similares en este aspecto.

#5. Control y Gobernanza

En última instancia, todo el acceso a la consola de AWS está controlado por IAM, el servicio de administración de identidades de AWS. Puede utilizar políticas de IAM con AWS CDK y Terraform para permitir y denegar determinadas acciones. IAM le permite tener un control detallado sobre las acciones que se pueden realizar en su cuenta.

Además de usar IAM para controlar el acceso a los recursos de la cuenta, Terraform ofrece una política como marco de código, Sentinel. Sentinel le permite escribir políticas detalladas para controlar correctamente las acciones de un usuario a través de Terraform.

Conclusión

Dado que AWS CDK utiliza internamente CloudFormation, le sugiero que consulte el artículo CloudFormation vs. Terraform para comprender mejor las diferencias entre AWS CDK y Terraform.

En general, tanto AWS CDK como Terraform son herramientas maduras y poderosas. Terraform tiene una ligera desventaja cuando se trata de manipulación de datos. Sin embargo, en mi experiencia, una vez que te sientes más cómodo escribiendo Terraform, usar soluciones alternativas y realizar transformaciones de datos se vuelve más fácil. Para operaciones de múltiples nubes, Terraform es una opción obvia; sin embargo, si está buscando utilizar AWS como su proveedor de nube, AWS CDK es una excelente alternativa.