aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit

test(cdk): スナップショットシリアライザのデッドパターン削除と軽微な堅牢化

Abierto Apto para principiantes
#274 0 comentarios 0 reacciones 0 asignados Ver en GitHub
needs-triage
Lenguaje dominante
TypeScript
Estrellas
229
Forks
45
Merge medio
1 min
PR fusionados (30 d)
4

Descripción

## 背景

`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 が意図どおりであることを確認。

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Empieza por apps/cdk/test/snapshot-plugin.ts y compara sus patrones de serialización con la salida generada de cdk.out/*.template.json. Ejecuta el comando apps/cdk test:unit (vitest run) después de eliminar los patrones muertos identificados; si se incluye un endurecimiento, regenera los snapshots con -u e inspecciona el diff. Se considera terminado cuando las pruebas pasan sin cambios no intencionados en los snapshots.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
aws, node.js, typescript
Área
infrastructure, testing
Tipo de issue
Refactorización
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Tranquilo
Claridad
Bien especificado
Aptitud para principiantes
76/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.