Este é o Guia do desenvolvedor do AWS CDK v2. O CDK v1 antigo entrou em manutenção em 1º de junho de 2022 e encerrou o suporte em 1º de junho de 2023.
As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Crie e implante ativos de imagem de contêiner em aplicativos CDK
Quando você cria ativos de imagem de contêiner com o AWS Cloud Development Kit (AWS CDK), o Docker é utilizado por padrão para realizar essas ações. Se você quiser usar uma ferramenta diferente de gerenciamento de contêineres, poderá substituir o Docker por meio da variável de CDK_DOCKER
ambiente.
Exemplo: Crie e publique um ativo de imagem de contêiner com o AWS CDK
Veja a seguir um exemplo simples de um aplicativo AWS CDK que cria e publica um ativo de contêiner no Amazon Elastic Container Registry (Amazon ECR) usando o Docker por padrão:
- Estrutura do projeto
-
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 do aplicativo
-
Em
lib/docker/app/index.js
:console.log("Hello from inside the container!");
- Pilha 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, }); } }
- Aplicativo 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');
Quando executamoscdk deploy
, a interface de linha de comando (CLI) do AWS Cloud Development Kit (AWS CDK) faz o seguinte:
-
Crie a imagem do Docker — Execute
docker build
localmente com baseDockerfile
no diretório especificado (lib/docker
). -
Marque a imagem — Execute
docker tag
para marcar a imagem criada com um hash exclusivo, com base no conteúdo da imagem. -
Publicar no Amazon ECR — Execute
docker push
para publicar a imagem do contêiner em um repositório do Amazon ECR. Esse repositório já deve existir. Ele é criado durante o processo de inicialização padrão. -
Exiba o URI da imagem — Depois de uma implantação bem-sucedida, o URI do Amazon ECR da imagem do contêiner publicada é exibido em seu prompt de comando. Esse é o URI da nossa imagem do Docker no Amazon ECR.
Como substituir o Docker por outra ferramenta de gerenciamento de contêineres
Use a variável de CDK_DOCKER
ambiente para especificar o caminho para o binário da sua ferramenta de gerenciamento de contêineres substituta. A seguir está um exemplo de substituição do 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
Não há suporte para aliasing ou vinculação. Para substituir o Docker, você deve usar a variável de CDK_DOCKER
ambiente.
Mecanismos de substituição do Docker drop-in compatíveis
Finch é suportado, embora alguns recursos do Docker possam estar indisponíveis ou funcionem de forma diferente à medida que a ferramenta evolui. Para obter mais informações sobre Finch, consulte Ready for Flight: Announcing Finch 1.0
Outras ferramentas de gerenciamento de contêineres podem funcionar. O CDK não verifica qual substituto do Docker você está usando para determinar se ele é compatível. Se a ferramenta tiver comandos equivalentes do Docker e se comportar de forma semelhante, ela deverá funcionar.