EXERCISE 90分

演習:SRE運用計画を作成しよう

ストーリー

「SREの理論は学んだ。ここからは実践だ」

松本先輩がシステム構成図を広げた。

「このECサイトのSRE運用計画を作成してもらう。 SLI/SLO設計、エラーバジェットポリシー、 トイル削減計画......全てを含む総合的な計画だ。 実際のプロジェクトで使えるレベルのものを作ってくれ」


演習の概要

以下のECサイトに対するSRE運用計画を作成します。

システム概要

ECサイト「ShopNow」

構成:
├── フロントエンド: Next.js (Vercel)
├── バックエンドAPI: Node.js + Express (AWS ECS)
├── データベース: PostgreSQL (AWS RDS)
├── キャッシュ: Redis (ElastiCache)
├── 検索: Elasticsearch
├── 決済: Stripe API
└── CDN: CloudFront

月間利用状況:
├── MAU: 50,000人
├── 月間リクエスト数: 5,000,000
├── 月間注文数: 10,000
├── ピーク時RPS: 100
└── 平均レスポンスタイム: 200ms

課題1: SLI/SLO の設計(30分)

ShopNow の主要なユーザージャーニーに対するSLI/SLO を設計してください。

ユーザージャーニー

1. 商品検索 → 検索結果表示
2. 商品詳細ページ表示
3. カートに追加 → カート表示
4. 注文確定 → 決済処理
5. 注文履歴確認

各ジャーニーに対してSLI(指標)とSLO(目標値)を定義してください。

<details> <summary>解答例(自分で実装してから確認しよう)</summary>
yaml
# ShopNow SLI/SLO 設計

## 1. 商品検索API
sli:
  - name: "検索API可用性"
    type: availability
    measurement: "HTTP 2xx-4xx レスポンスの割合"
  - name: "検索APIレイテンシ"
    type: latency
    measurement: "p95 レスポンスタイム"
slo:
  - availability: 99.9%
    window: 30d
    rationale: "検索が使えないと購買につながらない"
  - latency_p95: 300ms
    window: 30d
    rationale: "検索結果は素早く返す必要がある"

## 2. 商品詳細ページ
sli:
  - name: "商品ページ可用性"
    type: availability
    measurement: "HTTP 200 レスポンスの割合"
slo:
  - availability: 99.9%
    window: 30d

## 3. カート操作
sli:
  - name: "カートAPI可用性"
    type: availability
  - name: "カートAPI正確性"
    type: correctness
    measurement: "カート内容が正しく保持される割合"
slo:
  - availability: 99.9%
    window: 30d
  - correctness: 99.99%
    window: 30d
    rationale: "カートの内容が消えるのは致命的"

## 4. 決済処理
sli:
  - name: "決済API可用性"
    type: availability
  - name: "決済正確性"
    type: correctness
    measurement: "決済金額が注文金額と一致する割合"
slo:
  - availability: 99.95%
    window: 30d
    rationale: "決済は最も重要な機能"
  - correctness: 99.999%
    window: 30d
    rationale: "金額の不一致は信用問題"

## 5. 注文履歴
sli:
  - name: "注文履歴API可用性"
    type: availability
  - name: "注文履歴APIレイテンシ"
    type: latency
slo:
  - availability: 99.5%
    window: 30d
    rationale: "参照系のため、やや緩い目標で可"
  - latency_p95: 1000ms
    window: 30d
</details>

課題2: エラーバジェットポリシー(20分)

課題1で定義したSLOに基づくエラーバジェットポリシーを策定してください。

以下の項目を含めてください:

  • エラーバジェットの計算
  • 残量に応じたアクション(4段階)
  • バーンレートのアラート閾値
<details> <summary>解答例(自分で実装してから確認しよう)</summary>
markdown
# ShopNow エラーバジェットポリシー

## エラーバジェット計算

| SLO | エラーバジェット | 月間許容エラー数 | 月間許容ダウンタイム |
|-----|----------------|----------------|-------------------|
| 検索API 99.9% | 0.1% | 5,000件 | 43分 |
| 決済API 99.95% | 0.05% | 250件 | 22分 |

## アクション基準

### 残量 75-100%: 通常運用
- 新機能リリースを通常サイクルで実施
- 実験的な変更(A/Bテスト等)を許可
- 週次でバジェット残量を確認

### 残量 50-75%: 注意
- リリース前のステージングテストを強化
- カナリアリリースを必須化(10%から開始)
- 日次でバジェット残量を確認

### 残量 25-50%: 警戒
- 機能リリースは最小限に制限
- 信頼性改善タスクをスプリントの50%に
- ポストモーテムで消費原因を特定

### 残量 0-25%: 凍結
- 機能リリースを完全凍結
- 全エンジニアが信頼性改善に注力
- 毎日のバジェット確認ミーティング
- SLO回復まで凍結を継続

## バーンレートアラート

