将实例存储支持的 AMI 转换为 EBS 支持的 AMI
您可以将拥有的实例存储支持的 Linux AMI 转换为 Amazon EBS 支持的 Linux AMI。
重要
您无法转换不属于自己的 AMI。
将由实例存储支持的 AMI 转换为 Amazon EBS-backed AMI
-
从 Amazon EBS-backed AMI 启动 Amazon Linux 实例。有关更多信息,请参阅 使用控制台中的启动实例向导来启动 EC2 实例。Amazon Linux 实例预先安装了 Amazon CLI 和 AMI 工具。
-
上传您用于将实例存储支持的 AMI 捆绑到实例的 X.509 私有密钥。我们使用此密钥确保只有您和 Amazon EC2 才能访问您的 AMI。
-
在您的实例上为 X.509 私有密钥创建临时目录,如下所示:
[ec2-user ~]$mkdir /tmp/cert -
使用安全复制工具 (如
/tmp/certscp) 将您的 X.509 私有密钥从您的计算机复制到您实例上的 目录。以下命令中的my-private-key参数是您用于通过 SSH 连接到实例的私有密钥。例如:you@your_computer:~ $scp -imy-private-key.pem/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pemec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/ pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00
-
-
配置环境变量以使用 Amazon CLI。有关更多信息,请参阅 Environment variables。
-
(推荐)为您的 Amazon 访问密钥、私有密钥和会话令牌设置环境变量。
[ec2-user ~]$export AWS_ACCESS_KEY_ID=your_access_key_id[ec2-user ~]$export AWS_SECRET_ACCESS_KEY=your_secret_access_key[ec2-user ~]$export AWS_SESSION_TOKEN=your_session_token 为您的 Amazon 访问密钥和私有密钥设置环境变量。
[ec2-user ~]$export AWS_ACCESS_KEY_ID=your_access_key_id[ec2-user ~]$export AWS_SECRET_ACCESS_KEY=your_secret_access_key
-
-
为新 AMI 准备 Amazon Elastic Block Store (Amazon EBS) 卷。
-
使用 create-volume 命令在您的实例所在的同一可用区中创建空 EBS 卷。记下命令输出中的卷 ID。
重要
此 EBS 卷不小于原始实例存储根卷。
aws ec2 create-volume \ --size 10 \ --regionus-west-2\ --availability-zoneus-west-2b -
使用 attach-volume 命令将该卷附加到 Amazon EBS 支持的实例。
aws ec2 attach-volume \ --volume-idvol-01234567890abcdef\ --instance-idi-1234567890abcdef0\ --regionus-west-2
-
-
创建用于捆绑的文件夹。
[ec2-user ~]$mkdir /tmp/bundle -
使用
/tmp/bundle命令将由实例存储支持的 AMI 的捆绑下载到 ec2-download-bundle。[ec2-user ~]$ec2-download-bundle -bamzn-s3-demo-bucket/bundle_folder/bundle_name-m image.manifest.xml -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY --privatekey/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem-d /tmp/bundle -
使用 ec2-unbundle 命令从捆绑重新构建映像文件。
-
将目录更改为捆绑文件夹。
[ec2-user ~]$cd /tmp/bundle/ -
运行 ec2-unbundle 命令。
[ec2-user bundle]$ec2-unbundle -m image.manifest.xml --privatekey/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-
-
将文件从未捆绑的映像复制到新 EBS 卷。
[ec2-user bundle]$sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M -
探测所有未捆绑的新分区的卷。
[ec2-user bundle]$sudo partprobe /dev/sdb1 -
列出块储存设备以查找要装载的设备名称。
[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(没有设备分区尾部数字)。 -
为新 EBS 卷创建装载点并装载该卷。
[ec2-user bundle]$sudo mkdir /mnt/ebs [ec2-user bundle]$ sudo mount/dev/sdb1/mnt/ebs -
使用您常用的文本编辑器(如
/etc/fstab或 vim)在 EBS 卷上打开 nano 文件,然后删除实例存储(临时)卷的所有条目。因为 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在本示例中,应删除最后一行。
-
从实例中卸载和分离该卷。
[ec2-user bundle]$sudo umount /mnt/ebs[ec2-user bundle]$aws ec2 detach-volume --volume-idvol-01234567890abcdef--regionus-west-2 -
按如下所示从新 EBS 卷创建 AMI。
-
创建新 EBS 卷的快照。
[ec2-user bundle]$aws ec2 create-snapshot --regionus-west-2--description "your_snapshot_description" --volume-idvol-01234567890abcdef -
检查快照是否完整。
[ec2-user bundle]$aws ec2 describe-snapshots --regionus-west-2--snapshot-idsnap-0abcdef1234567890 -
使用
aki命令标识在原始 AMI 上使用的处理器架构、虚拟化类型和内核映像 (describe-images)。对于此步骤,您需要实例存储支持的原始 AMI 的 AMI ID。[ec2-user bundle]$aws ec2 describe-images --regionus-west-2--image-idami-0abcdef1234567890--output text IMAGES x86_64 amazon/amzn-ami-pv-2013.09.2.x86_64-s3ami-8ef297beamazon available public machine aki-fc8f11cc instance-store paravirtual xen在此示例中,架构是
x86_64,内核映像 ID 是aki-fc8f11cc。在以下步骤中使用这些值。如果上面命令的输出还列出ariID,请记下该 ID。 -
使用新 EBS 卷的快照 ID 和上一步中得到的值注册新 AMI。如果前一命令输出列出了
ariID,请通过--ramdisk-id将其包括在后续命令中。ari_id[ec2-user bundle]$aws ec2 register-image --regionus-west-2--nameyour_new_ami_name--block-device-mappings DeviceName=device-name,Ebs={SnapshotId=snap-0abcdef1234567890} --virtualization-type paravirtual --architecture x86_64 --kernel-idaki-fc8f11cc--root-device-namedevice-name
-
-
(可选) 测试了您可以从新 AMI 启动实例之后,您可以删除为此过程创建的 EBS 卷。
aws ec2 delete-volume --volume-idvol-01234567890abcdef