¿Qué es AWS CDK? - AWS Kit Cloud Development Kit (AWS CDK) v2

Esta es la guía para desarrolladores de AWS CDK v2. La primera versión del CDK pasó a la etapa de mantenimiento el 1.° de junio de 2022 y no cuenta con soporte desde el 1.° de junio de 2023.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

¿Qué es AWS CDK?

AWS Cloud Development Kit (AWS CDK) es un marco de desarrollo de software de código abierto para definir la infraestructura de nube en código y aprovisionarla mediante AWS CloudFormation.

AWS CDK consta de dos partes principales:

  • Biblioteca de constructos de AWS: una colección de piezas de código modulares y reutilizables pre-escritas, llamadas constructos, que usted puede usar, modificar e integrar para desarrollar su infraestructura rápidamente. El objetivo de la Biblioteca de constructos de AWS CDK es reducir la complejidad necesaria para definir e integrar los servicios de AWS juntos a la hora de crear aplicaciones en AWS.

  • Kit de herramientas de AWS CDK: herramientas que puede usar para administrar sus aplicaciones de CDK e interactuar con ellas, como realizar síntesis o implementaciones. El kit de herramientas de CDK consta de una herramienta de línea de comandos (CLI de CDK) y una biblioteca programática (Biblioteca del kit de herramientas de CDK).

El AWS CDK es compatible con TypeScript, JavaScript, Python, Java, C#/.Net y Go. Puede usar cualquiera de estos lenguajes de programación compatibles para definir componentes de nube reutilizables conocidos como constructos. Los puede agrupar en pilas y aplicaciones. Luego, implementa sus aplicaciones de CDK en AWS CloudFormation para aprovisionar o actualizar sus recursos.

Descripción general de la aplicación y el proceso de CDK

Ventajas de CDK AWS

Use el AWS CDK para desarrollar aplicaciones fiables, escalables y rentables en la nube con la considerable potencia expresiva de un lenguaje de programación. Este enfoque ofrece muchos beneficios, entre los que se incluyen los siguientes:

Desarrollar y administrar su infraestructura como código (IaC)

Practicar la infraestructura como código para crear, implementar y mantener la infraestructura de forma programática, descriptiva y declarativa. Con IaC, se trata la infraestructura de la misma manera que los desarrolladores tratan el código. Esto da como resultado un enfoque escalable y estructurado para administrar la infraestructura. Para obtener más información sobre la IaC, consulte Infraestructura como código en el documento técnico de Introducción a DevOps en AWS.

Con el AWS CDK, puede colocar la infraestructura, el código de la aplicación y la configuración en un solo lugar, lo que garantiza que cuenta con un sistema completo que se pueda implementar en la nube en cada etapa. Emplee las prácticas recomendadas de ingeniería de software, como revisiones de código, pruebas unitarias y control de código fuente, para que su infraestructura sea más sólida.

Defina su infraestructura en la nube mediante lenguajes de programación de uso general

Con el AWS CDK, puede utilizar cualquiera de los siguientes lenguajes de programación para definir su infraestructura en la nube: TypeScript, JavaScript, Python, Java, C#/.Net, and Go. Elija el lenguaje que prefiera y utilice elementos de programación como parámetros, condicionales, bucles, composición y herencia para definir el resultado deseado de su infraestructura.

Utilice el mismo lenguaje de programación para definir la infraestructura y la lógica de la aplicación.

Disfrute de las ventajas de desarrollar una infraestructura en el IDE (entorno de desarrollo integrado) que prefiera, como el resaltado de la sintaxis y la finalización inteligente del código.

Fragmento de código que muestra la configuración de CDK para el clúster de ECS con la configuración de VPC y servicio de Fargate.
Implemente la infraestructura a través de AWS CloudFormation

AWSCDK se integra con AWS CloudFormation para implementar y aprovisionar su infraestructura en AWS. AWS CloudFormation es un servicio de AWS administrado que ofrece una amplia compatibilidad de configuraciones de recursos y propiedades para el aprovisionamiento de servicios en AWS. Con el AWS CloudFormation, puede realizar implementaciones de infraestructura de forma predecible y repetida, con la posibilidad de revertirlos en caso de error. Si ya conoce AWS CloudFormation, no necesita aprender a usar un nuevo servicio de administración de IaC cuando comience con AWS CDK.

Comience a desarrollar su aplicación rápidamente con constructos

Desarrolle más rápido utilizando y compartiendo componentes reutilizables denominados componentes constructos. Utilice constructos de bajo nivel para definir los recursos de AWS CloudFormation individuales y sus propiedades. Utilice estructuras de alto nivel para definir rápidamente los componentes más grandes de su aplicación, con valores predeterminados razonables y seguros para sus recursos AWS y defina más infraestructura con menos código.

Cree sus propios constructos personalizados para sus casos de uso específicos y compártalos en toda la organización o incluso con el público.

Ejemplo del AWS CDK

A continuación, se muestra un ejemplo del uso de la Biblioteca de constructos de AWS CDK para crear un servicio de Amazon Elastic Container Service (Amazon ECS) con un tipo lanzamiento de AWS Fargate. Para obtener más información sobre este ejemplo, consulte Ejemplo: creación de un servicio de AWS Fargate mediante el AWS CDK.

TypeScript
export class MyEcsConstructStack extends Stack { constructor(scope: App, id: string, props?: StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, "MyVpc", { maxAzs: 3 // Default is all AZs in region }); const cluster = new ecs.Cluster(this, "MyCluster", { vpc: vpc }); // Create a load-balanced Fargate service and make it public new ecs_patterns.ApplicationLoadBalancedFargateService(this, "MyFargateService", { cluster: cluster, // Required cpu: 512, // Default is 256 desiredCount: 6, // Default is 1 taskImageOptions: { image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample") }, memoryLimitMiB: 2048, // Default is 512 publicLoadBalancer: true // Default is false }); } }
JavaScript
class MyEcsConstructStack extends Stack { constructor(scope, id, props) { super(scope, id, props); const vpc = new ec2.Vpc(this, "MyVpc", { maxAzs: 3 // Default is all AZs in region }); const cluster = new ecs.Cluster(this, "MyCluster", { vpc: vpc }); // Create a load-balanced Fargate service and make it public new ecs_patterns.ApplicationLoadBalancedFargateService(this, "MyFargateService", { cluster: cluster, // Required cpu: 512, // Default is 256 desiredCount: 6, // Default is 1 taskImageOptions: { image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample") }, memoryLimitMiB: 2048, // Default is 512 publicLoadBalancer: true // Default is false }); } } module.exports = { MyEcsConstructStack }
Python
class MyEcsConstructStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) vpc = ec2.Vpc(self, "MyVpc", max_azs=3) # default is all AZs in region cluster = ecs.Cluster(self, "MyCluster", vpc=vpc) ecs_patterns.ApplicationLoadBalancedFargateService(self, "MyFargateService", cluster=cluster, # Required cpu=512, # Default is 256 desired_count=6, # Default is 1 task_image_options=ecs_patterns.ApplicationLoadBalancedTaskImageOptions( image=ecs.ContainerImage.from_registry("amazon/amazon-ecs-sample")), memory_limit_mib=2048, # Default is 512 public_load_balancer=True) # Default is False
Java
public class MyEcsConstructStack extends Stack { public MyEcsConstructStack(final Construct scope, final String id) { this(scope, id, null); } public MyEcsConstructStack(final Construct scope, final String id, StackProps props) { super(scope, id, props); Vpc vpc = Vpc.Builder.create(this, "MyVpc").maxAzs(3).build(); Cluster cluster = Cluster.Builder.create(this, "MyCluster") .vpc(vpc).build(); ApplicationLoadBalancedFargateService.Builder.create(this, "MyFargateService") .cluster(cluster) .cpu(512) .desiredCount(6) .taskImageOptions( ApplicationLoadBalancedTaskImageOptions.builder() .image(ContainerImage .fromRegistry("amazon/amazon-ecs-sample")) .build()).memoryLimitMiB(2048) .publicLoadBalancer(true).build(); } }
C#
public class MyEcsConstructStack : Stack { public MyEcsConstructStack(Construct scope, string id, IStackProps props=null) : base(scope, id, props) { var vpc = new Vpc(this, "MyVpc", new VpcProps { MaxAzs = 3 }); var cluster = new Cluster(this, "MyCluster", new ClusterProps { Vpc = vpc }); new ApplicationLoadBalancedFargateService(this, "MyFargateService", new ApplicationLoadBalancedFargateServiceProps { Cluster = cluster, Cpu = 512, DesiredCount = 6, TaskImageOptions = new ApplicationLoadBalancedTaskImageOptions { Image = ContainerImage.FromRegistry("amazon/amazon-ecs-sample") }, MemoryLimitMiB = 2048, PublicLoadBalancer = true, }); } }
Go
func NewMyEcsConstructStack(scope constructs.Construct, id string, props *MyEcsConstructStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) vpc := awsec2.NewVpc(stack, jsii.String("MyVpc"), &awsec2.VpcProps{ MaxAzs: jsii.Number(3), // Default is all AZs in region }) cluster := awsecs.NewCluster(stack, jsii.String("MyCluster"), &awsecs.ClusterProps{ Vpc: vpc, }) awsecspatterns.NewApplicationLoadBalancedFargateService(stack, jsii.String("MyFargateService"), &awsecspatterns.ApplicationLoadBalancedFargateServiceProps{ Cluster: cluster, // required Cpu: jsii.Number(512), // default is 256 DesiredCount: jsii.Number(5), // default is 1 MemoryLimitMiB: jsii.Number(2048), // Default is 512 TaskImageOptions: &awsecspatterns.ApplicationLoadBalancedTaskImageOptions{ Image: awsecs.ContainerImage_FromRegistry(jsii.String("amazon/amazon-ecs-sample"), nil), }, PublicLoadBalancer: jsii.Bool(true), // Default is false }) return stack }

Esta clase produce una plantilla de más de 500 líneas de AWS CloudFormation. La implementación de la aplicación de AWS CDK produce más de 50 recursos de los siguientes tipos.

Características del AWS CDK

El repositorio GitHub de AWS CDK

Para ver el repositorio GitHub de AWS CDK oficial, consulte aws-cdk. Aquí puede enviar sus problemas, ver nuestra licencia, hacer un seguimiento de las versiones y mucho más.

Como el AWS CDK es de código abierto, el equipo lo alienta a contribuir para que sea una herramienta aún mejor. Para obtener más información, consulte Contribución al AWS Cloud Development Kit (AWS CDK).

Referencia de la API de AWS CDK

La Biblioteca de constructos de AWS CDK proporciona las API para definir su aplicación de CDK y agregar constructos de CDK a la aplicación. Para obtener más información, consulte la Referencia de la API de AWS CDK.

Modelo de programación de constructos

El modelo de programación de constructos (Construct Programming Model, CPM) amplía los conceptos subyacentes de AWS CDK a dominios adicionales. Otras herramientas que utilizan el CPM incluyen lo siguiente:

El Hub de constructos

El Hub de constructos es un registro en línea donde puede encontrar, publicar y compartir bibliotecas de AWS CDK de código abierto.

Pasos a seguir a continuación

Para empezar a utilizar el AWS CDK, consulte Introducción a el AWS CDK.

Más información

Para conocer más sobre AWS CDK, consulte lo siguiente:

Para obtener más información acerca de temas relacionados con AWS CDK, consulte lo siguiente:

  • Conceptos de AWS CloudFormation : dado que el AWS CDK está diseñado para funcionar con AWS CloudFormation, le recomendamos que aprenda y comprenda los conceptos clave de AWS CloudFormation.

  • Glosario de AWS: definiciones de los términos clave utilizados en todas las partes de AWS.

Para obtener más información sobre las herramientas relacionadas con el AWS CDK que se pueden utilizar para simplificar el desarrollo y la implementación de aplicaciones sin servidor, consulte lo siguiente:

  • Modelo de aplicación de AWS sin servidor : una herramienta de código abierto para desarrolladores que simplifica y mejora la experiencia de creación y ejecución de aplicaciones sin servidor en AWS.

  • AWS Chalice : un marco para escribir aplicaciones sin servidor en Python.