Esta es la guía para AWS CDK desarrolladores de la versión 2. 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.
En este ejemplo, le mostramos cómo crear un AWS Fargate servicio que se ejecute en un clúster de Amazon Elastic Container Service (Amazon ECS) encabezado por un Application Load Balancer con acceso a Internet a partir de una imagen de Amazon ECR.
Amazon ECS es un servicio de administración de contenedores rápido y altamente escalable que facilita su ejecución, detención y administración Docker contenedores en un clúster. Puede alojar el clúster en una infraestructura sin servidor administrada por Amazon ECS. Para ello, lance los servicios o las tareas con el tipo de lanzamiento Fargate. Para tener más control, puede alojar sus tareas en un clúster de instancias de Amazon Elastic Compute Cloud (Amazon EC2) que administra mediante el tipo de EC2 lanzamiento de Amazon.
En este ejemplo, lanzamos algunos servicios mediante el tipo de lanzamiento de Fargate. Si ha utilizado el AWS Management Console para crear un servicio Fargate, sabrá que hay muchos pasos a seguir para realizar esa tarea. AWS tiene varios tutoriales y temas de documentación que le guiarán a través de la creación de un servicio Fargate, entre los que se incluyen:
En este ejemplo se crea un servicio Fargate similar mediante AWS CDK
La construcción de Amazon ECS utilizada en este ejemplo le ayuda a utilizar AWS los servicios al ofrecer las siguientes ventajas:
-
Configura automáticamente un equilibrador de carga.
-
Abre automáticamente un grupo de seguridad para los equilibradores de carga. Esto permite que los equilibradores de carga se comuniquen con las instancias sin tener que crear explícitamente un grupo de seguridad.
-
Ordena automáticamente la dependencia entre el servicio y el equilibrador de carga asociado a un grupo objetivo, donde el AWS CDK impone el orden correcto de creación del oyente antes de crear una instancia.
-
Configura automáticamente los datos de usuario en grupos que se escalan automáticamente. Esto crea la configuración correcta a la que asociar un clúster AMIs.
-
Valida anticipadamente las combinaciones de parámetros. Esto expone AWS CloudFormation los problemas antes y, por lo tanto, ahorra tiempo de implementación. Por ejemplo, en función de la tarea, es fácil configurar incorrectamente los ajustes de memoria. Anteriormente, no se producía ningún error hasta que implementábamos nuestra aplicación. Pero ahora AWS CDK pueden detectar un error de configuración y emitir un error cuando sintetizamos nuestra aplicación.
-
Agrega automáticamente permisos para Amazon Elastic Container Registry (Amazon ECR) si utilizamos una imagen de Amazon ECR.
-
Escala automáticamente. AWS CDK Proporciona un método para que podamos escalar automáticamente las instancias cuando usamos un EC2 clúster de Amazon. Esto ocurre automáticamente cuando utilizamos una instancia en un clúster de Fargate.
Además, AWS CDK evita que se elimine una instancia cuando el escalado automático intenta detener una instancia, pero una tarea se está ejecutando o está programada en esa instancia.
Antes, teníamos que crear una función de Lambda para disponer de esta funcionalidad.
-
Proporciona soporte de activos para que podamos implementar una fuente desde nuestra máquina en Amazon ECS en un solo paso. Anteriormente, para utilizar una fuente de aplicación, teníamos que realizar varios pasos manuales, como subir a Amazon ECR y crear un Docker imagen.
importante
Las ApplicationLoadBalancedFargateService
construcciones que usaremos incluyen numerosos AWS
componentes, algunos de los cuales tienen costos no triviales si los dejamos aprovisionados en nuestra AWS cuenta, incluso si no los usamos. Asegúrese de limpiar (cdk destroy) si sigue este ejemplo.
Crear un proyecto CDK
Empezamos por crear un proyecto CDK. Este es un directorio que almacena nuestro AWS CDK código, incluida nuestra aplicación CDK.
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language typescript
A continuación, ejecutamos la aplicación y confirmamos que cree una pila vacía.
cdk synth
Crear un servicio de Fargate
Existen dos formas diferentes de ejecutar nuestras tareas de contenedores con Amazon ECS:
-
Usar el tipo de lanzamiento de
Fargate
, en el que Amazon ECS administra por nosotros las máquinas físicas en las que se ejecutan nuestros contenedores. -
Usar el tipo de lanzamiento de
EC2
, en el que nos encargamos de la administración, por ejemplo, especificando el escalado automático.
Para este ejemplo, crearemos un servicio Fargate que se ejecute en un clúster de Amazon ECS, presentado por un Equilibrador de carga de aplicación con acceso a Internet.
Añadimos las siguientes importaciones del módulo AWS Construct Library a nuestro archivo de pila:
Archivo: lib/my_ecs_construct-stack.ts
import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as ecs from "aws-cdk-lib/aws-ecs";
import * as ecs_patterns from "aws-cdk-lib/aws-ecs-patterns";
Dentro de nuestra pila, agregamos el siguiente código:
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 true
});
A continuación, validamos nuestro código ejecutando lo siguiente para sintetizar nuestra pila:
cdk synth
La pila consta de cientos de líneas, por lo que no la mostraremos aquí. La pila debe contener una instancia predeterminada, una subred privada y una subred pública para las tres zonas de disponibilidad y un grupo de seguridad.
Para implementar la pila, ejecutamos lo siguiente:
cdk deploy
AWS CloudFormation muestra información sobre las docenas de pasos que lleva a cabo para implementar nuestra aplicación.
Una vez completada la implementación, hemos creado correctamente un servicio Amazon ECS con tecnología Fargate para ejecutar un Docker imagen.
Limpieza
Como práctica recomendada de mantenimiento general y para minimizar los costos innecesarios, eliminamos nuestra pila una vez finalizada:
cdk destroy