プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Amazon EC2インスタンスの保存

Amazonのドキュメント




まずは、公開鍵と証明証をEC2インスタンスにコピー。

$scp -i id_rsa-gsg-keypair pk-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem cert-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem root@domU-12-34-31-00-00-05.usma1.compute.amazonaws.com:/mnt

そして、バックアップ出来ているかの確認の為に、適当にファイルを作りましょう。

#touch /var/www/hoge.html

EC2インスタンスの保存。結構な時間が掛かります。
uの部分がAccount Numberです。忘れたらActivity summaryのページにログインしましょう。使用料金の一番上の所に載っています。
※下の例は、Amazonのスターティングガイドに載っているサンプルIDです。自分のIDは、外には晒さないようにしましょう。

# ec2-bundle-vol -d /mnt -k /mnt/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem -c /mnt/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem -u 495219933132 -r i386
Copying / into the image file /mnt/image.img...
Excluding: 
     /sys
     /dev/shm
     /proc
     /dev/pts
     /proc/sys/fs/binfmt_misc
     /dev
     /media
     /mnt
     /proc
     /sys
     /tmp/image.img
     /mnt/img-mnt
1+0 records in
1+0 records out
mke2fs 1.38 (30-Jun-2005)
warning: 256 blocks unused.

Splitting /mnt/image.gz.crypt...
Created image.part.00
Created image.part.01
Created image.part.02
Created image.part.03
...
Created image.part.22
Created image.part.23
Generating digests for each part...
Digests generated.
Creating bundle manifest...
Bundle Volume complete.

結構時間がかかります。数十分は待ちましょう

S3にアップロードします。
aがアクセスIDです。sがアクセス秘密IDです。共にAWS Access Identifiersにログインすると確認できます。bはバケットの名前です。自分が認識出来れば、何でも良いです。例えばバックアップした日付にしたければ、-b `date +%Y%m%d`といった感じで出来ます。しかし、バケット名はAmazon内でのドメインのように存在なので、一つとって同じバケット名を使い続けるのがよいでしょう。

# ec2-upload-bundle -b <your-s3-bucket> -m /mnt/image.manifest.xml -a <aws-access-key-id> -s <aws-secret-access-key> 
Encrypting bundle manifest...
Completed encryption.
Uploading encrypted manifest...
Uploaded encrypted manifest to https://s3.amazonaws.com/<your-s3-bucket>/image.manifest.xml.
Uploading bundled AMI parts to https://s3.amazonaws.com/<your-s3-bucket>/image...
Uploaded image.part.00 to https://s3.amazonaws.com/<your-s3-bucket>/image.part.00.
Uploaded image.part.01 to https://s3.amazonaws.com/<your-s3-bucket>/image.part.01.
Uploaded image.part.02 to https://s3.amazonaws.com/<your-s3-bucket>/image.part.02.
Uploaded image.part.03 to https://s3.amazonaws.com/<your-s3-bucket>/image.part.03.
...
Uploaded image.part.23 to https://s3.amazonaws.com/<your-s3-bucket>/image.part.23.
Uploaded image.part.24 to https://s3.amazonaws.com/<your-s3-bucket>/image.part.24.
Upload Bundle complete.   


S3にアップロードしたイメージをAMIとして登録します。これにより使用可能なインスタンスのリストに出て来るようになります。
ローカルのPCから

PROMPT> ec2-register <your-s3-bucket>/image.manifest.xml
IMAGE ami-5bae4b32 

正常に終了したら、起動中のインスタンスを停止しましょう。

ec2-terminate-instances i-06e7166f

再度、使用可能なインスタンスの一覧を見てみましょう
先ほどのインスタンスが追加されているので、起動。ログイン

$ec2-describe-images -o self -o amazon
IMAGE   ami-5bae4b32   ec2-20080127/image.manifest.xml 021010746129    available       private

$ ec2-run-instances ami-5bae4b32 -k gsg-keypair
$ssh -i id_rsa-gsg-keypair root@****.z-1.compute-1.amazonaws.com
#ls /var/www/htdocs
index.html

ちゃんと出来ています。

注意点としては、バックアップの対象は/dev/sda1のみということ。データ等は、/dev/sda2に置く事が多いと思いますが、その場合別途S3に保存しておく必要があります。

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  981M  8.4G  11% /
/dev/sda2             147G  189M  140G   1% /mnt