這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Cloud Development Kit (AWS CDK) 階段代表一或多個 CDK 堆疊的群組,這些堆疊設定為一起部署。使用階段將相同的堆疊群組部署到多個環境,例如開發、測試和生產。
若要設定 CDK 階段,請匯入並使用 Stage
建構。
以下是定義名為 之 CDK 階段的基本範例MyAppStage
。我們新增兩個 CDK 堆疊,名為 AppStack
和 DatabaseStack
到我們的階段。在此範例中, AppStack
包含應用程式資源, DatabaseStack
包含資料庫資源。然後MyAppStage
,我們為開發和生產環境建立兩個 執行個體:
在 cdk-demo-app/lib/app-stack.ts
中:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
// Define the app stack
export class AppStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your application goes here
}
}
在 cdk-demo-app/lib/database-stack.ts
中:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
// Define the database stack
export class DatabaseStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your database goes here
}
}
在 cdk-demo-app/lib/my-stage.ts
中:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { Stage } from 'aws-cdk-lib';
import { AppStack } from './app-stack';
import { DatabaseStack } from './database-stack';
// Define the stage
export class MyAppStage extends Stage {
constructor(scope: Construct, id: string, props?: cdk.StageProps) {
super(scope, id, props);
// Add both stacks to the stage
new AppStack(this, 'AppStack');
new DatabaseStack(this, 'DatabaseStack');
}
}
在 cdk-demo-app/bin/cdk-demo-app.ts
中:
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { MyAppStage } from '../lib/my-stage';
// Create a CDK app
const app = new cdk.App();
// Create the development stage
new MyAppStage(app, 'Dev', {
env: {
account: '123456789012',
region: 'us-east-1'
}
});
// Create the production stage
new MyAppStage(app, 'Prod', {
env: {
account: '098765432109',
region: 'us-east-1'
}
});
執行 時cdk synth
,會在 中建立兩個雲端組件cdk.out
。這兩個雲端組件包含每個階段的合成 AWS CloudFormation 範本和資產。以下是我們專案目錄的程式碼片段:
cdk-demo-app ├── bin │ └── cdk-demo-app.ts ├── cdk.out │ ├── assembly-Dev │ │ ├── DevAppStack
unique-hash
.assets.json │ │ ├── DevAppStackunique-hash
.template.json │ │ ├── DevDatabaseStackunique-hash
.assets.json │ │ ├── DevDatabaseStackunique-hash
.template.json │ │ ├── cdk.out │ │ └── manifest.json │ ├── assembly-Prod │ │ ├── ProdAppStackunique-hash
.assets.json │ │ ├── ProdAppStackunique-hash
.template.json │ │ ├── ProdDatabaseStackunique-hash
.assets.json │ │ ├── ProdDatabaseStackunique-hash
.template.json │ │ ├── cdk.out │ │ └── manifest.json └── lib ├── app-stack.ts ├── database-stack.ts └── my-stage.ts
使用 列出堆疊時cdk list
,我們總共看到四個堆疊:
$
cdk list
Dev/AppStack (Dev-AppStack) Dev/DatabaseStack (Dev-DatabaseStack) Prod/AppStack (Prod-AppStack) Prod/DatabaseStack (Prod-DatabaseStack)
若要部署特定階段,我們會執行cdk deploy
並提供要部署的堆疊。以下是使用*
萬用字元在我們的Dev
階段部署兩個堆疊的範例:
$
cdk deploy "Dev/*"
✨ Synthesis time: 3.18s Dev/AppStack (Dev-AppStack) Dev/AppStack (Dev-AppStack): deploying... [1/2] ✅ Dev/AppStack (Dev-AppStack) ✨ Deployment time: 1.11s Stack ARN:...
✨ Total time: 4.29s Dev/DatabaseStack (Dev-DatabaseStack) Dev/DatabaseStack (Dev-DatabaseStack): deploying... [2/2] ✅ Dev/DatabaseStack (Dev-DatabaseStack) ✨ Deployment time: 1.09s Stack ARN:...
✨ Total time: 4.27s