使用自定义 Amazon 系统映像 (AMI) - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用自定义 Amazon 系统映像 (AMI)

在创建 AWS Elastic Beanstalk 环境时,您可以指定要使用的 Amazon 系统映像 (AMI),而不是平台版本中所包含的标准 Elastic Beanstalk AMI。在您的环境中启动实例时,如果您需要安装标准 AMI 未包含的大量软件,则使用自定义 AMI 可以缩短配置时间。

使用配置文件能够快速、一致地配置和自定义您的环境。但在环境创建和更新过程中,应用配置可能需要花费很长的时间。如果您需要在配置文件中进行大量的服务器配置,可以制作一份包含所需软件和配置的自定义 AMI,以缩短配置耗时。

此外,您还可以借助自定义 AMI 对底层组件 (如 Linux 内核) 进行更改,这在配置文件中很难实现或需要很长时间才能完成。要创建自定义 AMI,请在 Amazon EC2 中启动 Elastic Beanstalk 平台 AMI,根据需要自定义软件和配置,然后停止该实例并据之保存一个 AMI。

创建自定义 AMI

识别基本 Elastic Beanstalk AMI

  1. 在命令窗口中,运行以下命令。有关更多信息,请参阅 AWS CLI 命令参考中的 describe-platform-version

    指定要使用自定义 AMI 的 AWS 区域,并将平台 ARN 和版本号替换为您的应用程序所基于的 Elastic Beanstalk 平台。

    例 - Mac OS/Linux OS

    $ aws elasticbeanstalk describe-platform-version --region us-east-2 \ --platform-arn "arn:aws:elasticbeanstalk:us-east-2::platform/Tomcat 8.5 with Java 8 running on 64bit Amazon Linux/3.1.6" \ --query PlatformDescription.CustomAmiList [ { "VirtualizationType": "pv", "ImageId": "" }, { "VirtualizationType": "hvm", "ImageId": "ami-020ae06fdda6a0f66" } ]

    例 - Windows OS

    C:\> aws elasticbeanstalk describe-platform-version --region us-east-2 --platform-arn"arn:aws:elasticbeanstalk:us-east-2::platform/IIS 10.0 running on 64bit Windows Server 2019/2.6.4" --query PlatformDescription.CustomAmiList [ { "VirtualizationType": "pv", "ImageId": "" }, { "VirtualizationType": "hvm", "ImageId": "ami-020ae06fdda6a0f66" } ]
  2. 记下结果中类似于 ami-020ae06fdda6a0f66ImageId 值。

该值是与您的应用程序相关的平台版本、EC2 实例架构和 AWS 区域的库存 Elastic Beanstalk AMI。如果需要为多个平台、架构或 AWS 区域创建 AMI,请重复此流程以便为每个组合指定正确的基础 AMI。

备注
  • 不要从已在 Elastic Beanstalk 环境中启动的实例创建 AMI。Elastic Beanstalk 会在配置期间修改实例,这可能导致所保存的 AMI 出现问题。从 Elastic Beanstalk 环境中的实例保存映像还会使此实例上部署的应用程序版本成为映像的固定部分。

  • 我们建议您始终使用最新的平台版本。当您更新到新平台版本时,我们还建议您将自定义 AMI 变基为新平台版本的 AMI。这样可以最大限度地减少因软件包或库版本不兼容而导致的部署失败。

对于 Linux,也可以从并非由 Elastic Beanstalk 发布的社区 AMI 创建自定义 AMI。您可以使用最新的 Amazon Linux AMI 作为起点。使用不由 Elastic Beanstalk 管理的 Linux AMI 启动环境时,Elastic Beanstalk 会尝试安装平台软件(语言、框架、代理服务器等)及其他组件,以支持增强型运行状况报告等功能。

注意

基于 Windows Server 的自定义 AMI 需要从 describe-platform-version 中返回库存 Elastic Beanstalk AMI,如前面的步骤 1 所示。

虽然 Elastic Beanstalk 可以使用不由 Elastic Beanstalk 管理的 AMI,但 Elastic Beanstalk 安装缺失的组件会导致配置时间增加,因而减少或抵消当初创建自定义 AMI 的优势。其他 Linux 发行版也许能够进行某些故障诊断操作,但不受官方支持。如果您的应用程序需要特定的 Linux 发行版,一个替代方案是创建 Docker 映像并在 Docker 平台多容器 Docker 平台上运行该映像。

