EC2インスタンスのバックアップ/AMI作成 方法

まず、EC2インスタンスには大きく2種類のタイプがあります。

    Instance-store (S3-backed)タイプのインスタンス
    EBS-backedタイプのインスタンス

Instance-storeインスタンスはrootボリュームがephemeralストレージ(仮想ホストに存在するストレージ)に保存されています。そのため、インスタンスをterminateをすると、rootボリュームのデータはなくなります。また、stop/startは仮想ホストを移動する可能性があり、rootボリュームは仮想ホストに依存しているため、Instance-storeインスタンスではstop/startはできないようになっています。

EBS-backedインスタンスではrootボリュームがEBSボリュームになっています。このため、インスタンスをstop/startやterminate(DeleteOnTerminationがfalseになっている場合のみ)した場合、EBSボリュームは消えませんのでそのボリュームを新たなインスタンスにアタッチするだけでデータをそのまま使える仕組みになっています。



【バックアップ作成方法 (Instance-storeインスタンス編)】

実はインスタンスのOSがLinuxかWindowsかでバックアップ方法が違います。

–Linux–
作業にはEC2 AMI Toolsが必要。Amazon AMIだと最初からインストールされていて、すぐ使える状態になっています。

*インスタンスとS3バケットのリージョンが異なる場合は、ec2-bundle-volコマンド時に–kernelオプションでS3バケットのリージョンに存在するAKIを指定する必要があります。インスタンスの同じAKIを違うリージョンで見つけるには、まず既存のインスタンスのAKIを元に「ec2-describe-images aki-****」を行い、「ec2-public-images-ap-northeast-1/pv-grub-hd0-V1.01-i386.gz.manifest.xml」という感じのマニフェストファイル名が得られるので「pv-grub-hd0-V1.01-i386.gz」この部分だけコピーをし、コピー先のリージョンで「ec2-describe-images –region (コピー先リージョン) | grep pv-grub-hd0-V1.01-i386.gz」を実行するとコピー先リージョンでのAKIを知ることができます。

$ec2-bundle-vol -d /mnt -k pk-****.pem -c cert-***.pem -u ****-****-****
Please specify a value for arch [i386]:
Copying / into the image file /mnt/image...
Excluding:
	 /sys
	 /
	 /proc
	 /proc/sys/fs/binfmt_misc
	 /dev/pts
	 /dev
	 /media
	 /mnt
	 /proc
	 /sys
	 /mnt/image
	 /mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00546737 s, 192 MB/s
mke2fs 1.41.12 (17-May-2010)
warning: Unable to get device geometry for /mnt/image
Bundling image file...
Splitting /mnt/image.tar.gz.enc...
Created image.part.00
Created image.part.01
...
Generating digests for each part...
Digests generated.
Unable to read instance meta-data for ancestor-ami-ids
Unable to read instance meta-data for ramdisk-id
Unable to read instance meta-data for product-codes
Creating bundle manifest...
ec2-bundle-vol complete.

バンドルし/mnt配下にイメージファイルが保存されたので、次にそれをS3にアップロードします。

$cd /mnt
$ec2-upload-bundle -b <バケット名> -m image.manifest.xml -a <アクセスキーID> -S <シークレットアクセスキー>
Uploading bundled image parts to the S3 bucket <バケット名> ...
Uploaded image.part.00
Uploaded image.part.01
...
Uploaded image.part.25
Uploading manifest ...
Uploaded manifest.
Bundle uploaded completed.

これでS3の指定したバケットにイメージファイルたちがアップロードされました。
次はアップロードされたファイルを元にAMIとして登録します。

$ec2-register <バケット名>/image.manifest.xml -n <AMI名> --region ap-northeast-1 -K pk-***.pem -C cert-***.pem
IMAGE ami-****

これで、TokyoリージョンにAMIを登録できました。

詳細:http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/creating-snapshot-s3-linux.html

–Windows–
Instance-storeのWindowsはご自身で用意することはできません。既に提供されているAMIを使い、カスタマイズ後バックアップし独自のAMIを登録しておきましょう。

1. まず、Windowsのアドミンパスワードはデフォルトのものから変更しておきましょう。

これはカスタマイズしたAMIで起動したインスタンスはec2-get-passwordコマンドを使ってもパスワードは取得できないためです。デフォルトのアドミンパスワードを使う場合はどこかに書いておいたほうが良いでしょう。

2. 次にバックアップを取った時にゴミデータが残らないように、起動中のウィンドウズインスタンスでディスククリーンアップやディスクデフラグを行ってください。

3. さて、いよいよバックアップをとります。ご自身のパソコンにEC2 AMI Toolsがインストールされていて、セットアップ済みなのを確認してください。

$ ec2-bundle-instance <インスタンスID> -b <保存するS3バケット名> -p <保存するイメージ名> -o <access_key_id> -w <secret_access_key>
BUNDLE	bun-*****	i--******	****-test	****-win-image	2011-06-22T01:21:23+0000	2011-06-22T01:21:23+0000	pending	

bundle処理には数十分は掛かります。bundle状況を確認するには、ec2-describe-bunle-tasksコマンドを使います。

$ ec2-describe-bundle-tasks 
BUNDLE	bun-*****	i-******	***-test	***-win-image	2011-06-22T01:21:23+0000	2011-06-22T01:46:08+0000	complete

「complete」になっているのを確認したら、完了です。S3の指定したバケットを確認したら複数のイメージファイルが存在しているのを確認できるかと思います。

4. バックアップをしたイメージファイルでAMIを作成場合は、ec2-registerコマンドを使います。

$ ec2-register <バケット名>/<バックアップ登録名>.manifest.xml -n <AMI登録名>
IMAGE	ami-*****

これでご自身のカスタマイズ ウィンドウズAMIを登録できたので、いつでもご利用なれます。

【バックアップ作成方法 (EBS-backedタイプのインスタンス)】

EBS-backedタイプの場合は、WindowsでもLinuxでも同じ作業です。Instance-storeタイプと比べて手順はすごく簡単になっています。

バックアップ(snapshot)だけ取っておきたい場合は、ec2-create-snapshotコマンドをインスタンスのルートEBSボリュームに行うだけで、S3にsnapshotが保存されます。

$ ec2-create-snapshot vol-c189a1a9
SNAPSHOT	snap-a67266ce	vol-c189a1a9	pending	2011-06-25T12:40:17+0000		103660458962	20

また、既存の状態のインスタンスのAMIを保存しておきたい場合は、ec2-create-imageコマンドをインスタンスに行うことで、インスタンスにアタッチしているEBSボリュームのバックアップ(snapshot)がS3に保存され、その情報を含んだAMIが登録されます。

$ ec2-create-image -n <AMI名> i-16ff7717
IMAGE	ami-******

About tkobayashi

#aws #cloud #programming #web #ninja #gym #movies #scuba #twoandahalfmen http://www.koba206.com
This entry was posted in amazon web services and tagged , , . Bookmark the permalink.

Leave a Reply