Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

将实例存储支持的 AMI 转换为 Amazon EBS 支持的 AMI

您可以将拥有的实例存储支持的 Linux AMI 转换为 Amazon EBS 支持的 Linux AMI。

重要

您无法将实例存储支持的 Windows AMI 转换为 Amazon EBS 支持的 Windows AMI,并且无法转换您不拥有的 AMI。

将由实例存储支持的 AMI 转换为由 Amazon EBS 支持的 AMI

  1. 从 Amazon EBS 支持的 AMI 启动 Amazon Linux 实例。有关更多信息,请参阅 使用启动实例向导启动实例。Amazon Linux 实例预装了 AWS CLI 和 AMI 工具。

  2. 上传您用于将实例存储支持的 AMI 捆绑到实例的 X.509 私有密钥。我们使用此密钥确保只有您和 Amazon EC2 才能访问您的 AMI。

    1. 在您的实例上为 X.509 私有密钥创建临时目录,如下所示:

      [ec2-user ~]$ mkdir /tmp/cert
    2. 使用安全复制工具 (如 /tmp/certscp) 将您的 X.509 私有密钥从您的计算机复制到您的实例上的 目录。以下命令中的 my-private-key 参数是您用于通过 SSH 连接到实例的私有密钥。例如:

      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/ pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00
  3. 为您的 AWS 访问密钥和私有密钥设置环境变量。

    [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
  4. 为新 AMI 准备 Amazon EBS 卷。

    1. 使用 create-volume 命令在您的实例所在的同一可用区中创建空 Amazon EBS 卷。记下命令输出中的卷 ID。

      重要

      此 Amazon EBS 卷不小于原始实例存储根卷。

      [ec2-user ~]$ aws ec2 create-volume --size 10 --region us-west-2 --availability-zone us-west-2b
    2. 使用 attach-volume 命令将该卷附加到 Amazon EBS 支持的实例。

      [ec2-user ~]$ aws ec2 attach-volume --volume-id volume_id --instance-id instance_id --device /dev/sdb --region us-west-2
  5. 创建用于捆绑的文件夹。

    [ec2-user ~]$ mkdir /tmp/bundle
  6. 使用 /tmp/bundle 命令将由实例存储支持的 AMI 的捆绑下载到 ec2-download-bundle

    [ec2-user ~]$ ec2-download-bundle -b my-s3-bucket/bundle_folder/bundle_name -m image.manifest.xml -a $AWS_ACCESS_KEY -s $AWS_SECRET_KEY --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -d /tmp/bundle
  7. 使用 ec2-unbundle 命令从捆绑重新构建映像文件。

    1. 将目录更改为捆绑文件夹。

      [ec2-user ~]$ cd /tmp/bundle/
    2. 运行 ec2-unbundle 命令。

      [ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
  8. 将文件从未捆绑的映像复制到新 Amazon EBS 卷。

    [ec2-user bundle]$ sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
  9. 探测所有未捆绑的新分区的卷。

    [ec2-user bundle]$ sudo partprobe /dev/sdb1
  10. 列出块储存设备以查找要装载的设备名称。

    [ec2-user bundle]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT /dev/sda 202:0 0 8G 0 disk └─/dev/sda1 202:1 0 8G 0 part / /dev/sdb 202:80 0 10G 0 disk └─/dev/sdb1 202:81 0 10G 0 part

    在此示例中,要装载的分区是 /dev/sdb1,但您的设备名称可能有所不同。如果您的卷未分区,则要装载的设备类似于 /dev/sdb (没有设备分区尾部数字)。

  11. 为新 Amazon EBS 卷创建装载点并装载该卷。

    [ec2-user bundle]$ sudo mkdir /mnt/ebs [ec2-user bundle]$ sudo mount /dev/sdb1 /mnt/ebs
  12. 使用您常用的文本编辑器 (如 vimnano) 打开 EBS 卷上的 /etc/fstab 文件,并删除任何实例存储 (短暂) 卷条目。因为 Amazon EBS 卷装载在 /mnt/ebs 上,所以 fstab 文件位于 /mnt/ebs/etc/fstab 处。

    [ec2-user bundle]$ sudo nano /mnt/ebs/etc/fstab # LABEL=/ / ext4 defaults,noatime 1 1 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/sdb /media/ephemeral0 auto defaults,comment=cloudconfig 0 2

    在本示例中,应删除最后一行。

  13. 从实例中卸载和分离该卷。

    [ec2-user bundle]$ sudo umount /mnt/ebs [ec2-user bundle]$ aws ec2 detach-volume --volume-id volume_id --region us-west-2
  14. 按如下所示从新 Amazon EBS 卷创建 AMI。

    1. 创建新 Amazon EBS 卷的快照。

      [ec2-user bundle]$ aws ec2 create-snapshot --region us-west-2 --description "your_snapshot_description" --volume-id volume_id
    2. 检查快照是否完整。

      [ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snapshot_id
    3. 使用 describe-images 命令标识在原始 AMI 上使用的处理器架构、虚拟化类型和内核映像 (aki)。对于此步骤,您需要实例存储支持的原始 AMI 的 AMI ID。

      [ec2-user bundle]$ aws ec2 describe-images --region us-west-2 --image-id ami-id --output text IMAGES x86_64 amazon/amzn-ami-pv-2013.09.2.x86_64-s3 ami-8ef297be amazon available public machine aki-fc8f11cc instance-store paravirtual xen

      在此示例中,架构是 x86_64,内核映像 ID 是 aki-fc8f11cc。在以下步骤中使用这些值。如果上面命令的输出还列出 ari ID,请记下该 ID。

    4. 使用新 Amazon EBS 卷的快照 ID 和上一步中得到的值注册新 AMI。如果前一命令输出列出了 ari ID,请通过 --ramdisk-id ari_id 将其包括在后续命令中。

      [ec2-user bundle]$ aws ec2 register-image --region us-west-2 --name your_new_ami_name --block-device-mappings DeviceName=device-name,Ebs={SnapshotId=snapshot_id} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
  15. (可选) 测试了您可以从新 AMI 启动实例之后,您可以删除为此过程创建的 Amazon EBS 卷。

    aws ec2 delete-volume --volume-id volume_id