Ceci est le guide du développeur du AWS CDK v2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Créez et déployez des ressources d'images de conteneurs dans les applications CDK
Lorsque vous créez des actifs d'image de conteneur avec le AWS Cloud Development Kit (AWS CDK), Docker est utilisé par défaut pour effectuer ces actions. Si vous souhaitez utiliser un autre outil de gestion de conteneurs, vous pouvez remplacer Docker via la variable d'CDK_DOCKER
environnement.
Exemple : création et publication d'une ressource d'image de conteneur avec le AWS CDK
Voici un exemple simple d'application AWS CDK qui crée et publie un actif de conteneur sur Amazon Elastic Container Registry (Amazon ECR) en utilisant Docker par défaut :
- Structure du projet
-
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
- Code d'application
-
Dans
lib/docker/app/index.js
:console.log("Hello from inside the container!");
- pile 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, }); } }
- Application 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');
Lors de l'exécutioncdk deploy
, l'interface de ligne de commande (CLI) du AWS Cloud Development Kit (AWS CDK) effectue les opérations suivantes :
-
Créez l'image Docker —
docker build
Exécutez-la localementDockerfile
en fonction du répertoire spécifié (lib/docker
). -
Marquer l'image : exécutez cette
docker tag
option pour étiqueter l'image créée avec un hachage unique, en fonction du contenu de l'image. -
Publier sur Amazon ECR — Exécutez
docker push
pour publier l'image du conteneur dans un référentiel Amazon ECR. Ce dépôt doit déjà exister. Il est créé pendant le processus d'amorçage par défaut. -
Afficher l'URI de l'image — Après un déploiement réussi, l'URI Amazon ECR de l'image du conteneur publiée est affiché dans votre invite de commande. Il s'agit de l'URI de notre image Docker dans Amazon ECR.
Comment remplacer Docker par un autre outil de gestion de conteneurs
Utilisez la variable d'CDK_DOCKER
environnement pour spécifier le chemin d'accès au binaire de votre outil de gestion des conteneurs de remplacement. Voici un exemple de remplacement de Docker par 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
L'aliasing ou les liens ne sont pas pris en charge. Pour remplacer Docker, vous devez utiliser la variable d'CDK_DOCKER
environnement.
Moteurs de remplacement intégrés Docker pris en charge
Finch est pris en charge, bien que certaines fonctionnalités de Docker puissent ne pas être disponibles ou fonctionner différemment au fur et à mesure de l'évolution de l'outil. Pour plus d'informations sur Finch, voir Ready for Flight : Annancing Finch 1.0 GA !
D'autres outils de gestion des conteneurs peuvent fonctionner. Le CDK ne vérifie pas quel remplacement de Docker vous utilisez pour déterminer s'il est pris en charge. Si l'outil possède des commandes Docker équivalentes et se comporte de la même manière, il devrait fonctionner.