aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit
マルチ環境デプロイ対応(CDK context経由の環境名プレフィックス)
- Lingua principale
- TypeScript
- Stelle
- 229
- Fork
- 45
- Merge medio
- 1m
- PR unite (30g)
- 4
Descrizione
## 概要
同一AWSアカウント内に複数環境(dev, staging等)をデプロイできない。CDK contextで環境名を指定し、スタック名にプレフィックスを付与するパターンを追加する。
環境名未指定時の動作は一切変わらないため、既存ユーザーに影響なし。
## 現状の問題
`cdk/bin/cdk.ts` でスタック名がハードコードされているため、同一アカウントに2つ目の環境をデプロイしようとするとスタック名が衝突する。
```typescript
// 現在のコード
const virginia = new UsEast1Stack(app, 'ServerlessWebappStarterKitUsEast1Stack', { ... });
new MainStack(app, 'ServerlessWebappStarterKitStack', { ... });
```
## 修正案
`cdk/bin/cdk.ts` にCDK context経由の環境名指定を追加する。両方のスタックにプレフィックスを付与する必要がある(`crossRegionReferences` でSSMパラメータ経由のクロスリージョン参照があるため、片方だけでは不整合が起きる)。
```typescript
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);
}
```
## 使い方
```bash
# デフォルト(プレフィックスなし、現在と同じ動作)
npx cdk deploy --all
# 環境名指定
npx cdk deploy --all -c env=dev
```
## 検証方法
- 環境名未指定時に現在と同じスタック名(`ServerlessWebappStarterKitStack`, `ServerlessWebappStarterKitUsEast1Stack`)でデプロイされること
- `-c env=dev` 指定時に `dev-ServerlessWebappStarterKitStack`, `dev-ServerlessWebappStarterKitUsEast1Stack` でデプロイされること
- 同一アカウントに複数環境が共存できること(クロスリージョン参照が正しく解決されること)
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia in cdk/bin/cdk.ts e verifica come sono configurati i due nomi degli stack e i riferimenti cross-region esistenti. Esegui i comandi di deploy CDK documentati con e senza -c env=dev. Il lavoro è completato quando i nomi predefiniti rimangono invariati, vengono prodotti i nomi con prefisso dev per entrambi gli stack e più ambienti possono coesistere con i riferimenti cross-region risolti correttamente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- aws, typescript
- Ambito
- cloud, infrastructure
- Tipo di issue
- Funzionalità
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Stato di attività
- Tranquilla
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 74/100