諸事情あって、AZ1にあるEBSスナップショットを、AZ2で起動中のEC2インスタンスにリストアする方法について調べました。
ググり方が悪いのか、以外と全体の流れ的なのは引っかからなかったので、備忘録しておきます。
やりたいこと
前提
- マルチリージョン環境ではない(諸事情でシングルAZ運用を強いられているとする)
- あるリージョン内に、「AZ1」と「AZ2」という2つのAZがあることとする
- AZ1には本番環境のEC2インスタンスがデプロイされている
- EC2インスタンスは基本的に常に動作中
- 定期的にEBSをスナップショットしている
- AZ2には検証環境のEC2インスタンスがデプロイされている
- EC2インスタンスは必要な時だけスポット的に起動する
- 本番環境のステージングとして使用している
想定要件
- AZ1で動作中の本番環境でAZ障害が発生した場合は、EBSスナップショットをAZ2の検証環境でリストアし、AZ2の検証環境を本番環境に切り替えて運用を継続できること
それで?
想定要件が実現可能なのかを調査する。
結論
先に結論を言うと、たぶん可能です。
以下のような流れになります。
- 前準備
- AZ1のEC2インスタンスのEBSについて、スナップショットを定期実行するように設定する
- AZ切り替え実施方法
- AZ2で、AZ1のスナップショットをEBSボリュームとして作成する
- AZ2のEC2インスタンスのEBSを↑で作成したEBSボリュームにアタッチする
たぶんこれだけです。
説明
以下、処理の流れを備忘録として残します。
1. EBSスナップショットの定期実行の設定
リストアするためにはスナップショットがあることが前提になりますので、まずはスナップショットの実行についてです。
↓の記事を参考にさせてもらいました。
EBSスナップショットを定期実行する方法 - Qiita
はじめに本記事では、EBSスナップショットを定期実行する方法をご紹介します。この記事の内容を実装することで、EBSスナップショットを手動で行う必要がなくなるEBS内のデータのバックアップ(ス…
- EC2のメニューから「ライフサイクルポリシーを作成」を選択
- ポリシータイプを「EBSスナップショットポリシー」を選択
- 以下選択
- 要件にあった条件を設定する
- 頻度:「毎日」すると毎日スナップショットが作られます
- 毎:たぶん何時間ごとにバックアップをするかという設定と思われます。「1時間」にすると1時間ごとに実行されていました。
- 開始時刻:ややこしいですけど、ここで指定した時間からスナップショットが実行されます。たとえば、毎が「1時間」で開始時刻が「20:10」だと、UTC20時から1時間ごとに3回だけバックアップされる感じです。
なお、UTCなので日本時間で「12:00」だと9時間引いて「03:00」にしないといけないです。ややこしいです - 保持タイプはとりあえず「カウント」で「3」にしとけば、3世代バックアップという感じになります
- 高速スナップショット復元という機能は有料の機能・・・
以上でスナップショットのスケジュール設定は完了です。
2.別AZにあるスナップショットを使用して、EC2インスタンスにアタッチ&起動する
まず、仕様上の大前提があります。
理由は不明なのですが、別AZにあるスナップショットを使ったリストアはできません。
ERROR: The request could not be satisfied
どういうことかというと、AZ1で作成されたスナップショットをAZ2ではリストア対象として使用できないということです。
(何故なんだろう?スナップショット自体はS3に保管されているという認識なんだけど、S3はAZに依存しないようなサービスだった気が・・・ちょっとこの辺は理解が足りてないです。)
そのため、以下のような迂回戦略をとります。
- AZ1のスナップショットを、AZ2でEBSボリューム化する(←これはできる)
- 1.で作ったEBSボリュームを、AZ2のEC2インスタンスにアタッチする
ようは、一回EBSボリューム化すること対応するわけです。
2-1.別AZのEBSのスナップショットを、EBSボリューム化する
- あらかじめスナップショット対象(AZ1のEBSのスナップショット)のスナップショットIDを控えておきます
- EC2のメニューから「ボリューム」を選択し、「ボリュームの作成」を押す
- AZ2でボリュームを作成する
2-2.作成したEBSボリュームを、EC2インスタンスにアタッチする
- AZ2で動作させるためのEC2インスタンスが起動中であれば、いったん停止します
- AZ2で動作していたEC2インスタンスのデバイス名を控えておきます
- AZ2で動作していたEC2インスタンスのEBSボリュームをでデタッチします
- AZ2で動作していたEC2インスタンスに、AZ1のスナップショットから作成したボリュームをアタッチします
- ボリュームのアタッチ対象にAZ2で起動していたEC2インスタンスを指定します
- AZ2のEC2インスタンスを開始します
以上で、AZ1で作成したスナップショットを使用して、AZ2で起動することができました。
コメント