はじめに
先日、EC2のルートボリュームをインスタンス停止無しで復元できる機能が公開されました。
通常は以下の様にインスタンスを停止してデタッチ・アタッチで交換しますが、ルートボリュームをインスタンス停止無しで復元できるってどうやっているんだ?っていうことでどういう動作をしているのか確認してみました。
検証準備
今回はインスタンス2台で検証してみようと思います。
1台はルートボリューム交換を試すためのインスタンス、もう1台はボリューム交換するインスタンスからsyslog
を受け取ってログ確認するためのインスタンスを準備してみます。
syslog転送設定
syslog転送を行うための設定を行います。
送信側syslogは全てのシステムログを転送するため、「### RULES ###」直下に記載しておきます。
$ModLoad imudp
$UDPServerRun 514
#### RULES ####
*.* @[受信側インスタンスのIPアドレス]:514
セキュリティグループ設定
今回は検証なので適当に。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
カスタムUDP | UDP | 514 | 0.0.0.0/0 |
ルートボリューム交換検証
ルートボリュームの交換はAWSマネジメントコンソールのEC2
から「インスタンス」→「アクション」→「モニタリングとトラブルシューティング」→「ルートボリュームを置き換える」から行います。
次の画面でルートボリューム置き換え先のスナップショットを指定して「置き換えタスクを作成」を選択します。
スナップショットを指定しない場合は使用AMIのデフォルトに戻るようです。
ちなみにコマンドで実行する場合は以下コマンドとなります。
aws ec2 create-replace-root-volume-task --instance-id [インスタンスID] [--snapshot-id [スナップショットID]]
検証結果
ログを見たところ、やはり無停止でルートボリューム交換を行っているわけでは無く、一度停止を行ってから交換後のボリュームで起動させるような動作を行っているようです。
ルートボリューム交換実施時にping
も送信してみましたが、大体40秒程度応答がありませんでした。
交換後のボリュームは、ルートボリューム交換の実行を行ったタイミングで新たに作成されるようなので、以下の様な作業を実施していると考えられます。
- ルートボリューム置き換えタスク作成
- 交換後ボリューム作成
- インスタンスの停止
- 交換前ルートボリュームのデタッチ
- 交換後ルートボリュームのアタッチ
- インスタンスの起動
上記の動作だけ見れば、通常のボリューム交換作業とあまり変わりがありませんが、利点としてEC2インスタンスの状態としてはルートボリューム交換実施時も「実行中」状態となっており、停止状態に切り替わることはありませんでした。
そのため、EIP
の設定を行わないとインスタンス停止時に変わってしまうグローバルアドレスも、今回のルートボリュームの交換ではアドレスが変更されることもありませんでした。
以下ルートボリューム交換時に出力されたログです。
May 1 02:14:13 ip-172-21-0-34 systemd: Received SIGINT.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopped target Timers.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping Timers.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping Session 8 of user root.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopped target Cloud-init target.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping Cloud-init target.
May 1 02:14:13 ip-172-21-0-34 systemd: Removed slice system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping Session 2 of user ec2-user.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopped Execute cloud user/final scripts.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping Execute cloud user/final scripts...
May 1 02:14:13 ip-172-21-0-34 systemd: Removed slice system-ec2net\x2difup.slice.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping system-ec2net\x2difup.slice.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopped Dump dmesg to /var/log/dmesg.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping Dump dmesg to /var/log/dmesg...
May 1 02:14:13 ip-172-21-0-34 systemd: Stopped target rpc_pipefs.target.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping rpc_pipefs.target.
May 1 02:14:13 ip-172-21-0-34 systemd: Unmounting RPC Pipe File System...
May 1 02:14:13 ip-172-21-0-34 systemd: Stopped target Graphical Interface.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopping Graphical Interface.
May 1 02:14:13 ip-172-21-0-34 systemd: Stopped target Multi-User System.
後片付け
ルートボリューム交換前のボリュームが残ってしまうので、不要となるボリュームは削除しましょう。
おわりに
ボリュームのデタッチ・アタッチなどの操作を行わずに、ボタン一発で指定のスナップショットや初期AMIの状態に戻せるのは良いですね。
アドレス変更等されることもないため、調査目的だけではなく、他の用途にも使えるかなと感じました。