创建实例存储支持的 AMI - Amazon Elastic Compute Cloud

创建实例存储支持的 AMI

您在启动实例时指定的 AMI 决定根设备卷的类型

要创建由实例存储支持的 Linux AMI,请通过从由实例存储支持的现有 Linux AMI 启动的实例开始进行。根据您自己的需要自定义该实例之后,请捆绑卷并注册新 AMI,您可以使用该 AMI 启动具有这些自定义项的新实例。

您无法创建实例存储支持的 Windows AMI,因为 Windows AMI 不支持根设备的实例存储。

重要

只有以下实例类型支持将实例存储卷作为根设备,并且需要实例存储支持的 AMI:C1、C3、D2、I2、M1、M2、M3、R3 和 X1。

用于 Amazon EBS-backed AMI 的 AMI 创建过程有所不同。有关更多信息,请参阅 创建 Amazon EBS-backed AMI

AMI 创建概述

下图总结了从由实例存储支持的实例创建 AMI 的过程。

创建由实例存储支持的 AMI。

首先,从类似于您要创建的 AMI 的 AMI 启动实例。您可以连接到您的实例并进行自定义。根据您的需要设置好实例后,您可以捆绑它。完成捆绑过程需要几分钟的时间。该过程完成之后,您会得到一个捆绑,该捆绑由映像清单 (image.manifest.xml) 以及包含根卷模板的文件 (image.part.xx) 组成。接下来,将该捆绑上传到 Amazon S3 存储桶,然后注册您的 AMI。

注意

要将对象上载到实例存储支持的 Linux AMI 的 S3 存储桶,必须为该存储桶启用 ACL。否则,Amazon EC2 将无法在要上载的对象上设置 ACL。如果您的目标存储桶使用存储桶拥有者强制执行的 S3 对象所有权设置,则这将不起作用,因为 ACL 已禁用。有关更多信息,请参阅使用 S3 对象所有权控制已上载对象的所有权

当您使用新 AMI 启动实例时,我们会使用您上传到 Amazon S3 的捆绑为实例创建根卷。Amazon S3 中的捆绑使用的存储空间会使您的账户产生费用,直到将其删除。有关更多信息,请参阅取消注册 Amazon EC2 AMI

如果除了根设备卷之外,您还向实例添加实例存储卷,则新 AMI 的块储存设备映射包含这些卷的信息,并且您从新 AMI 启动的实例的块储存设备映射自动包含这些卷的信息。有关更多信息,请参阅 Amazon EC2 实例上卷的块设备映射

先决条件

