在 Elastic Beanstalk 环境中使用自定义亚马逊机器映像(AMI) - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Elastic Beanstalk 环境中使用自定义亚马逊机器映像(AMI)

本节介绍何时考虑使用自定义 AMI,并提供在您的环境中配置和管理自定义 AMI 的过程。在创建 AWS Elastic Beanstalk 环境时,您可以指定要使用的 Amazon Machine Image (AMI),而不是平台版本中所包含的标准 Elastic Beanstalk AMI。在您的环境中启动实例时,如果您需要安装标准 AMI 未包含的大量软件,则使用自定义 AMI 可以缩短配置时间。

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

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

创建自定义 AMI

您可以使用 EC2 Image Builder 来创建和管理自定义 AMI,以此作为这些过程的替代方案。有关更多信息,请参阅 Image Builder User Guide

识别基本 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/Node.js 20 running on 64bit Amazon Linux 2023/6.1.7" \ --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 2022/2.15.3" --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 环境中的实例保存映像还会使此实例上部署的应用程序版本成为映像的固定部分。

对于 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. 如果您确定了基础 Elastic Beanstalk AMI(使用 describe-platform-version)或 Amazon Linux AMI,请在搜索框中输入其 AMI ID。然后按 Enter

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

    注意

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

    有关更多信息,请参阅《Amazon EC2 用户指南》中的虚拟化类型

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

  5. 选择实例类型,然后选择下一步:配置实例详细信息

  6. (适用于已停用的 Amazon Linux AMI(AL1)平台)如果您的环境在支持的基于 Linux 的平台或 Windows 平台上运行,请跳过此步骤。

    展开高级详细信息部分并将以下文本粘贴到用户数据字段中。

    #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 结合使用。

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

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

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

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

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

  12. 为避免产生额外的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 管理环境

平台更新

使用自定义 AMI 时,Elastic Beanstalk 将在其平台版本更新时继续在环境中使用相同的自定义 AMI,无论是手动应用更新还是通过托管平台更新应用更新。环境不会重置为使用新平台版本的常用 AMI。

我们建议您基于新平台版本的常用 AMI 创建新的自定义 AMI。这样做将应用新平台版本中可用的补丁,并将最大限度地减少由于包或库版本不兼容而导致的部署失败。

有关创建新的自定义 AMI 的更多信息,请参阅本主题前面的 创建自定义 AMI

移除自定义 AMI

如果想要从环境中移除自定义 AMI 并将其重置为使用环境平台版本的常用 AMI,请使用以下 CLI 命令。

aws elasticbeanstalk update-environment \ --application-name my-application \ --environment-name my-environment \ --region us-east-1 \ --options-to-remove Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId
注意

为了避免服务中断,请在将此更改应用到生产环境之前使用常用 AMI 测试您的应用程序。

清除自定义 AMI

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