Skip to content

Commit 568dba0

Browse files
committed
docs: add staged build verification steps to migration prompt Phase 4
Static checks (lint, build, tsc) alone cannot catch runtime failures such as ESM module eager evaluation, .env loading issues, and Docker path resolution problems — all of which were discovered during v3 implementation (documented in .kiro/specs plan.md task 12). Add Phase 4-3 with progressive verification stages: - 4-3a: lint → build (static checks) - 4-3b: local Docker image build + docker run artifact inspection - 4-3c: local migration execution against real DSQL cluster - 4-3d: local dev server + browser verification Also fix Phase 3 checkpoint ordering to lint → build (detect DSQL incompatible patterns before attempting build).
1 parent 530c512 commit 568dba0

1 file changed

Lines changed: 63 additions & 1 deletion

File tree

.serverless-full-stack-webapp-starter-kit/docs/v3.0.0/migration-prompt.ja.md

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,8 @@ bash scripts/dsql.sh delete --region <region>
248248

249249
### チェックポイント
250250

251-
- `pnpm run build` が終了コード 0
252251
- `pnpm run lint` が終了コード 0(oxlint が DSQL 非互換パターンを検出しないことを確認)
252+
- `pnpm run build` が終了コード 0
253253
- Prisma の import が残っていない(`rg '@prisma|from.*prisma' --type ts` が結果なし)
254254
- 開発用 DSQL クラスタでマイグレーションが成功し、アプリが動作する
255255

@@ -277,6 +277,68 @@ webapp と async-job の Dockerfile を v3 のパターンに更新する。v3
277277
- `cd apps/cdk && pnpm run build` が終了コード 0
278278
- `pnpm run test` が終了コード 0(CDK テストがある場合)
279279

280+
### 4-3. 段階的ビルド・動作確認
281+
282+
静的チェック(lint, build, tsc)だけでは不十分。ESM モジュールの即時評価、環境変数の読み込み、Docker 内のパス解決、Lambda ランタイムの挙動など、ビルドが通っても実行時にクラッシュする問題が多い。以下の順序で段階的に検証し、各段階で問題を発見・修正してから次に進むこと。
283+
284+
#### 4-3a. lint → build
285+
286+
```bash
287+
pnpm run lint
288+
pnpm --filter webapp run build
289+
cd apps/cdk && pnpm run build
290+
pnpm run test # CDK テストがある場合
291+
```
292+
293+
#### 4-3b. ローカル Docker イメージビルド
294+
295+
Dockerfile が正しく動作するか、CDK を通さずに直接確認する。pnpm workspaces + Docker の組み合わせは罠が多い(`--filter` の推移的依存解決、`.dockerignore` の読み込み、esbuild の外部パッケージ解決)。
296+
297+
```bash
298+
# async-job
299+
docker build --platform linux/arm64 -f apps/async-job/Dockerfile -t test-async-job:local .
300+
docker run --rm --entrypoint /bin/sh test-async-job:local -c "ls -la /var/task/"
301+
302+
# dsql-migrator
303+
docker build --platform linux/arm64 -f apps/cdk/lib/constructs/dsql-migrator/Dockerfile -t test-migrator:local .
304+
docker run --rm --entrypoint /bin/sh test-migrator:local -c "ls -la /var/task/ && cat /var/task/migrations/*.sql"
305+
306+
# webapp(CodeBuild で実行されるため手元では省略可。ただし Dockerfile の構文エラーは確認できる)
307+
docker build --platform linux/arm64 -f apps/webapp/Dockerfile -t test-webapp:local .
308+
```
309+
310+
確認事項:
311+
- esbuild の出力が `.mjs` 拡張子であること
312+
- `@aws/aurora-dsql-node-postgres-connector` がバンドルに含まれていること(`--external:@aws-sdk/*` で除外されないこと)
313+
- migrations/ ディレクトリが正しくコピーされていること
314+
315+
CDK と同じビルドプロセスを再現する場合は `cdk synth` 後に `cdk.out/manifest.json``dockerImages` でアセットハッシュを取得し、`cd cdk.out/asset.<hash> && docker build --platform linux/arm64 -f <Dockerfile相対パス> -t test:local .` でビルドできる。
316+
317+
#### 4-3c. ローカルマイグレーション実行
318+
319+
実際の DSQL クラスタに対してマイグレーションを実行する。ビルドが通っても、ESM モジュールの即時評価や `.env` の読み込みでクラッシュする可能性がある。
320+
321+
```bash
322+
pnpm --filter @repo/db run migrate
323+
```
324+
325+
確認事項:
326+
- マイグレーションが成功し、`_migrations` テーブルにレコードが挿入されること
327+
- 再実行で冪等(既に適用済みのマイグレーションがスキップされること)
328+
329+
#### 4-3d. ローカルデバッグサーバー + ブラウザ確認
330+
331+
`apps/webapp/.env.local` に実際の Cognito / DSQL / AppSync の値を設定し、ローカルサーバーを起動してブラウザで操作する。
332+
333+
```bash
334+
cd apps/webapp && pnpm run dev
335+
```
336+
337+
確認事項:
338+
- サインインページが表示されること
339+
- Cognito Managed Login でログインできること
340+
- Todo の CRUD(作成・完了・編集・削除)が動作すること
341+
280342
## Phase 5: データベース移行(Aurora Serverless v2 → DSQL)
281343

282344
このフェーズはデータ損失を防ぐため段階的な CDK デプロイが必要。**Phase 5-1 と 5-3 の2回のデプロイを1回にまとめないこと** — RETAIN を設定せずに Aurora v2 リソース定義を削除すると、CloudFormation がクラスタを削除し本番データが失われる。Phase 5-1 で RETAIN を設定してから初めて、Phase 5-3 でリソース定義を安全に削除できる。

0 commit comments

Comments
 (0)