必须先完成以下任务才能创建 AMI:

  • 安装 AMI 工具。有关更多信息,请参阅设置 Amazon EC2 AMI 工具

  • 安装 AWS CLI。有关更多信息,请参阅 AWS CLI 入门

  • 请确保您具有用于捆绑的 S3 存储桶,并且您的存储桶已启用 ACL。有关配置 ACL 的更多信息,请参阅 配置 ACL

    • 要使用 AWS Management Console创建 S3 存储桶,请打开 Amazon S3 控制台(地址为 https://console.aws.amazon.com/s3/),然后选择创建存储桶

    • 要使用 AWS CLI 创建 S3 存储桶,请使用 mb 命令。如果您安装的 AMI 工具版本为 1.5.18 或更高版本,则还可以使用 ec2-upload-bundle 命令创建 S3 存储桶。有关更多信息,请参阅 ec2-upload-bundle

  • 确保捆绑包中的文件未在 S3 存储桶中加密。如果您需要对 AMI 进行加密,则可以改用 EBS 支持的 AMI。有关更多信息,请参阅 将加密与 EBS 支持的 AMI 结合使用

  • 确保您拥有您的 AWS 账户 ID。有关更多信息,请参阅 AWS 账户管理参考指南中的查看 AWS 账户 身份

  • 确保您拥有凭证以使用 AWS CLI。有关更多信息,请参阅《AWS Command Line Interface User Guide》中的 Authentication and access credentials for the AWS CLI

  • 确保您拥有 X.509 证书以及相应的私有密钥。

    • 如果您需要创建 X.509 证书,请参阅管理签名证书。X.509 证书和私有密钥用于加密和解密您的 AMI。

    • [中国(北京)] 使用 $EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-cn-north-1.pem 证书。

    • [AWS GovCloud(美国西部)] 使用 $EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-gov.pem 证书。

  • 连接到您的 实例并对其进行自定义。例如,您可以安装软件和应用程序、复制数据、删除临时文件及修改 Linux 配置。

从 Amazon Linux 实例创建 AMI

以下过程介绍如何从运行 Amazon Linux 1 的实例存储支持的实例创建 AMI。它们可能不适用于运行其他 Linux 发行版的实例。

准备使用 AMI 工具 (仅限 HVM 实例)
  1. AMI 工具需要有 GRUB Legacy,才能正确启动。使用以下命令安装 GRUB:

    [ec2-user ~]$ sudo yum install -y grub
  2. 使用以下命令安装分区管理程序包:

    [ec2-user ~]$ sudo yum install -y gdisk kpartx parted
通过实例存储支持的 Amazon Linux 实例创建 AMI

此过程假设您满足先决条件中的先决条件。

在以下示例中,将每个用户输入占位符替换为您自己的信息。

  1. 将您的凭证上传到您的实例。我们使用这些凭证确保只有您和 Amazon EC2 才能访问您的 AMI。

    1. 在您的实例上为凭证创建临时目录,如下所示:

      [ec2-user ~]$ mkdir /tmp/cert

      这使您可以从创建的映像中排除您的凭证。

    2. 使用安全复制工具 (如 scp) 将 X.509 证书和对应的私有密钥从您的计算机复制到实例上的 /tmp/cert 目录。以下 -i my-private-key.pem 命令中的 scp 选项是您用于通过 SSH 连接到实例的私有密钥,而不是 X.509 私有密钥。例如:

      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem /path/to/cert-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 cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 685 0.7KB/s 00:00

    此外,由于这些是纯文本文件,所以您可以在文本编辑器中打开证书和密钥,并将其内容复制到 /tmp/cert 中的新文件。

  2. 通过从您的实例内部运行 ec2-bundle-vol 命令,准备捆绑包以便上传到 Amazon S3。请务必指定 -e 选项以排除用于存储您的凭证的目录。默认情况下,捆绑过程不包括可能包含敏感信息的文件。这些文件包括 *.sw*.swo*.swp*.pem*.priv*id_rsa**id_dsa* *.gpg*.jks*/.ssh/authorized_keys*/.bash_history。要包括所有这些文件,请使用 --no-filter 选项。要包括其中部分文件,请使用 --include 选项。

    重要

    默认情况下,AMI 捆绑过程在表示根卷的 /tmp 目录中创建经过压缩和加密的文件集合。如果您在 /tmp 中没有足够的可用磁盘空间来存储捆绑,则需要使用 -d /path/to/bundle/storage 选项指定不同的位置来存储捆绑。某些实例会在 /mnt/media/ephemeral0 上装载您可以使用的临时存储,您还可以创建、连接和挂载新 Amazon EBS 卷以存储捆绑。有关更多信息,请参阅《Amazon EBS 用户指南》中的创建 Amazon EBS 卷

    1. 您必须以根用户身份运行 ec2-bundle-vol 命令。对于大部分命令,您可以使用 sudo 获取提升的权限,但是在这种情况下,您应运行 sudo -E su 以保留环境变量。

      [ec2-user ~]$ sudo -E su

      请注意,在 bash 提示符下现在将您标识为根用户,并且美元符号已替换为哈希标签,表示您现在处于 root Shell 中:

      [root ec2-user]#
    2. 要创建 AMI 捆绑,请如下所示运行 ec2-bundle-vol 命令:

      [root ec2-user]# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 123456789012 -r x86_64 -e /tmp/cert --partition gpt
      注意

      对于中国(北京)和 AWS GovCloud(美国西部)区域,请使用 --ec2cert 参数并根据先决条件指定证书。

      创建映像可能需要几分钟时间。该命令完成后,您的 /tmp (非默认) 目录会包含捆绑 (image.manifest.xml 以及多个 image.part.xx 文件)。

    3. 从 root Shell 退出。

      [root ec2-user]# exit
  3. (可选)要添加更多实例存储卷,请在 image.manifest.xml 文件中为您的 AMI 编辑块储存设备映射。有关更多信息,请参阅Amazon EC2 实例上卷的块设备映射

    1. 创建 image.manifest.xml 文件的备份。

      [ec2-user ~]$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
    2. 重新设置 image.manifest.xml 文件的格式,使其更易于阅读和编辑。

      [ec2-user ~]$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
    3. 使用文本编辑器编辑 image.manifest.xml 中的块储存设备映射。以下示例显示了 ephemeral1 实例存储卷的一个新条目。

      注意

      有关排除的文件的列表,请参阅ec2-bundle-vol

      <block_device_mapping> <mapping> <virtual>ami</virtual> <device>sda</device> </mapping> <mapping> <virtual>ephemeral0</virtual> <device>sdb</device> </mapping> <mapping> <virtual>ephemeral1</virtual> <device>sdc</device> </mapping> <mapping> <virtual>root</virtual> <device>/dev/sda1</device> </mapping> </block_device_mapping>
    4. 保存 image.manifest.xml 文件并退出文本编辑器。

  4. 要将捆绑上传到 Amazon S3,请如下所示运行 ec2-upload-bundle 命令。

    [ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
    重要

    要在US East (N. Virginia)之外的区域中注册 AMI,则必须指定带 --region 选项的目标区域和目标区域中已存在的存储桶路径或可在目标区域中创建的唯一存储桶路径。

  5. (可选)将捆绑上传到 Amazon S3 之后,您可以使用以下 /tmp 命令将捆绑从实例上的 rm 目录中删除:

    [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
    重要

    如果您在 -d /path/to/bundle/storage 中使用 步骤 2 选项指定了路径,请使用该路径,而不是 /tmp

  6. 要注册您的 AMI,请按以下所示运行 register-image 命令。

    [ec2-user ~]$ aws ec2 register-image --image-location amzn-s3-demo-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
    重要

    如果您先前为 ec2-upload-bundle 命令指定了某个区域,请为该命令再次指定该区域。