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.
Cree e implemente activos de imagen de contenedores en 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 quieres usar una herramienta de administración de contenedores diferente, puedes reemplazar Docker a través de la CDK_DOCKER
variable de entorno.
Ejemplo: cree y publique un recurso 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) mediante Docker de forma predeterminada:
- Estructura del 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 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 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 ejecutamoscdk deploy
, la interfaz de línea de comandos (CLI) del AWS Cloud Development Kit (AWS CDK) hace lo siguiente:
-
Cree la imagen de Docker: ejecútela
docker build
localmente en función delDockerfile
directorio especificado ()lib/docker
. -
Etiquete la imagen: ejecute esta
docker tag
acción para etiquetar la imagen creada con un hash único, basado en el contenido de la imagen. -
Publicar en Amazon ECR: ejecute
docker push
para publicar la imagen del contenedor en un repositorio de Amazon ECR. Este repositorio ya debe existir. Se crea durante el proceso de arranque predeterminado. -
Generar el URI de la imagen: tras una implementación correcta, el URI de Amazon ECR de la imagen del contenedor publicada se muestra en la línea 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 CDK_DOCKER
entorno 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 por 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
No se admiten los alias ni los enlaces. Para reemplazar a Docker, debe usar la variable de CDK_DOCKER
entorno.
Motores de reemplazo directo de Docker compatibles
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
Es posible que funcionen otras herramientas de administración de contenedores. La CDK no comprueba qué sustituto de Docker estás utilizando para determinar si es compatible. Si la herramienta tiene comandos de Docker equivalentes y se comporta de forma similar, debería funcionar.