這是 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) 會執行下列動作:
-
建置 Docker 映像 – 根據指定目錄中
Dockerfile
的 在docker build
本機執行 (lib/docker
)。 -
標記映像 – 根據映像內容,執行
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 開放原始碼部落格中的準備飛行:宣布 Finch 1.0 GA!
其他容器管理工具可能會運作。CDK 不會檢查您用來判斷是否支援哪個 Docker 替換。如果工具具有同等的 Docker 命令且行為類似,則應該可以運作。