今回は、AWS上に構築したAmazon Linux2のインスタンスのスナップショットを取得するまでを手順にしました。
期待する目標
本手順の目標は以下の通りです。
- インスタンスのスナップショットを取得できる
- スナップショットからインスタンスを復元できる
- スナップショットの削除ができる
- スナップショットの概念が理解できる
前提条件
インスタンスのスナップショットを取得することから、最低限EC2インスタンスの構築ができている必要があります。
インスタンスの作成については、こちらの手順より確認してください。
作業の前提条件として、インスタンスの作成ができていること、インスタンスへリモート接続ができることが前提条件となります。
EC2 インスタンスのスナップショット作成
インスタンスのスナップショットは、作成した時点のディスク情報を保存し、復元できる状態にする機能です。
作成した時点のディスクを別のディスクにコピーしてディスクの付け替えを行うことができます。
一時的なバックアップにも使用することができ、大規模な変更を行う前にスナップショットを取得し、問題が発生したら、変更前のスナップショットに戻す。などの運用を行うことができます。
また、スナップショットを取得すると、別のディスクとして書き出されるため、本番環境のクローンとしても使用することができます。
ただ、EBSのスナップショットはS3などに比べ割高なので、利用料金には留意する必要があります。
EBSの詳しい料金については、こちらをご覧ください。
参考までに、60GBのgp2のEBSだと1カ月当たり約1000円程度になります。

[EC2]-[インスタンス]より、スナップショットを取得するインタンスを確認します。

[EC2]-[Elastic Block Storage]-[ボリューム]より、インスタンスに紐づくEBSを確認します。
今回は、このEBSのスナップショットを取得していきます。

スナップショットが正常に機能しているかを確認するため、インスタンス上にテスト用のテキストファイルを配置しました。

スナップショットは稼働中のインスタンスでも取得は可能ですが、ディスクへの書き込みが発生する可能性があるため、インスタンスを停止して、静止点でスナップショットを取得することをお勧めします。
[EC2]-[インスタンス]-[インスタンス]より、スナップショットを取得するインスタンスを選択し、[インスタンスの状態]-[インスタンスを停止]を押下します。

[停止 インスタンス?]と確認メッセージが表示されるため、停止するインスタンスを確認し、[停止]を選択します。

インスタンスが停止したことを確認します。

[EC2]-[Elastic Block Storage]-[ボリューム]を選択し、インスタンスにアタッチされているEBSボリュームを選択します。
ボリュームの詳細より、アタッチされているインスタンスを確認します。
[アクション]-[スナップショットの作成]を選択します。

[スナップショットの作成]より、スナップショットを取得するボリュームを確認し、必要に応じて説明を追加します。
確認が完了したら、[スナップショットの作成]を押下します。

スナップショットが正常に作成されたメッセージを確認します。

[EC2]-[Elastic Block Storage]-[スナップショット]を選択し、作成されたスナップショットを確認します。
EBSのボリュームサイズにより、スナップショットの作成時間は異なりますが、8GB程度のEBSだと一瞬で作成が完了しました。スナップショットの進行状況が100%にならなくても作成元のインスタンスは起動が可能です。

スナップショットを作成したら、スナップショット名を変更しておきましょう。
この時に、どの時点のスナップショットかを区別できるような命名規則を決めておくと、スナップショットの整理や戻す際に迷子にならずに済みます。

スナップショットの作成が完了したため、スナップショットを取得したインスタンスを起動していきます。
[EC2]-[インスタンス]-[インスタンス]より、起動するインスタンスを作成して、[インスタンスの状態]-[インスタンスの開始]を選択します。
以上でインスタンスの作成手順は完了です。
スナップショットからの復元
インスタンスのスナップショットが取得できたら、実際に復元できるかを確認していきます。
AWSの場合、EBSのスナップショットを取得すると、取得時点のEBSが別のEBSボリュームとして作成されます。
イメージとしては、スナップショットを戻す≒スナップショットを取得した時点のディスクに差し替えるというイメージになります。

今回はスナップショットが正常の戻っているかを確認するため、スナップショット作成以前にテストファイルを作成していました。
そのテストファイルをスナップショット取得後に削除し、スナップショットから戻すことで、ファイルが正常に復元されているかを確認します。
インスタンス上でrmコマンドを使用し、ファイルを削除します。

