ということで

以下のように OS と DATA で 2 つの EBS が繋がった EC2 でメンテナンスを行う際に、事前にスナップショットを取得しておくのだが、仮にメンテナンスに問題が発生した場合に、スナップショットから元の環境を復元する際に実行する処理をシェルスクリプトにしてみたのでメモしておきます。

なんばしよっと

スナップショット

まずは、以下のようなスクリプトでスナップショットを取得します。

gist.github.com

スナップショットを取得してから男は気づきました。そう、スナップショットには OS 上のデバイス情報が紐付いていない。
男は三日三晩悩みました…。そして、思いついたのがスナップショットのタグにデバイス名を書き込むことにしましたとさ。

$ for id in $(cat tmp/snapshot_ids); do aws ec2 describe-tags --filters "Name=resource-id,Values=${id}"; done
{
    "Tags": [
        {
            "ResourceType": "snapshot",
            "ResourceId": "snap-08xxxxxxxxxxxxxxxxx",
            "Value": "OS",
            "Key": "Name"
        },
        {
            "ResourceType": "snapshot",
            "ResourceId": "snap-08xxxxxxxxxxxxxxxxx",
            "Value": "/dev/sda1",
            "Key": "device"
        }
    ]
}
{
    "Tags": [
        {
            "ResourceType": "snapshot",
            "ResourceId": "snap-0xxxxxxxxxxxxxxxxx",
            "Value": "DATA",
            "Key": "Name"
        },
        {
            "ResourceType": "snapshot",
            "ResourceId": "snap-0xxxxxxxxxxxxxxxxx",
            "Value": "/dev/sdf",
            "Key": "device"
        }
    ]
}

アンサーソング(復元)

以下のアンサーソングスクリプトでスナップショットから EC2 を復元します。

gist.github.com

以上

waiter

待機中に何かメッセージを出せると良いと思いました。

メモでした

もっと良い方法がありそうですが、メモでした。

元記事はこちら

EBS スナップショットから EC2 を復元するシェルスクリプトの例