这是 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) 会执行下面的操作:
-
构建 Docker 映像 – 根据指定目录 (
lib/docker) 中的Dockerfile在本地运行docker build。 -
标记映像 – 运行
docker tag,根据映像内容使用唯一哈希标记构建的映像。 -
发布到 Amazon ECR – 运行
docker push,将容器映像发布到 Amazon ECR 存储库。此存储库必须已经存在。它是在默认引导过程中创建的。 -
输出映像 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 命令并且行为类似,则应能正常工作。