Skip to content

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

Description

@konokenj

背景

apps/cdk/test/snapshot-plugin.ts は、cdk synth が出力する非決定的トークン(アセットハッシュ、Lambda Version 論理 ID 末尾のハッシュ等)を redact して CloudFormation スナップショットを安定させるシリアライザです。現在の合成テンプレートに照らすと、実際には何もマッチしていない置換パターン(デッド)が複数あり、加えて軽微な堅牢化の余地があります。

現状パターンと合成出力の突き合わせ

.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-<suffix> 形の文字列は出現しない。[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/cdktest:unit(vitest run)でスナップショット差分が発生しない(=当該パターンが何も変えていなかったことの確認)。
  • 堅牢化を入れる場合はスナップショットを -u で再生成し、diff が意図どおりであることを確認。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-triageAwaiting maintainer review and classification

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions