ロールバック

デプロイやデータ変更を以前の状態に戻し、障害からの復旧を行う操作

デプロイ運用

ロールバックとは

ロールバック (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. ロールバックにかかる時間を見積もる

ロールバックの理解を深めるには関連書籍が参考になる。

関連用語