在 CDK 应用程序中构建和部署容器镜像资产 - AWS Cloud Development Kit (AWS CDK) v2

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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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

使用 C AWS loud Development Kit (AWS CDK) 构建容器镜像资源时,默认使用 Docker 来执行这些操作。如果要使用其他容器管理工具,则可以通过CDK_DOCKER环境变量替换 Docker。

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

以下是 AWS CDK 应用程序的简单示例,该应用程序默认使用 Docker 构建容器资产并将其发布到亚马逊 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,C AWS loud Development Kit (AWS CDK) 命令行界面 (CLI) 会执行以下操作:

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

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

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

  4. 输出映像 URI-成功部署后,将在命令提示符中输出已发布容器映像的 Amazon ECR URI。这是我们在亚马逊 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 的更多信息,请参阅 Ready for Flight:宣布 Finch 1.0 GA! AWS 开源博客中。

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