ロールバック

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

デプロイ運用
ロールバック」の技術書を見る (4 冊) →

ロールバックとは

ロールバック (Rollback) は、デプロイやデータ変更に問題が発生した際に、以前の正常な状態に戻す操作である。迅速なロールバックは MTTR (平均復旧時間) を短縮し、障害の影響を最小化する。

ロールバック戦略

ロールバック戦略を以下にまとめる。

戦略速度リスク
Blue/Green 切り替え即座 (DNS/ALB 切り替え)低い
前バージョンの再デプロイ数分低い
CloudFormation ロールバック数分〜数十分中程度
DB マイグレーションの巻き戻し数分〜数時間高い

Lambda のロールバック

Lambda のロールバックの例を示す。

# エイリアスを前のバージョンに戻す
aws lambda update-alias \
  --function-name my-function \
  --name prod \
  --function-version 5  # 前のバージョン

CloudFormation のロールバック

CloudFormation のロールバックの例を示す。

# デプロイ失敗時に自動ロールバック (デフォルト)
sam deploy --on-failure ROLLBACK

# 手動でロールバック
aws cloudformation rollback-stack --stack-name my-stack

CloudFormation はデプロイ失敗時に自動的に前の状態にロールバックする。--on-failure DO_NOTHING でロールバックを無効化し、デバッグすることも可能。

ECS のロールバック

ECS のロールバックを図で示す。

1. 新しいタスク定義 (v2) でデプロイ
2. ヘルスチェック失敗を検知
3. CodeDeploy が自動的に v1 にロールバック

DB のロールバック

DB のロールバックを以下にまとめる。

方法速度データ損失
Expand-Contract パターン即座 (旧カラムに戻す)なし
ダウンマイグレーション数分なし (設計次第)
スナップショットからの復元数十分スナップショット以降のデータ
DynamoDB PITR数分〜数十分復元時点以降のデータ

ロールバックできない変更

ロールバックできない変更を以下にまとめる。

変更理由対策
DB カラムの削除データが消えるExpand-Contract で段階的に
暗号化キーの削除データが復号不能キーの削除を遅延
S3 オブジェクトの削除バージョニングなしだと復元不能バージョニングを有効化

ロールバック計画

デプロイ前に必ずロールバック手順を確認する。

1. ロールバックのトリガー条件を定義 (エラー率 > 5%, レイテンシ > 2秒)
2. ロールバック手順を文書化
3. ロールバックのテストを実施
4. ロールバックにかかる時間を見積もる

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

この記事は役に立ちましたか?

関連用語

関連する記事