| バーンレート | アクション |
|-------------|-----------|
| > 2.0x | Slack 警告通知 |
| > 5.0x | オンコールに通知 + 即時調査 |
| > 10.0x | インシデント宣言 + 全員対応 |
</details>

課題3: トイル削減計画(25分)

ShopNow の運用チームが行っている以下の手動作業について、トイル削減計画を策定してください。

現在の手動作業リスト:

1. ログの異常チェック(毎日15分)
2. ステージング環境のデプロイ(毎日10分)
3. SSL証明書の有効期限チェック(毎週5分)
4. DBのバキューム実行(毎週30分)
5. 月次の利用統計レポート作成(月1回3時間)
6. ユーザーからの問い合わせ対応(毎日30分)
7. 本番環境のスケーリング調整(不定期、月2-3回、各30分)
8. 障害時のログ収集と関係者への連絡(不定期)

各作業のトイル判定と、優先順位を付けた自動化計画を作成してください。

<details> <summary>解答例(自分で実装してから確認しよう)</summary>
markdown
# ShopNow トイル削減計画

## トイル判定

| 作業 | トイル? | 頻度 | 月間工数 | 自動化難易度 | 優先度 |
|------|---------|------|---------|------------|--------|
| ログ異常チェック | Yes | 毎日 | 5h | 低 | 最優先 |
| ステージングデプロイ | Yes | 毎日 | 3.3h | 低 | 最優先 |
| SSL証明書チェック | Yes | 毎週 | 0.3h | 低 | 高 |
| DBバキューム | Yes | 毎週 | 2h | 低 | 高 |
| 月次レポート | Yes | 月1 | 3h | 中 | 中 |
| 問い合わせ対応 | 一部 | 毎日 | 10h | 中 | 高 |
| スケーリング | Yes | 不定期 | 1.5h | 中 | 高 |
| 障害時ログ収集 | Yes | 不定期 | 不定 | 低 | 最優先 |

月間トイル合計: 約 25h
トイル率: 25h / 160h = 15.6%

## 自動化計画

### Phase 1(今月): 最優先
1. ログ異常チェック
   → CloudWatch アラーム + Slack通知
   効果: 5h/月 削減

2. ステージングデプロイ
   → GitHub Actions で develop ブランチ push 時に自動デプロイ
   効果: 3.3h/月 削減

3. 障害時ログ収集
   → CloudWatch Logs Insights の定型クエリ + 自動レポート
   効果: 障害対応時間の短縮

### Phase 2(来月): 高
4. SSL証明書
   → AWS Certificate Manager で自動管理
   効果: 0.3h/月 削減 + 更新忘れリスク解消

5. DBバキューム
   → RDS の自動メンテナンスウィンドウ設定
   効果: 2h/月 削減

6. スケーリング
   → AWS Auto Scaling + CloudWatch メトリクスベース
   効果: 1.5h/月 削減

### Phase 3(再来月): 中
7. 問い合わせ対応
   → FAQ チャットボット + セルフサービスポータル
   効果: 推定 5h/月 削減

8. 月次レポート
   → Grafana ダッシュボード + 自動メール送信
   効果: 3h/月 削減

## 期待される効果
Phase 1 完了後: トイル率 10% 以下
全Phase完了後: トイル率 3% 以下
</details>

課題4: 総合SRE運用計画書(15分)

課題1〜3の内容を統合した1ページのSRE運用計画サマリーを作成してください。

<details> <summary>解答例(自分で実装してから確認しよう)</summary>
markdown
# ShopNow SRE 運用計画サマリー

## ミッション
ShopNow の信頼性を定量的に管理し、
ユーザー体験の品質を継続的に維持・向上させる。

## 重要SLO(上位3つ)
1. 決済API可用性: 99.95%(月間ダウンタイム22分以内)
2. 検索API可用性: 99.9%(月間ダウンタイム43分以内)
3. 決済正確性: 99.999%

## エラーバジェット運用
- 残量50%未満でカナリアリリース必須化
- 残量25%未満で機能リリース凍結
- バーンレート5x超でオンコール通知

## トイル削減ロードマップ
- 現在のトイル率: 15.6%
- 目標トイル率: 5%以下
- 達成期限: 3ヶ月以内

## オンコール体制
- 2名のローテーション(1週間交代)
- エスカレーション: 15分以内に応答なしで次へ

## レビューサイクル
- 週次: エラーバジェット残量確認
- 月次: SLO達成状況レビュー
- 四半期: SLO目標値の見直し
</details>

まとめ

課題内容時間
課題1SLI/SLO設計30分
課題2エラーバジェットポリシー20分
課題3トイル削減計画25分
課題4総合SRE運用計画書15分

チェックリスト

  • 主要ジャーニーに対するSLI/SLOを設計できた
  • エラーバジェットポリシーを策定できた
  • トイルの棚卸しと優先順位付けができた
  • 総合的なSRE運用計画を作成できた

次のステップへ

演習を完了したら、チェックポイントクイズでSRE原則の理解度を確認しましょう。


推定読了時間: 90分