「バックアップというのは知っているが、AWS上で行うにはどのようにしたらいいのか?」
今回はEC2のバックアップとリストア(復元)についてお話したいと思います。
そもそもなぜAWS上でバックアップを取る必要があるのでしょうか?
何をいまさら、という声が聞こえてきそうですが、まずはそこからお話したいと思います。
なぜAWSでもバックアップが必要なのか?
AWSはAmazonが提供するクラウドサービスです。
なのでよく「サーバーはAWSが面倒を見てくれるから故障とかは気にしなくていいんでしょ?」と思っている方がいらっしゃいます。
はい。
たしかに物理面についてはAWSが面倒をみますので、われわれAWS利用者側は物理面について気にする必要はありません。
例えばHDDの耐用年数がそろそろ切れそうなので交換を行う、なんてことは我々は気にする必要はありません。
ですが、ストレージ(EBS)が壊れたことによって中身(ユーザーデータ)までAWSが保証するかというと、そんなことはありません。
→ こちらのフォーラムでもそのことがAWSより回答されております。
ストレージは壊れるものです。
AWSでもEBSの年間故障率は0.1%〜0.2%とアナウンスされております。
(EBSの可用性と耐久性)
ストレージの故障以外にも何らかのトラブルによりユーザーデータが喪失するというリスクは事実としてありますし、その対策を行うのは我々AWS利用者側の責任となります。
ですので定期的なバックアップはAWSを利用していても欠かせないものなんです。
EC2バックアップ方法
EC2をバックアップするには2種類の方法があります。
- AMI(Amazon Machine Image)を作成する
- EBSのスナップショットを作成する
上記で2種類と書いたのはあくまでも方法として2種類あるというだけです。
2種類と言われるとそれぞれ異なるバックアップ方式でバックアップ先もデータ種別も異なると思われる方も多いかと思いますが、
そうではなく、2つともEBSのスナップショットがベースとなっています。
ではなぜ2種類あるのか?どのような違いがあるのかを詳しく解説していきます。
スナップショットとAMIの違い
EBSスナップショットはEBSのバックアップデータです。
「じゃあ、AMIは?」というと・・・
AMIとはEC2を起動する際に、どのCPUアーキテクチャを使用するか、何GBのHDDとするのかといったEC2の起動に必要な設定情報になります。
その設定情報の中には「どのEBSスナップショットを利用するか」という情報も含まれます。
<イメージ図>
つまりAMIとはEC2自体を復元(コピー)するための設定情報であり、ストレージのバックアップデータではありません。
純粋にストレージのバックアップデータというとEBSスナップショットを指します。
ですので、
AMIはEC2インスタンス自体を復元(コピー)する目的で作られるものであるのに対し、
EBSスナップショットはEBSを復元する目的で作られるものであると言えます。
ここで一つ注意していただきたいことがあります。
AMIによる復元はEC2インスタンス自体を新しく作り直します。
そのためパブリックIPが変わってしまうという欠点がございます。
システムの作り方によっては、元のEC2と比べて異なるパブリックIPが割当たると困るということがあるでしょう。
この問題を解決するには、EIPを利用することです。
AMIによる復元を考慮する場合、パブリックIPアドレスは変わっても問題ないかどうか、
問題であるならばEIPを使っているかどうかを確認しましょう。
スナップショットとAMIの利用料金
スナップショットとAMIに料金的な違いはありません。
どちらもEBSスナップショットがベースであり、そのスナップショットはS3に保管されます。
(S3コンソールからは見えないところに保管されています)
そのためEBSスナップショットによるバックアップも、AMIによるバックアップもスナップショット利用料金がかかります。
→ 詳しい金額はこちら
S3へ保管されるのは、EBSに実際に保存されているデータが対象となります。
例えば30GBのEBSであっても、EBSへ保存しているデータが1GBであれば1GB分のデータ量がS3にバックアップとして保管されることになります。
ちなみにS3に保管される際、AWS上で何らかの圧縮がかかっているようです。
ですので、実際には1GBより少ない量がS3に保管されることになります。
(実際にどのくらいの量がS3へ保管されているかは確認する術が無いようです。もし確認する術をご存知の方がいらっしゃいましたらご連絡ください!)
また、このEBSスナップショットは一回一回フルバックアップではありません。
一回目はフルバックアップとなりますが、二回目以降は増分バックアップとなります。
(根拠資料:AWSドキュメント Amazon EBS スナップショット)
間違えて一回目のスナップショットを削除した場合であっても、そこはAWSがいい感じに処理を行い二回目のスナップショットからでもストレージの復元が可能となるような仕組みになっていますので問題ありません。
EC2バックアップ方法
それでは具体的にそれぞれのバックアップ方法をご説明させていただきます。
EBSスナップショット作成によるバックアップ方法
(1)EC2コンソール画面の左メニューから[ボリューム]をクリックします
(2)バックアップ対象のEBSを選択し、[アクション]→[スナップショットの作成]をクリックします
(3)”説明”を入力し、[スナップショットの作成]をクリックします
以上です。
少しすると以下のようにスナップショット一覧にスナップショットが作成されます。
AMI作成によるバックアップ方法
AMIの作成はオンライン(無停止)で行うことも可能ですが、ファイルシステムの完全性が保証されません。
下記でも記載しておりますが、AMIの作成はインスタンスの再起動を伴うやり方が推奨されております。
(1)EC2コンソール画面の左メニューから[インスタンス]をクリックします
(2)バックアップ対象のインスタンスを選択し、[アクション]→[イメージ]→[イメージの作成]をクリックします
(3)”イメージ名”、”イメージの説明”を入力し、[イメージの作成]をクリックします
※ここで”再起動しない”にチェックを入れると、インスタンスを無停止でAMIの作成が行えますが、ファイルシステムの完全性が保証されないため、チェックは入れずにインスタンス再起動を伴うAMIの作成が推奨されております。
以上です。数分するとAMI一覧に作成したAMIが表示されます。
ちなみに、上記でも述べた通り、AMIを作成するとEBSスナップショットも自動的に作成されます。
このスナップショットはAMIに依存されておりますので、スナップショット単体では削除することはできません。
このスナップショットを削除したい場合は、まず依存元のAMIを削除し、その次にスナップショットを削除する、という流れになります。
バックアップからリストア(復元)する方法
それでは作成したバックアップから復元する方法をご紹介したいと思います。
EBSスナップショットからストレージを復元する
EBSスナップショットは上記でも述べたように、ストレージを復元するために利用されます。
そのため、EC2はそのままで、EBSをスナップショットから復元して付け替える方法をご紹介します。
大まかな流れは以下の通りです。
- スナップショットから新しくEBSを作成する
- EC2インスタンスを停止する
- EC2に新しく作成したEBSを付け替える
- EC2インスタンスを起動する
(1)EC2コンソール画面から[スナップショット]をクリックします
(2)スナップショットを選択し、[アクション]→[ボリュームの作成]をクリックします
(3)アベイラビリティゾーンを対象のEC2と同じにし、[ボリュームの作成]をクリックします
(4)EC2コンソール画面から[インスタンス]を選択します
(5)対象のEC2を選択し、[アクション]→[インスタンスの状態]→[停止]をクリックします
(6)[停止する]をクリックします
(7)対象のインスタンスからルートデバイスをメモしておきます(超重要です。下記(11)で使用します)
(8)EC2コンソールの左メニューの[ボリューム]をクリックし、EBS一覧を表示します
(9)古い方(現在EC2にアタッチされている)のEBSを選択し、[アクション]→[ボリュームのデタッチ]をクリックします
(10)新しく作成した方のEBSを選択し、[アクション]→[ボリュームのアタッチ]をクリックします
(11)”インスタンス”欄に対象のEC2インスタンスのインスタンスIDを、そして”デバイス”欄に上記(7)でメモした”ルートデバイス”のパスを入力します。
※デバイスが誤っているとEC2の起動ができなくなりますのでご注意ください。
(12)EC2コンソールの左メニューにある[インスタンス]をクリックし、インスタンス一覧を表示します
(13)対象のEC2インスタンスを選択し、[アクション]→[インスタンスの状態]→[開始]をクリックしインスタンスを起動します
以上でEBSスナップショットからデータの復元が完了です。
次はAMIからEC2インスタンス自体を復元(コピー)となります。
AMIからEC2インスタンスを復元(コピー)する
AMIからの復元は EC2自体の復元(コピー)です。
上記でも言いましたが、これはEC2を新しく作り直すということになります。
そのため全く同じEC2に復元したい場合、インスタンス作成時の設定値を元のEC2と同じ値に設定する必要があります。
プライベートIPは元のEC2が残っていると重複エラーとなりますので、元のEC2を削除してからAMIによる復元を行う必要があります。
(1)EC2コンソール画面から[AMI]をクリックします
(2)対象のAMIを選択して[作成]をクリックします
(3)”インスタンスタイプ”を選択し、[次の手順:インスタンスの詳細の設定]をクリックします
(4)インスタンスの詳細を設定し、[次の手順:ストレージの追加]をクリックします
(5)特に変更せず[次の手順:タグの追加]をクリックします
(6)必要があればタグの設定を行い[次の手順:セキュリティグループの設定をクリックします]
(7)”既存のセキュリティグループ”を設定し、元のEC2に適用されていたセキュリティグループを選択して[確認と作成]をクリックします
(8)[作成]をクリックします
(9)”既存のキーペアの選択”とし、元のEC2と同じキーペアを選択して、”〜〜認識しています。”にチェックを入れて[インスタンスの作成]をクリックします
(10)Elastic IPが割り当てられていたのであれば、復元したEC2へ割り当てます
以上でAMIからのEC2の復元が完了です。
スナップショットからの復元と比べるとプライベートIPどうする?とかセキュリティグループなんだっけ?とか
細かな設定値が必要となりますので、単純にデータを復元したいと思ったらスナップショットからの復元の方が簡単だということがおわかりいただけたんじゃないかと思います。
ここまでお読みいただきありがとうございました。
hidesanでした!