在 CDK 应用程序中构建和部署容器映像资产 - AWS 云开发工具包 (AWS CDK) v2

这是 AWS CDK v2 开发人员指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。

在 CDK 应用程序中构建和部署容器映像资产

当您使用 AWS 云开发工具包 (AWS CDK) 构建容器映像资产时,默认情况下会使用 Docker 来执行这些操作。如果想要使用其他容器管理工具,则可以通过 CDK_DOCKER 环境变量替换 Docker。

示例:使用 AWS CDK 构建和发布容器映像资产

下面是一个 AWS CDK 应用程序简单示例,它默认使用 Docker 构建容器资产并将其发布到 Amazon Elastic Container Registry (Amazon ECR):

项目结构
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
应用程序代码

In lib/docker/app/index.js:

console.log("Hello from inside the container!");
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, }); } }
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');

当我们运行 cdk deploy 时,AWS 云开发工具包 (AWS CDK) 命令行界面 (CLI) 会执行下面的操作:

  1. 构建 Docker 映像 – 根据指定目录 (lib/docker) 中的 Dockerfile 在本地运行 docker build

  2. 标记映像 – 运行 docker tag,根据映像内容使用唯一哈希标记构建的映像。

  3. 发布到 Amazon ECR – 运行 docker push,将容器映像发布到 Amazon ECR 存储库。此存储库必须已经存在。它是在默认引导过程中创建的。

  4. 输出映像 URI - 部署成功后,已发布容器映像的 Amazon ECR URI 将显示在命令提示符中。这是我们在 Amazon ECR 中的 Docker 映像的 URI。

如何将 Docker 替换为其他容器管理工具

使用 CDK_DOCKER 环境变量指定替换容器管理工具的二进制文件的路径。下面是将 Docker 替换为 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

不支持别名或链接。要替换 Docker,必须使用 CDK_DOCKER 环境变量。

支持的 Docker 简易替换引擎

Finch 受支持,但随着工具的不断发展,某些 Docker 功能可能不可用或运行方式有所不同。有关 Finch 的更多信息,请参阅 AWS 开放源代码博客中的 Ready for Flight: Announcing Finch 1.0 GA!

其他容器管理工具可能会起作用。CDK 不会检查您使用的是哪个 Docker 替代品来确定它是否受支持。如果该工具具有等效的 Docker 命令并且行为类似,则应能正常工作。