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.
Al crear activos de imagen de contenedores con AWS Cloud Development Kit (AWS CDK), Docker se utiliza de forma predeterminada para realizar estas acciones. Si desea utilizar una herramienta de gestión de contenedores diferente, puede sustituirla Docker a través de la variable de CDK_DOCKER
entorno.
Ejemplo: cree y publique un recurso de imagen de contenedor con AWS CDK
El siguiente es un ejemplo sencillo de una AWS CDK aplicación 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 AWS 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 AWS Cloud Development Kit (AWS CDK) comandos (CLI) hace lo siguiente:
-
Construye el Docker imagen: se ejecuta
docker build
localmente en función del directorio especificado (lib/docker
).Dockerfile
-
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 nuestro Docker imagen en Amazon ECR.
¿Cómo reemplazar Docker con otra herramienta de gestió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 sustitución 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 Docker, debe utilizar la variable de CDK_DOCKER
entorno.
Compatible Docker motores de recambio integrados
Finch es compatible, aunque puede haber algunos Docker funciones que no están disponibles o que pueden funcionar de forma diferente a medida que la herramienta evoluciona. Para obtener más información sobre Finch, consulte Ready for Flight: ¡Anunciamos Finch 1.0 GA!
Es posible que funcionen otras herramientas de administración de contenedores. El CDK no comprueba cuáles Docker el reemplazo que está utilizando para determinar si es compatible. Si la herramienta tiene un equivalente Docker comanda y se comporta de manera similar, debería funcionar.