我有点困惑。我试了好几天,但还是没成功。希望有人能给我一些启发。
我在 us-east-1 区域运行 1 个实例(Amazon AMI x86_64 AMI,EBS 支持),我想迁移到 ap-southeast-1 区域(使用 S3 存储桶)。
以下是我采取的步骤:
1. ec2-bundle-vol \
-k pk-xxx.pem \
-u xxx \
-c cert-xxx.pem
2. ec2-migrate-manifest \
-m /tmp/image.manifest.xml \
-c cert-xxx.pem \
-k pk-xxx.pem \
-a xxx \
-s xxx \
--region ap-southeast-1
3. ec2-upload-bundle \
-b my-sg-bucket \
-m /tmp/image.manifest.xml \
-a xxx \
-s xxx \
--location ap-southeast-1
4. ec2-register \
-K pk-xxx.pem \
-C cert-xxx.pem \
--region ap-southeast-1 \
my-sg-bucket/image.manifest.xml \
--name my-ami
一切正常。我能够在 AP 区域看到新创建的 AMI。但是当我尝试使用该 AMI 创建实例时,我无法选择“t1.micro”作为实例类型。我很快发现该 AMI 是一个实例存储 AMI(奇怪的是它首先是 EBS 支持的)。
这让我思考我在这里做错了什么,将 EBS 支持的实例迁移到不同的区域而不将其更改为实例存储 AMI?
谢谢。
答案1
您看到的问题是因为命令“ec2-bundle-vol”用于创建 S3 支持的 AMI。因此,您已将 EBS 支持的 AMI 创建、上传并注册为 S3 支持的 AMI,然后在新区域启动该 S3 支持的 AMI。
不幸的是,没有内置方法可以在区域之间迁移具有 EBS 根的 AMI。您需要走很长的路。
- 首先,创建要迁移的根卷的快照
- 然后,在源区域和目标区域启动实例。
- 如果您不想为实例使用不同的密钥(因为它们位于不同的区域),您应该首先导入自己的密钥对。
- 从快照创建 EBS 卷,并将其附加到源区域中的实例。
- 在目标区域创建一个新的(空)EBS 卷,并附加到您在那里启动的实例。
- 使用所需的文件系统格式化目标区域中的 EBS 卷
- 在 EBS 卷之间复制数据
- 通过 SSH 进行 rsync 可能是最佳选择
- 创建新的(目标)EBS 卷的快照
- 根据该快照注册一个 AMI
- 使用完毕后终止您启动的实例
您将承担实例、数据传输和 EBS I/O 的费用。
实际上还有另一种选择可能更适合您的需求。
可以下载和解绑 S3 支持的 AMI,从而生成原始磁盘的映像 - 然后您可以将该映像写入 EBS 卷,然后就可以开始了。
本质上,您将执行与已经执行的相同的第一步:
- ec2-bundle-volume ...
- ec2-迁移清单...
- ec2-上传包 ...
然后,在目标区域:
- 启动新实例,并附加足够大小的 EBS 卷
- 您还需要实例上有足够的可用空间来临时存储图像(小型实例上的临时存储应该足够)。
- 将捆绑卷下载到实例:
ec2-download-bundle -b BUCKET_NAME -m MANIFEST.xml -d 目标目录
- 您还需要传递您的 ACCESS_KEY、SECRET_ACCESS_KEY 和 PRIVATE_KEY,或者将其设置为环境变量。
- 解除卷捆绑:
ec2-unbundle -m /local/path/to/manifest.xml -s 源目录 -d 目标目录
- 复制到 EBS 卷:
dd if=/path/to/image of=/dev/NAME
答案2
跨区域迁移实例确实并不像人们想象的那么简单,尽管这是一个已解决的问题:
- Eric Hammonds 的详细文章解释了常用的方法在 EC2 区域之间复制 EBS Boot AMI。
- Rob Linton 的更直观的演示也说明了同样的方法在 AWS 区域之间迁移 EBS AMI。
- 最后,艾哈迈德·阿卜杜拉开始实施EC2 工具用于跨区域迁移 EBS 支持的 AMI基于博托2011 年 2 月,这一计划看起来很有希望,但不幸的是,该计划未能完成各自蓝图, 看EC2 迁移 EBS AMI 工具,招募志愿者有关事态的详情如下:
- 项目现在能够在两个指定区域中启动两个实用程序实例,并在源实例中安装源卷
- 剩下的就是附加目标卷并同步内容。