在 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 建置和發佈容器映像資產

以下是使用 Docker 預設建置容器資產並將其發佈至 Amazon Elastic Container Registry (Amazon ECR) 的 AWS CDK 應用程式簡單範例:

專案結構
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
應用程式碼

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 映像 – 根據指定目錄中Dockerfile的 在docker build本機執行 (lib/docker)。

  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 開放原始碼部落格中的準備飛行:宣布 Finch 1.0 GA!

其他容器管理工具可能會運作。CDK 不會檢查您用來判斷是否支援哪個 Docker 替換。如果工具具有同等的 Docker 命令且行為類似,則應該可以運作。