创建自定义 AMI

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 选择 Launch Instance

  3. 选择社区 AMI

  4. 如果您确定了基础 Elastic Beanstalk AMI(使用 describe-platform-version)或 Amazon Linux AMI,请在搜索框中输入其 AMI ID。然后按 Enter

    您也可以搜索满足需要的其他社区 AMI 的列表。

    注意

    我们建议您选择使用 HVM 虚拟化的 AMI。这些 AMI 的描述包含 Virtualization type: hvm (虚拟化类型: hvm)

    
              EC2 控制台中列出了具有 HVM 虚拟化类型的 AMI

    有关实例虚拟化类型的详细信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 Linux AMI 虚拟化类型适用于 Windows 实例的 Amazon EC2 用户指南中的 Windows AMI 虚拟化类型

  5. 选择 Select (选择) 以选择此 AMI。

  6. 选择实例类型,然后选择 Next: Configure Instance Details (下一步: 配置实例详细信息)

  7. (Linux 平台)展开高级详细信息部分,然后在用户数据字段中粘贴以下文本:

    #cloud-config repo_releasever: repository version number repo_upgrade: none

    存储库版本号 是指 AMI 名称中的年份和月份版本。例如,基于 Amazon Linux 2015 年 3 月版的 AMI 的存储库版本号为 2015.03。对于 Elastic Beanstalk 映像,该版本号是基于 Amazon Linux AMI(在 Amazon Linux 2 之前)的平台版本的解决方案堆栈名称中显示的日期。

    注意

    repo_releasever 设置可为 Amazon Linux AMI 配置启动时锁定功能。这会导致 AMI 在启动时固定使用特定的存储库版本。Amazon Linux 2 不支持此功能 - 如果您的环境使用最新的 Amazon Linux 2 平台分支,请不要指定此功能。如果您仅在 Amazon Linux AMI 平台分支(在 Amazon Linux 2 之前)上将自定义 AMI 与 Elastic Beanstalk 结合使用,则需要此设置。

    repo_upgrade 设置会禁止自动安装安全更新。它需要将自定义 AMI 与 Elastic Beanstalk 结合使用。

  8. 根据向导指示进行操作,以启动此 EC2 实例。当系统提示时,选择您能够访问的密钥对,以便能够连接此实例来执行后续步骤。

  9. 使用 SSH 或 RDP 连接到此实例

  10. 执行任何所需的自定义操作。

  11. (Windows 平台) 运行 EC2Config 服务 Sysprep。有关 EC2Config 的信息,请参阅使用 EC2Config 服务配置 Windows 实例。确保 Sysprep 配置为生成可从 AWS 管理控制台检索的随机密码。

  12. 在 Amazon EC2 控制台中,停止 EC2 实例。然后,在 Instance Actions (实例操作) 菜单上,选择 Create Image (EBS AMI) (创建映像(EBS AMI))

  13. 为避免产生额外的 AWS 费用,请终止此 EC2 实例

在 Elastic Beanstalk 环境中使用您的自定义 AMI

  1. 打开 Elastic Beanstalk 控制台,然后在 Regions (区域) 列表中选择您的 AWS 区域。

  2. 在导航窗格中,选择 Environments (环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration (配置)

  4. Capacity (容量) 配置类别中,选择 Edit (编辑)

  5. 对于 AMI ID,请输入您的自定义 AMI ID。

  6. 选择 Apply

当您使用自定义 AMI 创建新环境时,应该使用您用作创建 AMI 的基础的相同平台版本。如果以后您使用自定义 AMI 将平台更新应用于环境,Elastic Beanstalk 会尝试在引导过程中应用库和配置更新。

清除自定义 AMI

在您使用完自定义 AMI 并且不再需要它来启动 Elastic Beanstalk 环境时,请考虑将其清除以最大程度地减少存储成本。清除自定义 AMI 涉及到从 Amazon EC2 取消注册它并删除其他关联的资源。有关详细信息,请参阅取消注册您的 Linux AMI取消注册您的 Windows AMI