Amazon EBSをマウント済みのEC2インスタンスをリストアする

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon EC2を構築する際、ブート領域とデータ領域でEBSで分けることはよくあるやり方です。
こちらのAWSデザインパターン(CDP)でも紹介されていますね。

http://aws.clouddesignpattern.org/index.php/CDP:Snapshot%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

EC2(EBS)の日々のバックアップとして、スナップショットを利用しますが、
障害時などに、スナップショットからEBSをマウント済みのEC2の状態へリストアする手順をメモしておきます。

以下の構成にてマウント済みのものとします。

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1            7.9G  2.2G  5.3G  30% /
udev                  1.9G  4.0K  1.9G   1% /dev
tmpfs                 752M  320K  752M   1% /run
none                  5.0M     0  5.0M   0% /run/lock
none                  1.9G     0  1.9G   0% /run/shm
/dev/xvdf1            5.0G  251M  4.5G   6% /mnt/data

/mnt/dataにデータ領域として5GBマウントしています。

リストア手順ですが、まず、ec2-register を使って、コマンドラインからAMIを作成します。
環境変数としては、以下が必要です。

export JAVA_HOME=/usr/local/jdk6
export EC2_HOME=/opt/ec2-api-tools-1.4.4.2
export EC2_PRIVATE_KEY=/etc/ec2_keys/pk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem
export EC2_CERT=/etc/ec2_keys/cert-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem
export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
export PATH=$JAVA_HOME/bin:$EC2_HOME/bin:$PATH

1. AMIの作成

◯ 構文の例

ec2-register [--name 作成されるAMIの名前] [--description 作成されるAMIの説明]  \
[--root-device-name ルートデバイス名] [--snapshot ルートデバイスのスナップショットID]  \
[--block-device-mapping マウントしたデバイス名 = マウントしたデバイスのスナップショットID]  \
[--architecture アーキテクチャ名] [-kernel カーネルID]

まず、スナップショットからAMIを作成します。
スナップショットIDはManagementConsole等から確認し指定します。 カーネルIDも、ManagementConsoleから確認出来ます。

コマンドを実行して、AMIを作成します。

$ ec2-register --name cm_dev --description 'cm_dev_ami' \
--root-device-name /dev/sda1 --snapshot snap-xxxxxxxx \
--block-device-mapping /dev/sdf1=snap-xxxxxxxx \
--architecture x86_64 -kernel aki-ee5df7ef

IMAGE   ami-bce053bd

2. インスンタンスの起動

次に作成されたAMIから、インスタンスを起動します。

◯ 構文の例

ec2-run-instances AMI_ID [--instance-type インスタンスタイプ] [-key キーペア] [--kernel カーネルID] [-group セキュリティーグループ]

AMI_IDは①で作成されたIMAGE_IDを指定します。

コマンドを実行して、インスタンスを起動します。

$ ec2-run-instances ami-bce053bd --instance-type m1.small -key cm_key --kernel aki-ee5df7ef -group cm_group
INSTANCE        i-9b077a9b

3. EIPのアタッチ

必要に応じて、EIPをアタッチします。

◯ 構文の例

ec2-associate-address [-i インスタンスID] [IPアドレス]

コマンドを実行して、EIPをアタッチします。

$ ec2-associate-address -i i-9b077a9b XXX.XXX.XXX.XXX
ADDRESS XXX.XXX.XXX.XXX   i-9b077a9b

以上、リストアのメモでした。