---
name: incident-handling
description: |
インシデント発生時に自律的に対応するメタスキルです。
初動対応から復旧、事後分析までを体系的に実行し、再発防止を強化します。
Trigger: インシデント, 障害, 緊急対応, トラブル, 本番エラー, デグレ, 互換性破壊, バグ
user-invocable: false
---
## 目的
インシデント対応を構造化し、被害最小化・復旧時間短縮・再発防止を実現する。
## インシデント対応フレームワーク
### 1. 初動対応(影響範囲の可視化)
状況: API Gatewayの設定変更後、一部のエンドポイントが502エラーを返す
影響範囲を可視化:
- 何が壊れたか: /users/* 配下のエンドポイント
- 誰に影響するか: モバイルアプリユーザー全員
- どのくらい壊れたか: ユーザー関連機能が完全停止
### 2. 障害調査(なぜなぜ分析)
状況: ECSタスクが起動直後にクラッシュを繰り返す
問題: ECSタスクがクラッシュ
↓ なぜ?
コンテナがヘルスチェックに失敗
↓ なぜ?
アプリケーションの起動が遅い
↓ なぜ?
RDSへの初回接続でタイムアウト
↓ 根本原因
セキュリティグループの設定ミスでRDSへの接続が遮断
### 3. 復旧戦略の選択
| 戦略 | 適用場面 | リスク |
|------|----------|--------|
| **ロールバック** | 即時復旧が必要、前バージョンが安定 | データ不整合の可能性 |
| **ホットフィックス** | 問題が明確で修正が小さい | 急いでさらにバグを入れる |
| **機能フラグ無効化** | 新機能起因、既存機能は正常 | 一部ユーザーへの影響継続 |
| **互換レイヤー追加** | 段階的移行が必要 | 複雑性増加 |
状況: REST API v2への移行後、旧バージョンのクライアントが動作しなくなった
復旧戦略の検討:
- ロールバック: 可能だが、v2移行済みユーザーに影響
- ホットフィックス: 原因が互換性問題で範囲が広い
- 機能フラグ: 該当なし
- 互換レイヤー: v1エンドポイントを維持 → 段階的移行可能
### 4. 段階的復旧手順
状況: RDSのマイグレーション失敗によるサービス停止
### 5. 複合パターンの検出
単一原因ではなく、複数条件の組み合わせでインシデントが発生することがある。
状況: 本番環境でLambda関数が断続的にタイムアウトする
複合パターンの分析:
1. VPC内Lambda(コールドスタートが遅い)
2. RDS Proxyなし(コネクション枯渇リスク)
3. 同時実行数制限(デフォルト1000)
単独では問題ないが、トラフィック増加時に3つが組み合わさると障害になる。
### 6. 事後分析(ポストモーテム)
状況: インシデント復旧完了後
## ADRへの記録
インシデント対応で行った重要な意思決定は `./docs/adr` に記録する。
### 記録すべき意思決定
- 復旧戦略の選択理由
- 互換レイヤーの設計判断
- トレードオフを伴った対応
### ADRテンプレート
```markdown
# ADR-XXXX: [インシデント]への対応方針
## ステータス
採用
## コンテキスト
[何が起きたか、影響範囲]
## 決定
[選択した復旧戦略]
## 理由
- [なぜこの戦略を選んだか]
- [他の選択肢を選ばなかった理由]
## 結果
- 残存リスク: [あれば]
- 技術的負債: [発生した場合]
```
## 適用タイミング
| タイミング | 適用するフェーズ |
|------------|------------------|
| 障害検知時 | 1. 初動対応 |
| 原因調査中 | 2. 障害調査 |
| 対応方針決定時 | 3. 復旧戦略選択 |
| 復旧作業中 | 4. 段階的復旧 |
| 復旧完了後 | 6. 事後分析 |
## アンチパターン
| 振る舞い | 問題 | 代わりに |
|----------|------|----------|
| 症状だけ治す | 再発する | 根本原因まで掘り下げる |
| 影響範囲を確認せず修正 | 二次被害 | 最初に影響範囲を可視化 |
| ロールバック手順なしでデプロイ | 復旧が遅れる | 事前にロールバック計画 |
| ポストモーテムをスキップ | 同じ失敗を繰り返す | 必ず事後分析を実施 |
| 犯人探し | 心理的安全性低下 | システム改善にフォーカス |