Repository navigation
fix(infra): ローカル開発の CORS 許可を localhost:8601-8610 に広げる (#1160) - #1161
Conversation
dev server は 8601 から順に使う(gui=8601 / Admin SPA=8602)が、devpod で worktree を並行起動すると 8603 以降も割り当てられる。許可オリジンが 1〜2 個に 固定されていたため、別ポートで立てた途端にローカルから API を呼べなくなっていた。 非 prod の既定に 8601-8610 を並べる。HTTP API v2 の allowOrigins は完全一致で ポートにワイルドカードが使えないため列挙する。 あわせて classroom / bug-report の既定が stage を見ておらず prod でも localhost:8601 を許可していたのを stage 対応にし、CORS_ALLOWED_ORIGINS に localhost が残ったまま prod へ deploy しようとしたら throw するガードを足す (既存の DEV_BYPASS_TOKEN の prod ガードと同じ考え方)。実デプロイは各 .env.<stage> が上書きしているので現行の挙動は変わらない。 Closes #1160 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
🤖 敵対的レビュー(自己レビュー): Must 0 件 / Question 2 件 / FYI 3 件 観点は正確性・セキュリティ・再利用/簡潔性・ synth 済みテンプレートで実際の許可オリジンを検証
prod にローカルオリジンが 1 つも入らないことを 3 プロジェクトとも確認した。classroom / bug-report の stg が変わらないのは ハンドラ側との整合も確認
Question(人間の判断が要る)[Question] prod ガードは、既存環境の deploy を突然失敗させうる。 [Question] ヘルパとテストを 3 プロジェクトに複製している。 各 infra が独立した npm パッケージで共有モジュールを持てないための妥協で、ファイル冒頭に「変更するときは揃えること」と書いた。将来ズレる余地は残る(例: 一方だけ範囲を広げる)。共有パッケージ化する価値が出るのは infra が増えたときなので今回は複製で通したが、別案があれば従う。 FYI(対応不要と判断)[FYI] [FYI] stg の CORS 設定が 11 origins に増える。 API Gateway の制限には遠く、synth も通る。ワイルドカードが使えない以上、列挙以外の選択肢が無い。 [FYI] cold cache で DoD 照合
|
概要
ローカルの dev server は 8601 から順に使う(scratch-gui = 8601 / Admin SPA = 8602)。devpod で worktree を並行起動すると 8603 以降も割り当たるが、各 API の CORS 許可はポートが 1〜2 個に固定されていたため、別ポートで立てた途端にローカルから API を呼べなくなっていた。
実際に Admin SPA を 8601 で起動して詰まった:
Closes #1160
変更
infra/{admin,classroom,bug-report}/lib/cors-origins.tslib/*-stack.tsresolveCorsOrigins()に置き換えlambda/tests/cors-origins.test.tsdocs/admin/README.mdhttp://localhost:8601〜8610。HTTP API v2 のallowOriginsは完全一致でポートにワイルドカードが使えないため列挙する。http://localhost:8601を許可していたので、その footgun も直した。CORS_ALLOWED_ORIGINSにlocalhost/127.0.0.1/[::1]が残ったまま prod へ deploy しようとしたら stack が throw する。CORS は「開発中に緩めて戻し忘れる」が起きやすいので、範囲を広げるなら検知する側を対で入れるべきと判断した(既存のDEV_BYPASS_TOKENprod ガードと同じ思想)。現行デプロイの挙動は変わらない: classroom / bug-report は
.env.<stage>(gitignored)が既定を上書きしているため。admin だけは.envに指定が無く既定がそのまま効くので、stg 再デプロイで 8601〜8610 が有効になる。検証
tsc --noEmitnpm testcdk synthstgcdk synthprodsynth 済みテンプレートで許可オリジンを確認済み(stg に 8601〜8610 が入り、prod には入らない)。
既知の失敗(本 PR と無関係): cold cache で
smalruby-adminのhandler-notifications.test.tsが TS2451 で落ちる。これは develop 既存の問題で、修正は未マージの PR #1156 に入っている。重複修正は #1146 でコンフリクトを生んだので、本 PR では触っていない。マージ後に必要な運用作業(この PR には入らない)
AdminStack-stgを再デプロイ(既定が効くのは admin のみ)。.env.stgのCORS_ALLOWED_ORIGINSを更新して stg 再デプロイ(gitignored なのでリポジトリからは変えられない)。レビュー観点