概要
同一AWSアカウント内に複数環境(dev, staging等)をデプロイできない。CDK contextで環境名を指定し、スタック名にプレフィックスを付与するパターンを追加する。
環境名未指定時の動作は一切変わらないため、既存ユーザーに影響なし。
現状の問題
cdk/bin/cdk.ts でスタック名がハードコードされているため、同一アカウントに2つ目の環境をデプロイしようとするとスタック名が衝突する。
// 現在のコード
const virginia = new UsEast1Stack(app, 'ServerlessWebappStarterKitUsEast1Stack', { ... });
new MainStack(app, 'ServerlessWebappStarterKitStack', { ... });
修正案
cdk/bin/cdk.ts にCDK context経由の環境名指定を追加する。両方のスタックにプレフィックスを付与する必要がある(crossRegionReferences でSSMパラメータ経由のクロスリージョン参照があるため、片方だけでは不整合が起きる)。
const app = new cdk.App();
const envName = app.node.tryGetContext('env') as string | undefined;
const prefix = envName ? `${envName}-` : '';
const virginia = new UsEast1Stack(app, `${prefix}ServerlessWebappStarterKitUsEast1Stack`, {
// ...既存のprops
});
new MainStack(app, `${prefix}ServerlessWebappStarterKitStack`, {
// ...既存のprops
});
// 環境名タグ(指定時のみ)
if (envName) {
cdk.Tags.of(app).add('Environment', envName);
}
使い方
# デフォルト(プレフィックスなし、現在と同じ動作)
npx cdk deploy --all
# 環境名指定
npx cdk deploy --all -c env=dev
検証方法
- 環境名未指定時に現在と同じスタック名(
ServerlessWebappStarterKitStack, ServerlessWebappStarterKitUsEast1Stack)でデプロイされること
-c env=dev 指定時に dev-ServerlessWebappStarterKitStack, dev-ServerlessWebappStarterKitUsEast1Stack でデプロイされること
- 同一アカウントに複数環境が共存できること(クロスリージョン参照が正しく解決されること)
概要
同一AWSアカウント内に複数環境(dev, staging等)をデプロイできない。CDK contextで環境名を指定し、スタック名にプレフィックスを付与するパターンを追加する。
環境名未指定時の動作は一切変わらないため、既存ユーザーに影響なし。
現状の問題
cdk/bin/cdk.tsでスタック名がハードコードされているため、同一アカウントに2つ目の環境をデプロイしようとするとスタック名が衝突する。修正案
cdk/bin/cdk.tsにCDK context経由の環境名指定を追加する。両方のスタックにプレフィックスを付与する必要がある(crossRegionReferencesでSSMパラメータ経由のクロスリージョン参照があるため、片方だけでは不整合が起きる)。使い方
検証方法
ServerlessWebappStarterKitStack,ServerlessWebappStarterKitUsEast1Stack)でデプロイされること-c env=dev指定時にdev-ServerlessWebappStarterKitStack,dev-ServerlessWebappStarterKitUsEast1Stackでデプロイされること