

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

# 在 Elastic Beanstalk 环境中使用自定义亚马逊机器映像（AMI）
<a name="using-features.customenv"></a>

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

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

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

## 创建自定义 AMI
<a name="using-features.customenv.create"></a>

您可以使用 [EC2 Image Builder](https://aws.amazon.com/image-builder) 来创建和管理自定义， AMIs 作为这些过程的替代方案。有关更多信息，请参阅 [Image Builder User Guide](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)。

**识别基本 Elastic Beanstalk AMI**

1. 在命令窗口中，运行以下命令。有关更多信息，请参阅《AWS CLI 命令参考》**中的 [describe-platform-version](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-platform-version.html)。

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

     
**Example - 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}}"
       }
   ]
   ```  
**Example - 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}}"
       }
   ]
   ```

1. 记下结果中类似于 `ami-020ae06fdda6a0f66` 的 `ImageId` 值。

该值是与您的应用程序相关的平台版本、EC2 实例架构 AWS 和区域的现货 Elastic Beanstalk AMI。如果您需要 AMIs 为多个平台、架构或 AWS 区域进行创建，请重复此过程，为每种组合确定正确的基础 AMI。

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

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

**注意**  
 AMIs 基于 Windows Server 的定制需要`describe-platform-version`退回的库存 Elastic Beanstalk AMI，如前面的步骤 1 所示。

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

**创建自定义 AMI**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 选择**启动实例**。

1. 如果您确定了基础 Elastic Beanstalk AMI（使用 `describe-platform-version`）或 Amazon Linux AMI，请在搜索框中输入其 AMI ID。然后按 **Enter**。

   您也可以搜索满足需要的其他社区 AMI 的列表。
**注意**  
我们建议您选择使用 HVM 虚拟化的 AMI。它们在描述中 AMIs 显示**虚拟化类型：hvm**。  
有关更多信息，请参阅《*Amazon EC2 用户指南*》中的[虚拟化类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#virtualization_types)。

1. 选择 **Select (选择)** 以选择此 AMI。

1. 选择实例类型，然后选择**下一步：配置实例详细信息**。

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

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

   ```
   #cloud-config
     repo_releasever: {{repository version number}}
     repo_upgrade: none
   ```

   *存储库版本号* 是指 AMI 名称中的年份和月份版本。例如， AMIs 基于 2015 年 3 月发布的 Amazon Linux 有一个存储库版本号`2015.03`。对于 Elastic Beanstalk 映像，该版本号是基于 Amazon Linux AMI（在 Amazon Linux 2 之前）的[平台版本](concepts.platforms.md)的解决方案堆栈名称中显示的日期。
**注意**  
该`repo_releasever`设置为亚马逊 Linux AMI 配置该 lock-on-launch功能。这会导致 AMI 在启动时固定使用特定的存储库版本。Amazon Linux 2 不支持此功能 - 如果您的环境使用最新的 Amazon Linux 2 平台分支，请不要指定此功能。如果您仅在 Amazon Linux AMI 平台分支（在 Amazon Linux 2 之前）上将自定义 AMI 与 Elastic Beanstalk 结合使用，则需要此设置。  
`repo_upgrade` 设置会禁止自动安装安全更新。它需要将自定义 AMI 与 Elastic Beanstalk 结合使用。

1. 根据向导指示进行操作，以[启动此 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/launching-an-instance.html)。当系统提示时，选择您能够访问的密钥对，以便能够连接此实例来执行后续步骤。

1.  使用 SSH 或 RDP [连接到此实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)。

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

1. **（Windows 平台）**运行 EC2 Config 服务 Sysprep。有关 EC2 Config 的信息，请参阅[使用配置服务 EC2配置 Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html)。确保 Sysprep 配置为生成可从 AWS 管理控制台检索的随机密码。

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

1. 为避免产生额外 AWS 费用，请[终止 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

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

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Capacity (容量)** 配置类别中，选择 **Edit (编辑)**。

1. 对于 **AMI ID**，请输入您的自定义 AMI ID。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

当您使用自定义 AMI 创建新环境时，应该使用您用作创建 AMI 的基础的相同平台版本。

## 使用自定义 AMI 管理环境
<a name="using-features.customenv.managing"></a>

### 平台更新
<a name="using-features.customenv.platform-updates."></a>

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

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

有关创建新的自定义 AMI 的更多信息，请参阅本主题前面的 [创建自定义 AMI](#using-features.customenv.create)。

### 移除自定义 AMI
<a name="using-features.customenv.platform-updates."></a>

如果想要从环境中移除自定义 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
<a name="using-features.customenv.cleanup"></a>

在您使用完自定义 AMI 并且不再需要它来启动 Elastic Beanstalk 环境时，请考虑将其清除以最大程度地减少存储成本。清除自定义 AMI 涉及到从 Amazon EC2 取消注册它并删除其他关联的资源。有关详细信息，请参阅[取消注册您的 Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html) 或[取消注册您的 Windows AMI](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/deregister-ami.html)。