hiroohiのメモ

はてななのでITやスタートアップ周りの話(ほとんどが自分への備忘録だけど)を書いています。

Amazon EC2のイメージ(AMI)をus-eastからus-westにコピーする方法 こぼれ話

Amazon EC2のイメージ(AMI)をus-eastからus-westにコピーする方法 : Media Technology Labs (MTL) : メディアテクノロジーラボ ブログをかなりサマった形で書いたので、ココでは詳細版というかこぼれ話的な感じで書きたいと思います。

1. US-WESTのS3にコピー

既存のEC2インスタンス(us-east-1)にログインして、以下のコマンドを実行。

% ec2-migrate-bundle -k (your private key file) -c (your cert) -a (your access key) -s (your secret access key) --bucket (your source bucket) --manifest (your manifest filename) --location us-west-1 --region us-west-1 --destination-bucket (destination bucket you want to make)

ポイントですが、EC2インスタンスから初めてイメージを保存するときとは異なり、us-west側のS3上にあらかじめbucketを作っておく必要はありません。むしろ既にあると怒られます。" --destination-bucket"にus-westのS3に作成したいbucket名を指定すれば、自動的にbucketを作成し、そこにus-eastのイメージデータをコピーしてくれます。

ググってみると、こちらのように手動でイメージをコピーしなきゃいけないのかなと思い、S3 BucketExplorerを入れてus-westにバケットを切ったり、このドキュメントだけじゃなくフォーラムに質問した際も勧められたので"ec2-migrate-image"コマンドを試したりしたのですが、"ec2-migrate-image"のドキュメントをみると

This tool replaces ec2-migrate-bundle.

なんて書いてあったので、上記のコマンドにたどり着きました。そして"ec2-migrate-bundle"ってMacにインストールしたtoolにないよ〜と最新版をインストールし直したりしましたが、EC2インスタンス側にしかないと気づき、EC2にログインし、AMI作るためにアップロードした.pemファイルがまだ残っていたので念のためそのディレクトリに移動し、実行しました。

そしたらS3のBucketは事前に作らなくても良かったと…。

もう一つポイントとして、manifestが"bucketname/hoge/image.manifest.xml"のようにディレクトリを切って階層が深い場合の指定方法ですが、"--bucket bucketname/hoge --manifest image.manifest.xml"と指定すればOKです。

2. AMIを登録する

ElasticFoxでも出来ると思いますが、今回はローカルのMacBookからコマンドを実行しました。

% ec2-register --region us-west-1 --name (your ami name) (your new manifest fullpath on us-west-1)

"--region us-west-1"を忘れずに。

これで完成です。S3のツールやAPIをいっさい触らずに出来ますので、分かってみると非常に簡単でした。でも(自分にとっては)情報が英語だけだとやはり時間がかかりますね…