ゼロダウンタイムデプロイ
サービスを停止せずに新バージョンをデプロイする手法の総称
デプロイ可用性
ゼロダウンタイムデプロイとは
ゼロダウンタイムデプロイは、サービスを停止せずに新バージョンをデプロイする手法の総称である。ユーザーがダウンタイムを体験することなく、シームレスにアプリケーションが更新される。
デプロイ戦略の比較
| 戦略 | ダウンタイム | リスク | ロールバック速度 | コスト |
|---|---|---|---|---|
| 再起動デプロイ | あり | 低い | 遅い | 低い |
| ローリングアップデート | なし | 中程度 | 中程度 | 低い |
| Blue/Green | なし | 低い | 即座 | 高い (2 倍のリソース) |
| カナリアリリース | なし | 最低 | 即座 | 中程度 |
ローリングアップデート
Step 1: [v1] [v1] [v1] ← 全て旧バージョン
Step 2: [v2] [v1] [v1] ← 1 台ずつ更新
Step 3: [v2] [v2] [v1]
Step 4: [v2] [v2] [v2] ← 全て新バージョン
ECS と Kubernetes のデフォルト戦略。maxSurge と maxUnavailable で更新速度を制御する。
Blue/Green デプロイ
Blue (現行): [v1] [v1] [v1] ← トラフィックを受けている
Green (新規): [v2] [v2] [v2] ← テスト中
切り替え: ALB のターゲットグループを Green に変更
ロールバック: Blue に戻すだけ (即座)
カナリアリリース
Step 1: [v1] x 9, [v2] x 1 ← 10% のトラフィックを v2 に
Step 2: メトリクスを監視 (エラー率、レイテンシ)
Step 3: 問題なければ段階的に v2 を増やす
Step 4: [v2] x 10 ← 全トラフィックを v2 に
Lambda でのゼロダウンタイム
Lambda はデプロイ時に自動的にゼロダウンタイムで更新される。新しいコードがアップロードされると、次のリクエストから新バージョンが使われる。
エイリアスと加重ルーティングでカナリアリリースも可能:
前提条件
| 前提 | 理由 |
|---|---|
| 後方互換な API | 新旧バージョンが同時に動くため |
| DB マイグレーションの分離 | デプロイとスキーマ変更を同時にしない |
| ヘルスチェック | 新バージョンの正常性を確認 |
| ロールバック手順 | 問題発生時に即座に戻せる |
理論と実装の両面から学ぶなら関連書籍が参考になる。