Esta es la segunda versión de la Guía para desarrolladores de AWS CDK. 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.
Cree e implemente activos de imagen de contenedores en las aplicaciones de CDK
Al crear activos de imágenes de contenedores con el AWS Cloud Development Kit (AWS CDK), se utiliza Docker de forma predeterminada para realizar estas acciones. Si quiere usar una herramienta de administración de contenedores diferente, puede reemplazar Docker a través de la variable del entorno CDK_DOCKER.
Ejemplo: cree y publique un activo de imagen de contenedor con el CDK AWS
El siguiente es un ejemplo sencillo de una aplicación de AWS CDK que crea y publica un activo de contenedor en Amazon Elastic Container Registry (Amazon ECR) con Docker de forma predeterminada:
- Estructura de un proyecto
-
my-cdk-app/ ├── lib/ │ ├── my-stack.ts │ └── docker/ │ ├── Dockerfile │ └── app/ │ └── index.js ├── bin/ │ └── my-cdk-app.ts ├── package.json ├── tsconfig.json └── cdk.json - Dockerfile
-
FROM public.ecr.aws/lambda/nodejs:16 # Copy application code COPY app/ /var/task/ # (Optional) Install dependencies # RUN npm install # The Lambda Node.js base image looks for index.handler by default - Código de la aplicación
-
En
lib/docker/app/index.js:console.log("Hello from inside the container!"); - Pila de CDK
-
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets'; export class MyStack extends cdk.Stack { constructor(scope: Construct, id: string) { super(scope, id); // Define a Docker image asset const dockerImageAsset = new ecr_assets.DockerImageAsset(this, 'MyDockerImage', { directory: 'lib/docker', // Path to the directory containing the Dockerfile }); // Output the ECR URI new cdk.CfnOutput(this, 'ECRImageUri', { value: dockerImageAsset.imageUri, }); } } - Aplicación de CDK
-
#!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import { MyStack } from '../lib/my-stack'; const app = new cdk.App(); new MyStack(app, 'MyStack');
Cuando ejecutamos cdk deploy, la interfaz de línea de comandos (CLI) del AWS Cloud Development Kit (AWS CDK) hace lo siguiente:
-
Cree la imagen de Docker: ejecute
docker buildlocalmente enDockerfilefunción del directorio especificado (lib/docker). -
Etiquete la imagen: ejecute
docker tagpara etiquetar la imagen creada con un hash único, basado en el contenido de la imagen. -
Publique en Amazon ECR: ejecute
docker pushpara publicar la imagen de contenedor en un repositorio de Amazon ECR. Debe ser un repositorio ya existente. Se crea durante el proceso de arranque predeterminado. -
Generar el URI de la imagen: después de una implementación correcta, el URI de Amazon ECR de la imagen de contenedor publicada se muestra en su petición de comandos. Este es el URI de nuestra imagen de Docker en Amazon ECR.
¿Cómo reemplazar Docker por otra herramienta de administración de contenedores?
Utilice la variable de entorno CDK_DOCKER para especificar la ruta al binario de la herramienta de administración de contenedores que la sustituya. El siguiente es un ejemplo de cómo reemplazar Docker con Finch:
$ which finch /usr/local/bin/finch # Locate the path to the binary $ export CDK_DOCKER='/usr/local/bin/finch' # Set the environment variable $ cdk deploy # Deploy using the replacement
Los alias ni los enlaces no se admiten. Para reemplazar a Docker, debe usar la variable del entorno CDK_DOCKER.
Motores de reemplazo directo compatibles de Docker
Finch es compatible, aunque es posible que algunas funciones de Docker no estén disponibles o que funcionen de forma diferente a medida que la herramienta evolucione. Para obtener más información sobre Finch, consulte Ready for Flight: ¡Anunciamos Finch 1.0 GA!
Puede que funcionen otras herramientas de administración de contenedores. La CDK no comprueba qué sustituto de Docker está utilizando para determinar si es compatible. Si la herramienta tiene comandos de Docker equivalentes y tiene un funcionamiento similar, debería funcionar.