這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
當您使用 建置容器映像資產時 AWS Cloud Development Kit (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 AWS 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 Cloud Development Kit (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的命令,並且行為類似,則應該可以運作。