演習: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課題2: エラーバジェットポリシー(20分)
課題1で定義したSLOに基づくエラーバジェットポリシーを策定してください。
以下の項目を含めてください:
- エラーバジェットの計算
- 残量に応じたアクション(4段階)
- バーンレートのアラート閾値
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 | インシデント宣言 + 全員対応 |課題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% 以下課題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目標値の見直しまとめ
| 課題 | 内容 | 時間 |
|---|---|---|
| 課題1 | SLI/SLO設計 | 30分 |
| 課題2 | エラーバジェットポリシー | 20分 |
| 課題3 | トイル削減計画 | 25分 |
| 課題4 | 総合SRE運用計画書 | 15分 |
チェックリスト
- 主要ジャーニーに対するSLI/SLOを設計で きた
- エラーバジェットポリシーを策定できた
- トイルの棚卸しと優先順位付けができた
- 総合的なSRE運用計画を作成できた
次のステップへ
演習を完了したら、チェックポイントクイズでSRE原則の理解度を確認しましょう。
推定読了時間: 90分