跨区域迁移时,EBS 支持的 AMI 将成为实例存储 AMI

跨区域迁移时,EBS 支持的 AMI 将成为实例存储 AMI

我有点困惑。我试了好几天,但还是没成功。希望有人能给我一些启发。

我在 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

跨区域迁移实例确实并不像人们想象的那么简单,尽管这是一个已解决的问题:

相关内容