デプロイ失敗は「コード先行・依存基盤未適用の適用順ズレ」を第一に疑う
CI/CD
トラブルシューティング
デプロイ
運用
原則
デプロイやCIでの失敗のうち、以下はいずれも同型の不整合であることが多い: コンテナオーケストレーターの ServiceNotFound(新サービス未作成)、DB の Unknown column(新カラムのマイグレーション未適用)、IaC(Terraform/Terragrunt)の no outputs / 依存モジュール未 apply。いずれも「アプリ/コード側の変更が先に反映され、依存する基盤側(DBスキーマ・サービス定義・IaCモジュールの output)が未適用のまま実行された」ことで起きる。まずこの適用順ズレを疑うと切り分けが早い。
切り分けの手順:
- エラー発生時刻とデプロイ時刻を change-tracking / 変更履歴・監視で突き合わせ、直前のデプロイとの相関(コードは新しいが基盤が古い)を見る。
- 基盤の適用ステップ(DB migrationや infrastructure-apply)がその run で実際に実行されたか、実行条件で skip されていないかを確認する(デプロイジョブだけ走り基盤ジョブが抜けているケースが多い)。
- 変更差分ベースで適用対象を決める仕組み(PR base との差分から target を生成するなど)は、未適用の依存モジュールを取りこぼす。差分でなく依存グラフで適用対象を決めるか、取りこぼしを疑う。
対応原則: 基盤(スキーマ・サービス・モジュール)を先に適用してからコード/デプロイを流す。差分駆動の部分適用は依存の取りこぼしに注意し、迷ったら全体適用に倒す。平時からマイグレーションとデプロイの順序を CI の実行条件で担保しておくと事故を防げる。