LESSON 30分

ストーリー

高橋アーキテクト
オブザーバビリティの3本柱を学んだね。次は、それを使って”信頼性”を設計する方法を学ぼう
高橋アーキテクト
Site Reliability Engineering
高橋アーキテクト
SREは”ソフトウェアエンジニアリングのアプローチで運用課題を解決する”という考え方だ。100%の可用性を目指すのではなく、ビジネスに適切なレベルの信頼性を、エンジニアリングで実現する

SRE(Site Reliability Engineering)とは

SREはGoogleが提唱した運用のアプローチで、ソフトウェアエンジニアリングの手法を使って信頼性の課題を解決します。

従来の運用:
  開発チーム: 「新機能をリリースしたい」(変化を求める)
  運用チーム: 「安定性を維持したい」(変化を避ける)
  → 対立関係

SRE:
  SREチーム: 「エラーバジェット内で変化と安定のバランスを取る」
  → エンジニアリングで解決

SREの主要原則

1. エラーバジェット

// エラーバジェット: SLOで許容されるエラーの量
interface ErrorBudget {
  slo: number;              // 99.9%
  budgetPercent: number;    // 0.1%
  monthlyBudgetMinutes: number; // 約43分

  // バジェットの使い方
  usage: {
    newFeatureRelease: '30%';  // 新機能リリースのリスク
    infraChanges: '20%';       // インフラ変更のリスク
    plannedMaintenance: '10%'; // 計画メンテナンス
    reserve: '40%';            // 予期しない障害への備え
  };
}

// エラーバジェットが残っている場合
// → 新機能のリリースを積極的に進められる

// エラーバジェットを使い切った場合
// → 新機能リリースを凍結し、信頼性の改善に注力
エラーバジェット残量アクション
50%以上通常どおりリリースを推進
25-50%リスクの高いリリースは延期を検討
10-25%新機能リリースを制限、信頼性改善を優先
10%未満リリース凍結、信頼性改善に全力

2. Toilの削減

Toil(トイル)とは、手作業で反復的、自動化可能、戦術的で長期的な価値がない作業のことです。

// Toilの例
interface ToilExamples {
  manual: {
    description: '手動でのデプロイ作業';
    frequency: '毎週';
    timePerOccurrence: '30分';
    solution: 'CI/CDパイプラインの自動化';
  };
  repetitive: {
    description: '障害発生時の手動スケールアウト';
    frequency: '月2-3回';
    timePerOccurrence: '15分';
    solution: 'オートスケーリングの設定';
  };
  automatable: {
    description: 'SSL証明書の手動更新';
    frequency: '3ヶ月ごと';
    timePerOccurrence: '1時間';
    solution: 'cert-managerによる自動更新';
  };
}

// SREの目標: Toilを作業時間の50%以下に抑える
// 残りの50%をエンジニアリング(自動化、改善)に使う

3. 段階的なリリース

// カナリアリリースとSLO監視の組み合わせ
interface ProgressiveRollout {
  stages: {
    stage: string;
    trafficPercent: number;
    duration: string;
    rollbackCondition: string;
  }[];
}

const rolloutPlan: ProgressiveRollout = {
  stages: [
    { stage: 'Canary', trafficPercent: 1, duration: '15分', rollbackCondition: 'エラー率 > 1%' },
    { stage: 'Early', trafficPercent: 10, duration: '30分', rollbackCondition: 'エラー率 > 0.5%' },
    { stage: 'Mid', trafficPercent: 50, duration: '1時間', rollbackCondition: 'P99レイテンシ > 2s' },
    { stage: 'Full', trafficPercent: 100, duration: '-', rollbackCondition: 'SLO違反' },
  ],
};

4. 自動化の原則

レベル1: 手動(ドキュメントに手順がある)
レベル2: 半自動(スクリプトがあるが手動で実行)
レベル3: 自動(条件を満たすと自動実行、結果を人が確認)
レベル4: 自律(自動実行 + 自動判断 + 自動復旧)

SREの組織パターン

パターン説明適したケース
専任SREチーム独立したSREチームが横断的に対応大規模組織
組み込みSRE各開発チームにSREメンバーを配置中規模組織
You Build It, You Run It開発チーム自身が運用を担当小規模、DevOps文化

まとめ

ポイント内容
SREとはソフトウェアエンジニアリングで運用課題を解決するアプローチ
エラーバジェットSLOで許容されるエラー量、リリース判断の基準
Toil削減手作業を50%以下に抑え、自動化に投資
段階的リリースカナリア → 段階的拡大 + SLO監視

チェックリスト

  • SREの定義と従来の運用との違いを説明できる
  • エラーバジェットの考え方とリリース判断への活用を理解した
  • Toilの定義と削減方法を把握した
  • 段階的リリースの設計ができる

次のステップへ

次は「障害対応とインシデント管理」を学びます。障害が発生した際の体系的な対応プロセスを見ていきましょう。


推定読了時間: 30分