Visión general de AWS CDK, ejemplos en TypeScript y Python y rendimiento
Herramienta útil para la ingeniería de plataforma en AWS
El AWS Cloud Development Kit (AWS CDK) es un marco que permite definir y provisionar infraestructura en la nube utilizando lenguajes de programación familiares como TypeScript, Python, Java y Go.
Este marco de código abierto simplifica la infraestructura como código al permitirle modelar recursos de AWS con construcciones de alto nivel, y luego sintetiza estos en plantillas de CloudFormation para su despliegue. Esto hace más fácil desarrollar, desplegar e iterar sobre su infraestructura de AWS de una manera más mantenible y testeable.
Aquí hay algunos ejemplos cortos de fragmentos de código para AWS CDK en TypeScript y Python:
Ejemplo en TypeScript:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY
});
}
}
Este ejemplo crea un bucket de S3 con versionado habilitado.
Ejemplo en Python:
from aws_cdk import (
Stack,
aws_s3 as s3,
RemovalPolicy
)
from constructs import Construct
class MyStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
s3.Bucket(self, "MyFirstBucket",
versioned=True,
removal_policy=RemovalPolicy.DESTROY)
Esto crea de manera similar un bucket de S3 con versionado y una política de eliminación para eliminarlo al eliminar la pila.
Estos ejemplos ilustran cómo AWS CDK utiliza construcciones, clases y objetos familiares del lenguaje para definir infraestructura, lo cual luego puede desplegarse fácilmente mediante cdk deploy
.
AWS CDK admite otros recursos y patrones de infraestructura más complejos además de estos ejemplos simples. También se integra bien con IDEs, marcos de pruebas y pipelines de CI/CD para mejorar la experiencia del desarrollador y la automatización.
TypeScript vs Python para AWS CDK
TypeScript y Python son ambos lenguajes completamente compatibles para el desarrollo y despliegue con AWS CDK, pero tienen algunas diferencias notables:
TypeScript
- AWS CDK se implementó originalmente en TypeScript, lo que proporciona verificación de tipos nativa, interfaces y tipado estático fuerte.
- TypeScript se beneficia de la documentación oficial más completa, ejemplos y soporte de la comunidad. Esto hace más fácil encontrar recursos y resolver problemas.
- IDEs como Visual Studio Code ofrecen un excelente soporte para TypeScript con completado inteligente, resaltado de errores y refactorización.
- Debido a que CDK en sí mismo se escribe en TypeScript, su uso tiende a sentirse más “nativo” y suave con menos abstracciones.
- El tipado estático de TypeScript detecta muchos problemas temprano en el momento de la compilación, evitando algunos errores en tiempo de ejecución.
- Los desarrolladores que desean una seguridad de tipo estricta y recursos de comunidad más amplios pueden preferir TypeScript para CDK.
Python
- El soporte de Python es estable y totalmente funcional, pero es un enlace sobre el núcleo de TypeScript mediante jsii, que depende de tipado dinámico con anotaciones de tipo opcionales.
- Python utiliza convenciones de nomenclatura snake_case en lugar del camelCase de TypeScript, por lo que se necesitan ajustes menores de sintaxis al traducir ejemplos.
- Python tiene menos ejemplos oficiales y recursos de la comunidad, lo que puede hacer más difícil aprender y depurar para principiantes.
- El tipado dinámico significa que algunos errores de tipo aparecen solo en tiempo de ejecución en lugar de en tiempo de compilación, lo que puede causar detección de errores retrasada. Sin embargo, los módulos de Python tienen anotaciones de tipo que pueden usarse con IDEs o herramientas de análisis estático como MyPy.
- Los desarrolladores de Python valoran herramientas familiares como entornos virtuales (virtualenv) y pip para la gestión de paquetes.
- Python es preferido si su equipo o proyecto ya está basado en Python, aunque la documentación y el soporte de la comunidad son algo más limitados.
Desarrollo y despliegue
- El Toolkit de CDK (
cdk deploy
) funciona de la misma manera independientemente del lenguaje elegido, ya que CDK sintetiza plantillas de AWS CloudFormation en segundo plano. - Ambos lenguajes admiten la totalidad de los recursos de AWS y construcciones.
- Elegir entre ellos suele depender de la expertise del equipo en el lenguaje, el soporte de la comunidad disponible y la preferencia por el tipado estático frente al dinámico.
Resumen
- TypeScript ofrece la experiencia más madura y pulida con documentación más rica, tipado fuerte y integración nativa, ya que CDK se construye sobre él.
- Python ofrece funcionalidad sólida y facilidad de uso para los programadores de Python, pero con menos ejemplos y algunos desafíos adicionales debido al tipado dinámico y la traducción entre idiomas.
- Si desea desarrollo rápido con recursos extensos, TypeScript suele recomendarse. Si su proyecto o equipo está centrado en Python, Python sigue siendo una buena opción totalmente compatible, a pesar de algunos pequeños compromisos.
Esto coincide con los comentarios de la comunidad y la documentación oficial de AWS que describe sus respectivas ventajas y desventajas para el desarrollo y despliegue con AWS CDK. Ambos lenguajes pueden usarse eficazmente; su elección depende de sus prioridades en cuanto al rigor del tipado, familiaridad con el lenguaje y soporte del ecosistema.
Lenguajes oficialmente compatibles con AWS CDK
El AWS Cloud Development Kit (AWS CDK) admite oficialmente los siguientes lenguajes de programación:
- TypeScript
- JavaScript
- Python
- Java
- C# (.NET)
- Go
Todos estos lenguajes son compatibles de primer nivel, con el CDK desarrollado originalmente en TypeScript y luego extendido a otros utilizando una herramienta llamada JSII, que genera enlaces de lenguaje para hacer que el CDK se sienta natural en la sintaxis y convenciones de cada lenguaje.
En cuanto a qué lenguaje es mejor, depende de sus preferencias y contexto:
-
TypeScript suele recomendarse como la mejor opción ya que AWS CDK se desarrolló originalmente en TypeScript. Tiene el ecosistema más maduro, la documentación oficial más rica y ejemplos de la comunidad. Su tipado estático y soporte de IDE mejoran la productividad del desarrollador y detectan muchos errores temprano.
-
Python es una alternativa muy popular, especialmente para quienes provienen de un entorno de Python. Tiene una sintaxis más limpia que hace que sea más intuitivo para principiantes, aunque su tipado dinámico significa que algunos errores se detectan solo en tiempo de ejecución. La disponibilidad de herramientas y ejemplos es sólida, aunque no tan extensa como la de TypeScript.
-
Java, C# y Go están completamente compatibles pero generalmente tienen menos ejemplos de la comunidad y documentación algo menos extensa en comparación con TypeScript y Python. Son adecuados si su equipo es experto en esos lenguajes.
En resumen:
- TypeScript ofrece la experiencia más nativa, pulida y ampliamente compatible para el desarrollo con AWS CDK.
- Python proporciona una sintaxis más simple y una experiencia más amigable para principiantes con soporte completo de CDK, aunque con menos pulido en herramientas.
- Java, C# y Go son buenas opciones si se ajustan a sus habilidades existentes o requisitos del proyecto, pero pueden requerir más esfuerzo para encontrar recursos de aprendizaje.
Su elección debe considerar la expertise del equipo en el lenguaje, la disponibilidad de ejemplos y soporte, y si prefiere el tipado estático (TypeScript, Java, C#) o dinámico (Python). Tanto TypeScript como Python tienden a ser las más populares y recomendadas para proyectos de AWS CDK.
Rendimiento de lenguajes en el desarrollo y despliegue con AWS CDK
Cuando se considera el mejor rendimiento en el desarrollo y despliegue con AWS CDK, es importante aclarar que la funcionalidad del núcleo de AWS CDK en sí misma —la síntesis de infraestructura como código en plantillas de CloudFormation y el despliegue— es indiferente al lenguaje. Todos los lenguajes compatibles (TypeScript, Python, Java, C#, Go) se compilan a las mismas plantillas de AWS CloudFormation subyacentes, por lo que el rendimiento de despliegue no varía según el lenguaje.
Sin embargo, desde la perspectiva del rendimiento de desarrollo —es decir, eficiencia, detección de errores, herramientas y facilidad de codificación— TypeScript se considera generalmente el mejor entorno de lenguaje para el desarrollo con AWS CDK:
- TypeScript es el lenguaje nativo de AWS CDK, desarrollado originalmente en él. Esto resulta en la herramienta más fluida, el tipado estático más fuerte y la detección de errores más temprana durante el desarrollo, lo que hace que la codificación sea más rápida y menos propensa a errores.
- La documentación más rica, los ejemplos de la comunidad y el soporte de IDE (como completado inteligente y refactorización en Visual Studio Code) existen para TypeScript, acelerando la productividad del desarrollador.
- El código de TypeScript detecta muchos errores en tiempo de compilación, evitando sorpresas en tiempo de ejecución y problemas de despliegue, lo que acelera el desarrollo iterativo y la depuración.
Python es una muy buena segunda opción en cuanto a experiencia de desarrollo, favorecido por su sintaxis más simple y popularidad en DevOps. Sin embargo, debido a su tipado dinámico y ser un enlace de lenguaje JSII sobre el núcleo TypeScript, algunos errores aparecen solo en tiempo de ejecución, lo que puede ralentizar ligeramente la depuración y el desarrollo.
Otros lenguajes como Java, C# y Go están compatibles pero generalmente tienen menos recursos, herramientas menos maduras y, por lo tanto, pueden ofrecer menos velocidad de desarrollo.
Resumen:
Aspecto | TypeScript | Python | Otros (Java, C#, Go) |
---|---|---|---|
Implementación nativa de CDK | Sí | No | No |
Tipado estático | Fuerte (en tiempo de compilación) | Dinámico (en tiempo de ejecución) | Fuerte (en tiempo de compilación) |
Soporte de herramientas e IDE | Mejor (VS Code, Autocomplete) | Bueno, pero menos maduro | Menos maduro |
Recursos de la comunidad/examples | Más abundantes | Bueno, pero menos que TS | Limitados |
Velocidad de desarrollo | Rápida, menos propensa a errores | Más lenta debido al tipado dinámico | Generalmente más lenta |
Rendimiento de despliegue | Igual (salida de CloudFormation) | Igual | Igual |
Por lo tanto, TypeScript ofrece el mejor rendimiento de desarrollo con AWS CDK, haciendo que la codificación de infraestructura sea más rápida, segura y eficiente. El rendimiento de despliegue es equivalente en todos los lenguajes compatibles ya que producen las mismas plantillas de CloudFormation.
Esto coincide con la guía oficial de AWS y la experiencia amplia de la comunidad que destacan el soporte nativo y optimizado de TypeScript para el desarrollo con AWS CDK. Python sigue siendo una alternativa fuerte, especialmente si su equipo lo prefiere o valora la simplicidad de la sintaxis. Otros lenguajes son viables pero generalmente menos óptimos para un desarrollo rápido.
Enlaces relacionados con AWS CDK
- https://es.wikipedia.org/wiki/AWS_Cloud_Development_Kit
- https://github.com/aws/aws-cdk
- https://github.com/aws-samples/aws-cdk-examples
- https://docs.aws.amazon.com/cdk/v2/guide/languages.html
- https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/