ファイルの削除が完了したら、AWSコンソールより、[EC2]-[インスタンス]-[インスタンス]より、スナップショットを戻すインスタンスを選択します。
インスタンス選択後、[アクション]-[モニタリングとトラブルシューティング]-[ルートボリュームを置き換える]を選択します。

[ルートボリュームを置き換える]より、置き換えるインスタンスと、戻すスナップショットを選択し、[置き換えタスクを作成]を選択します。

復元ボリュームタスクが正常に作成されましたのメッセージが出て、ボリューム置き換えのタスクが正常に行われたことを確認します。

[EC2]-[Elastic Block Storage]-[ボリューム]より、新しいボリュームが作成され、インスタンスがアタッチされていることを確認します。
スナップショットから復元を実行すると、スナップショットを取った時点のディスクが生成され、新しいディスクとしてインスタンスにアタッチされます。
このように、インスタンスに紐づくEBSを変えることで、自由にインスタンスの状態を変更することができます。
ここで1点気を付けてほしいことがあります。
Active Directoryなど、複数のサーバで同期を行っているサーバについては、EBSからスナップショットを復元することはお勧めしません。
現在の同期情報とスナップショット復元時の同期情報に不整合が発生し、場合によっては同期ができなくなる可能性があります。(特にActive DirectoryやVMware Horizon Connection Serverなど)

実際にスナップショットから復元できているかを確認します。
EC2のインスタンスに接続し、削除したテスト用ファイルが復元されているかを確認しました。
問題なくスナップショット取得時のファイル構成に戻っています。
以上でスナップショットからの復元手順は完了です。
スナップショットの削除
スナップショットを作成し、不要になったらスナップショットを削除します。

[EC2]-[Elastic Block Storage]-[スナップショット]を選択します。
作成したスナップショットを選択し、[アクション]-[スナップショットの削除]を選択します。

確認のメッセージが入るので、スナップショットIDを確認し、[削除]を選択します。

該当のスナップショットが正常に削除されたメッセージが表示され、スナップショットが削除されればスナップショットの削除は完了です。
EBSの削除
前項でスナップショットからルートボリュームの置き換えを行いました。
その際に、新しいEBSボリュームが作成され、インスタンスにアタッチされました。
置き換えを行ったインスタンスを削除すると、そのインスタンスに紐づくEBSボリュームは同時に削除されます。
ただ、スナップショットから復元する前のボリューム(元々のボリューム)は現在インスタンスにアタッチされておらず、ボリュームとして残り続けます。
そのため、必要に応じて手動で削除する必要があります。

[EC2]-[Elastic Block Storage]-[ボリューム]を選択し、削除するEBSボリュームを選択します。
この時に、どのインスタンスにもアタッチされていないことを確認します。

[アクション]-[ボリュームの削除]を選択します。

ボリューム削除のメッセージが表示されるため、対象のボリュームであることを確認して、[削除]を選択します。

ボリュームが正常に削除され、該当のボリュームが存在しないことを確認します。
以上でEBSボリュームの削除手順は完了です。
まとめ
今回は、EC2インスタンスのスナップショットを作成し、スナップショットから復元する手順を記載しました。
スナップショットを活用することで、大規模な変更を行う場合や、OSの設定変更テストなど問題が発生した際に切り戻しなどに役に立つと思われます。
今回、Linuxでスナップショットを取得しましたが、Windowsでも同じ手順でスナップショットを復元することが可能です。
スナップショットを取得する際の注意点としては、静止点を取った方がインスタンスの復元が成功する確率が高くなる。という点です。
WindowsやLinuxは起動状態でも場合よってはディスクアクセスを行っている場合があり、起動中でもインスタンスのスナップショットは取得できますが、復元時に書き込み中のものを復元してしまい、正常に復元できない場合が否定できませんので、可能な限りインスタンスをシャットダウンした状態でスナップショットを取得することを強くお勧めします。
おまけ
本ブログではVMwareやWindows、Linuxのインストール手順等も公開しております。
インフラエンジニアとして有益な記事や無益なコンテンツも作成しておりますので、通勤時間や休憩時間、休日のスキマ時間等に合わせて読んでいただけると幸いです。
また、Youtubeで解説動画も鋭意作成中です。本ブログで記事にしているものも動画にしようと思っておりますので、よろしくお願いいたします。
コメント