S3 Backed AMI移行トラブルシュート
S3 Backed AMIをリージョン間移行する際にハマりやすいポイントをまとめてみた
EBS Backed AMIの移行方法については、以前の記事を参照
これ以外にうまく行かないケースがあったら、twitter @j3tm0t0にmention/ #jawsug につぶやくか、AWSの日本語フォーラムのEC2カテゴリに投稿してみて下さい。
※必ず最新版のEC2 API Toolsにアップデートして下さい!
*追記*
EC2 AMI Toolsへのパッチがあります。AWSからリリースされるまではこちらを使ってみましょう。
スムーズにいく場合
$ ec2-migrate-image --bucket j3tm0t0-us-west --manifest centos-5.img.manifest.xml --destination-bucket j3tm0t0-ami-tokyo -o ACCESS_KEY -w SECRET_KEY Downloading manifest centos-5.img.manifest.xml from j3tm0t0-us-west... OK Copying 'centos-5.img.part.00' to 'j3tm0t0-ami-tokyo/centos-5.img.part.00'... OK Copying 'centos-5.img.part.01' to 'j3tm0t0-ami-tokyo/centos-5.img.part.01'... OK : Copying 'centos-5.img.part.38' to 'j3tm0t0-ami-tokyo/centos-5.img.part.38'... OK Your new bundle is in S3 at the following location: j3tm0t0-ami-tokyo/centos-5.img.manifest.xml $ ec2-register -n centos-5 j3tm0t0-ami-tokyo/centos-5.img.manifest.xml IMAGE ami-xxxxxxxx
ec2-registetrでAMIが登録できたが、起動時に403エラーと出て起動しない/Pending後すぐにterminateされる
S3上のファイルのパーミッションが正しくない場合には、インスタンス起動に失敗します。
- Linux系の場合はza-team@amazon.com
- Windowsの場合はec2-bundled-images@amazon.com
に対して、Bucket自体とファイル全部(manifest.xmlと.imgファイルすべて)にREAD権限を付ける必要があります。
ec2-migrate-imageが失敗する
●Bucketの作成に失敗する
Unexpected error: java.lang.RuntimeException: Unexpected status code: 400 at com.amazon.aes.service.impl.S3ConnectionImpl.translateStatusCode(S3ConnectionImpl.java:276) at com.amazon.aes.service.impl.S3ConnectionImpl.createBucket(S3ConnectionImpl.java:210) at com.amazon.aes.webservices.client.cmd.MigrateBundle.invokeOnline(MigrateBundle.java:230) at com.amazon.aes.webservices.client.cmd.BaseCmd.invoke(BaseCmd.java:767) at com.amazon.aes.webservices.client.cmd.MigrateBundle.main(MigrateBundle.java:673)
→あらかじめBucketをTokyoリージョンに作成して下さい。
●manifestのダウンロードに失敗する
移行元AMIが以下の条件を同時に満たす場合に起こります
- us-east-1以外のリージョンからの移行
- AMIがBucket直下ではなく、階層付き(例:j3tm0t0-us-west/centos5/centos-5.img.manifest.xml)で保存されている
Downloading manifest centos-5.img.manifest.xml from j3tm0t0-us-west/centos5...Unexpected error: java.lang.RuntimeException: Unexpected status code: 301 at com.amazon.aes.service.impl.S3ConnectionImpl.get(S3ConnectionImpl.java:90) at com.amazon.aes.webservices.client.cmd.MigrateBundle.downloadManifest(MigrateBundle.java:430) at com.amazon.aes.webservices.client.cmd.MigrateBundle.invokeOnline(MigrateBundle.java:196) at com.amazon.aes.webservices.client.cmd.BaseCmd.invoke(BaseCmd.java:800) at com.amazon.aes.webservices.client.cmd.MigrateBundle.main(MigrateBundle.java:673)
→手動でファイルコピー(パーミッションに注意)をして、ec2-registerする(AKI/ARIを指定している際には自分で適切な物を探して--kernel/--ramdiskで指定)
●移行先に階層が指定できない
ec2-migrate-imageでは移行先bucketに階層を指定する事ができません
Unexpecteted status com.amazon.aes.service.impl.S3ConnectionImpl$2@d3ade7 for destination bucket: j3tm0t0-jp/centos5
→以下の対応策が考えられます
1)階層構造をやめ、bucket直下に保存する
2)元のimageファイルがあれば、そこから直接Tokyoのbucketへec2-upload-bundleする