aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit
test(cdk): スナップショットシリアライザのデッドパターン削除と軽微な堅牢化
- Vorherrschende Sprache
- TypeScript
- Sterne
- 229
- Forks
- 45
- Ø Merge
- 1 Min.
- Gemergte PRs (30 T.)
- 4
Beschreibung
## 背景
`apps/cdk/test/snapshot-plugin.ts` は、`cdk synth` が出力する非決定的トークン(アセットハッシュ、Lambda Version 論理 ID 末尾のハッシュ等)を redact して CloudFormation スナップショットを安定させるシリアライザです。現在の合成テンプレートに照らすと、実際には何もマッチしていない置換パターン(デッド)が複数あり、加えて軽微な堅牢化の余地があります。
## 現状パターンと合成出力の突き合わせ
```ts
.replace(/([A-Fa-f0-9]{64}.zip)/, 'REDACTED')
.replace(/([A-Fa-f0-9]{64}.mjs)/, 'REDACTED')
.replace(/.*cdk-hnb659fds-container-assets-.*/, 'REDACTED')
.replace(/webapp-starter-[0-9a-z]*/, 'REDACTED')
.replace(/(.*CurrentVersion).*/, '$1REDACTED')
```
合成テンプレート(`cdk.out/*.template.json`)を確認した結果:
### 削除候補(デッド)
- **`webapp-starter-[0-9a-z]*`**: 合成出力に `webapp-starter-` 形の文字列は出現しない。`[0-9a-z]*` は 0 文字にマッチするため実質何も redact していない。削除してよい。
- **`.*cdk-hnb659fds-container-assets-.*`**: 合成テンプレートに `cdk-hnb659fds-container-assets-` を含む文字列が存在しない(この構成のコンテナイメージはデプロイ時ビルドで作成される ECR リポジトリを参照し、bootstrap の container-assets リポジトリを参照しないため)。デッド。削除を検討。
### 維持(誤って削除しないこと)
- **`.zip` / `.mjs`**: Lambda バンドルアセットの S3 キーのハッシュを redact。LIVE。
- **`(.*CurrentVersion).*`**: Lambda Version 論理 ID 末尾のハッシュを redact。アプリ/依存の変更で変わる値のため維持が必要。LIVE。
### 軽微な堅牢化(任意)
- `.zip` / `.mjs` パターンの `.` が未エスケープで任意 1 文字にマッチする → `\.` へ。
- 同パターンに `/g` が無く、1 つの文字列値に 64hex が 2 つ以上現れると 2 個目以降が漏れる(現状は該当文字列 0 件のため実害はなく、保険)。
- `(.*CurrentVersion).*` は貪欲マッチ。意図を明確化するなら `CurrentVersion[A-Za-z0-9]*$` 等へアンカー。
## 受け入れ条件
- デッドパターン削除後、`apps/cdk` の `test:unit`(vitest run)でスナップショット差分が発生しない(=当該パターンが何も変えていなかったことの確認)。
- 堅牢化を入れる場合はスナップショットを `-u` で再生成し、diff が意図どおりであることを確認。
Beitragsleitfaden
Rechercherichtung
Beginne mit apps/cdk/test/snapshot-plugin.ts und vergleiche dessen Serializer-Muster mit der generierten cdk.out/*.template.json-Ausgabe. Führe den apps/cdk test:unit-Befehl (vitest run) aus, nachdem die identifizierten toten Muster entfernt wurden; falls eine Härtung enthalten ist, generiere die Snapshots mit -u neu und prüfe den Diff. Als abgeschlossen gilt die Aufgabe, wenn die Tests ohne unbeabsichtigte Änderungen an den Snapshots bestehen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- aws, node.js, typescript
- Bereich
- infrastructure, testing
- Issue-Typ
- Refactoring
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Aktivitätsstatus
- Ruhig
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 76/100