ロールバック
デプロイやデータ変更を以前の状態に戻し、障害からの復旧を行う操作
デプロイ運用
ロールバックとは
ロールバック (Rollback) は、デプロイやデータ変更に問題が発生した際に、以前の正常な状態に戻す操作である。迅速なロールバックは MTTR (平均復旧時間) を短縮し、障害の影響を最小化する。
ロールバック戦略
| 戦略 | 速度 | リスク |
|---|---|---|
| Blue/Green 切り替え | 即座 (DNS/ALB 切り替え) | 低い |
| 前バージョンの再デプロイ | 数分 | 低い |
| CloudFormation ロールバック | 数分〜数十分 | 中程度 |
| DB マイグレーションの巻き戻し | 数分〜数時間 | 高い |
Lambda のロールバック
# エイリアスを前のバージョンに戻す
aws lambda update-alias \
--function-name my-function \
--name prod \
--function-version 5 # 前のバージョン
CloudFormation のロールバック
# デプロイ失敗時に自動ロールバック (デフォルト)
sam deploy --on-failure ROLLBACK
# 手動でロールバック
aws cloudformation rollback-stack --stack-name my-stack
CloudFormation はデプロイ失敗時に自動的に前の状態にロールバックする。--on-failure DO_NOTHING でロールバックを無効化し、デバッグすることも可能。
ECS のロールバック
1. 新しいタスク定義 (v2) でデプロイ
2. ヘルスチェック失敗を検知
3. CodeDeploy が自動的に v1 にロールバック
DB のロールバック
| 方法 | 速度 | データ損失 |
|---|---|---|
| Expand-Contract パターン | 即座 (旧カラムに戻す) | なし |
| ダウンマイグレーション | 数分 | なし (設計次第) |
| スナップショットからの復元 | 数十分 | スナップショット以降のデータ |
| DynamoDB PITR | 数分〜数十分 | 復元時点以降のデータ |
ロールバックできない変更
| 変更 | 理由 | 対策 |
|---|---|---|
| DB カラムの削除 | データが消える | Expand-Contract で段階的に |
| 暗号化キーの削除 | データが復号不能 | キーの削除を遅延 |
| S3 オブジェクトの削除 | バージョニングなしだと復元不能 | バージョニングを有効化 |
ロールバック計画
デプロイ前に必ずロールバック手順を確認する。
1. ロールバックのトリガー条件を定義 (エラー率 > 5%, レイテンシ > 2秒)
2. ロールバック手順を文書化
3. ロールバックのテストを実施
4. ロールバックにかかる時間を見積もる
ロールバックの理解を深めるには関連書籍が参考になる。