

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

# 使用自定义 AMI 为 Amazon EMR 集群配置提供更大的灵活性
<a name="emr-custom-ami"></a>

使用 Amazon EMR 5.7.0 或更高版本时，您可以选择为 Amazon EMR 指定自定义 Amazon Linux AMI，而不是默认的 Amazon Linux AMI。如果您要执行以下操作，自定义 AMI 会非常有用：
+ 预安装应用程序并执行其它自定义设置，而不使用引导操作。这可缩短集群启动时间并简化启动工作流程。有关更多信息以及示例，请参阅 [从预置的实例创建自定义 Amazon Linux AMI](#emr-custom-ami-preconfigure)。
+ 实施比引导操作允许的集群和节点配置更高级的集群和节点配置。
+ 如果您使用的 Amazon EMR 版本早于 5.24.0，则加密集群中的 EC2 实例的 EBS 根设备卷（引导卷）。与默认 AMI 一样，Amazon EMR 版本 6.9 及较低版本的自定义 AMI 的最小根卷大小为 10GiB，Amazon EMR 版本 6.10 及更高版本的最小根卷大小为 15GiB。有关更多信息，请参阅 [创建带加密 Amazon EBS 根设备卷的自定义 AMI](#emr-custom-ami-encrypted)。
**注意**  
从 Amazon EMR 5.24.0 版本开始，当您指定 AWS KMS 为密钥提供程序时，您可以使用安全配置选项对 EBS 根设备和存储卷进行加密。有关更多信息，请参阅 [本地磁盘加密](emr-data-encryption-options.md#emr-encryption-localdisk)。

自定义 AMI 必须存在于您创建集群的同一 AWS 区域。它还应该与 EC2 实例架构匹配。例如，m5.xlarge 实例具有 x86\$164 架构。因此，要使用自定义 AMI 预置 m5.xlarge，您的自定义 AMI 还应具有 x86\$164 架构。同样，要预置具有 arm64 架构的 m6g.xlarge 实例，您的自定义 AMI 应该具有 arm64 架构。有关为实例类型确定 Linux AMI 的更多信息，请参阅《Amazon EC2 用户指南》**中的[查找 Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)。

**重要**  
运行 Amazon Linux 或 Amazon Linux 2 亚马逊机器映像（AMI）的 EMR 集群使用默认的 Amazon Linux 行为，且不会自动下载和安装需要重新启动的重要关键内核更新。这与运行默认 Amazon Linux AMI 的其它 Amazon EC2 实例的行为相同。如果需要重新启动的新 Amazon Linux 软件更新（例如内核、NVIDIA 和 CUDA 更新）在 Amazon EMR 版本发布后可用，则运行默认 AMI 的 EMR 集群实例不会自动下载和安装这些更新。要获取内核更新，您可以[自定义 Amazon EMR AMI](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-custom-ami.html)，以[使用最新的 Amazon Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)。

## 从预置的实例创建自定义 Amazon Linux AMI
<a name="emr-custom-ami-preconfigure"></a>

预安装软件并执行其它配置以便为 Amazon EMR 创建自定义 Amazon Linux AMI 的基本步骤如下所示：
+ 从基础 Amazon Linux AMI 启动实例。
+ 连接到实例以安装软件和执行其它自定义操作。
+ 创建已配置实例的新映像（AMI 快照）。

在基于自定义实例创建映像之后，您可将此映像复制到已加密的目标，如[创建带加密 Amazon EBS 根设备卷的自定义 AMI](#emr-custom-ami-encrypted)中所述。

### 教程：从带有已安装自定义软件的实例创建 AMI
<a name="emr-custom-ami-preconfigure-walkthrough"></a>

**基于最新的 Amazon Linux AMI 启动 EC2 实例**

1. 使用运行以下命令，该命令使用现有 AMI 创建实例。 AWS CLI `MyKeyName`替换为您用于连接实例的密钥对和*MyAmiId*相应的 Amazon Linux AMI 的 ID。有关最新的 AMI IDs，请参阅[亚马逊 Linux AMI](https://aws.amazon.com/amazon-linux-ami/)。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

   ```
   aws ec2 run-instances --image-id MyAmiID \
   --count 1 --instance-type m5.xlarge \
   --key-name MyKeyName --region us-west-2
   ```

   `InstanceId` 输出值在下一步中用作 `MyInstanceId`。

1. 运行如下命令：

   ```
   aws ec2 describe-instances --instance-ids MyInstanceId
   ```

   `PublicDnsName` 输出值在下一步中用于连接到实例。

**连接到实例并安装软件**

1. 使用可让您在 Linux 实例上运行 shell 命令的 SSH 连接。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[使用 SSH 连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)。

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

   ```
   sudo yum install MySoftwarePackage
   sudo pip install MySoftwarePackage
   ```

**从自定义映像创建快照**
+ 在自定义实例之后，使用 `create-image` 命令从实例创建 AMI。

  ```
  aws ec2 create-image --no-dry-run --instance-id MyInstanceId --name MyEmrCustomAmi
  ```

  在您启动集群或创建加密快照时，将使用 `imageID` 输出值。有关更多信息，请参阅[在 EMR 集群中使用单个自定义 AMI](#single-custom-ami)和[创建带加密 Amazon EBS 根设备卷的自定义 AMI](#emr-custom-ami-encrypted)。

## 如何在 Amazon EMR 集群中使用自定义 AMI
<a name="emr-custom-ami-types"></a>

您可以通过以下两种方式使用自定义 AMI 来预置 Amazon EMR 集群：
+ 对集群中的所有 EC2 实例，使用单个自定义 AMI。
+ 对集群中使用的不同 EC2 实例类型，使用不同的自定义 AMI。

预置 EMR 集群时，您只能使用两个选项中的一个，而且在集群启动后就无法更改它。


**在 Amazon EMR 集群 AMIs 中使用单一自定义与多重自定义的注意事项**  

| 考虑因素 | 单个自定义 AMI | 多重定制 AMIs | 
| --- | --- | --- | 
|  在同一个集群中同时使用自定义 AMIs 的 x86 和 Graviton2 处理器  |   不支持 ![\[No\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-no.png)  |   支持 ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-yes.png)   | 
|  AMI 自定义取决于实例类型  |   不支持 ![\[No\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-no.png)  |   支持 ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-yes.png)   | 
|  添加新任务实例 AMIs 时更改自定义groups/fleets to a running cluster. Note: you cannot change the custom AMI of existing instance groups/fleets。  |   不支持 ![\[No\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-no.png)  |   支持 ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-yes.png)   | 
|  使用 AWS 控制台启动集群  |   支持 ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-yes.png)   |   不支持 ![\[No\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-no.png)  | 
|   AWS CloudFormation 用于启动集群  |   支持 ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-yes.png)   |   支持 ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/icon-yes.png)   | 

## 在 EMR 集群中使用单个自定义 AMI
<a name="single-custom-ami"></a>

要在创建集群时指定自定义 AMI ID，请使用以下方法之一：
+ AWS 管理控制台
+ AWS CLI
+ Amazon EMR 开发工具包
+ 亚马逊 EMR API [RunJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html)
+ AWS CloudFormation [（参见 “群集”、“[群集](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html)” InstanceGroupConfig、“[资源 InstanceGroupConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html)” 或 “[资源-” 中的`CustomAmiID`属性 InstanceFleetConfig-InstanceTypeConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html)） InstanceTypeConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html)

------
#### [ Amazon EMR console ]

**要从控制台中指定单个自定义 AMI**

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择 **Create cluster**（创建集群）。

1. 在 **Name and applications**（名称和应用程序）下，找到 **Operating system options**（操作系统选项）。选择 **Custom AMI**（自定义 AMI），然后在 **Custom AMI**（自定义 AMI）字段中输入 AMI ID。

1. 选择适用于集群的任何其他选项。

1. 要启动集群，选择 **Create cluster**（创建集群）。

------
#### [ AWS CLI ]

**要使用指定单个自定义 AMI AWS CLI**
+ 在运行 `--custom-ami-id` 命令时，使用 `aws emr [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)` 参数可指定 AMI ID。

  以下示例指定一个将单个自定义 AMI 与 20 GiB 启动卷结合使用的集群。有关更多信息，请参阅 [自定义 Amazon EBS 根设备卷](emr-custom-ami-root-volume-size.md)。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

  ```
  aws emr create-cluster --name "Cluster with My Custom AMI" \
  --custom-ami-id MyAmiID --ebs-root-volume-size 20 \
  --release-label emr-5.7.0 --use-default-roles \
  --instance-count 2 --instance-type m5.xlarge
  ```

------

## 在 Amazon EM AMIs R 集群中使用多个自定义
<a name="multiple-custom-ami"></a>

要使用多个自定义集群创建集群 AMIs，请使用以下方法之一：
+ AWS CLI 版本 1.20.21 或更高版本
+ AWS SDK
+ 亚马逊 EMR API [RunJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html)参考中的亚马逊 *EMR*
+ AWS CloudFormation [（参见 “群集”、“[群集](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html)” InstanceGroupConfig、“[资源 InstanceGroupConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html)” 或 “[资源-” 中的`CustomAmiID`属性 InstanceFleetConfig-InstanceTypeConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html)） InstanceTypeConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html)

 AWS 管理控制台目前不支持使用多个自定义创建集群 AMIs。

**Example -使用 AWS CLI 使用多个自定义实例创建实例组集群 AMIs**  
使用 AWS CLI 版本 1.20.21 或更高版本，您可以为整个集群分配一个自定义 AMI，也可以为集群中的每个实例节点分配多个自定义 AMIs AMI。  
以下示例显示了使用跨节点类型（主节点、核心、任务）使用两种实例类型（m5.xlarge）创建的统一实例组集群。每个节点都有多个自定义 AMIs。该示例说明了多个自定义 AMI 配置的几个功能：  
+ 集群级别没有分配自定义 AMI。这是为了避免多个自定义 AMI AMIs 和单个自定义 AMI 之间发生冲突，这会导致集群启动失败。
+ 集群可以在主任务节点、核心节点和单个任务节点上有 AMIs 多个自定义节点。这允许单个 AMI 自定义，例如：预安装的应用程序、复杂的集群配置和加密的 Amazon EBS 根设备卷。
+ 实例组核心节点只能有一种实例类型和相应的自定义 AMI。同样，主节点只能有一种实例类型和相应的自定义 AMI。
+ 集群可以有多个任务节点。

```
aws emr create-cluster --instance-groups 
InstanceGroupType=PRIMARY,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456 
InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-234567
InstanceGroupType=TASK,InstanceType=m6g.xlarge,InstanceCount=1,CustomAmiId=ami-345678
InstanceGroupType=TASK,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-456789
```

**Example -使用 AWS CLI 版本 1.20.21 或更高版本向具有多种实例类型和多个自定义实例的正在运行的实例组集群添加任务节点 AMIs**  
使用 AWS CLI 版本 1.20.21 或更高版本，您可以将多个自定义 AMIs 添加到正在运行的集群的实例组中。`CustomAmiId`参数可以与`add-instance-groups`命令一起使用，如以下示例所示。请注意，在多个节点中使用相同的多个自定义 AMI ID (ami-123456)。  

```
aws emr create-cluster --instance-groups 
InstanceGroupType=PRIMARY,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456 
InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456
InstanceGroupType=TASK,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-234567

{
    "ClusterId": "j-123456",
    ...
}

aws emr add-instance-groups --cluster-id j-123456 --instance-groups InstanceGroupType=Task,InstanceType=m6g.xlarge,InstanceCount=1,CustomAmiId=ami-345678
```

**Example -使用 AWS CLI 版本 1.20.21 或更高版本创建实例队列集群、多个自定义实例类型、多个实例类型 AMIs、按需主节点、按需核心节点、多个核心节点和任务节点**  

```
aws emr create-cluster --instance-fleets 
InstanceFleetType=PRIMARY,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge, CustomAmiId=ami-123456}'] 
InstanceFleetType=CORE,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-234567},{InstanceType=m6g.xlarge, CustomAmiId=ami-345678}']
InstanceFleetType=TASK,TargetSpotCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-456789},{InstanceType=m6g.xlarge, CustomAmiId=ami-567890}']
```

**Example -使用 AWS CLI 版本 1.20.21 或更高版本向具有多种实例类型和多个自定义实例的正在运行的集群添加任务节点 AMIs**  

```
aws emr create-cluster --instance-fleets 
InstanceFleetType=PRIMARY,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge, CustomAmiId=ami-123456}'] 
InstanceFleetType=CORE,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-234567},{InstanceType=m6g.xlarge, CustomAmiId=ami-345678}']

{
    "ClusterId": "j-123456",
    ...
}

aws emr add-instance-fleet --cluster-id j-123456 --instance-fleet 
InstanceFleetType=TASK,TargetSpotCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-234567},{InstanceType=m6g.xlarge, CustomAmiId=ami-345678}']
```

## 管理 AMI 程序包存储库更新
<a name="emr-custom-ami-package-update"></a>

默认情况下，首次启动时，Amazon Linux 会 AMIs 连接到软件包存储库以在其他服务启动之前安装安全更新。根据您的环境，在为 Amazon EMR 指定自定义 AMI 时，可以选择禁用这些更新。用于禁用此功能的选项仅在您使用自定义 AMI 时可用。默认情况下，Amazon Linux 内核更新以及其它需要重新启动的软件包不会更新。请注意，您的联网配置必须允许 HTTP 和 HTTPS 传出到 Amazon S3 中的 Amazon Linux 存储库，否则安全更新将失败。

**警告**  
我们强烈建议您在指定自定义 AMI 时选择重新启动以更新所有安装的程序包。选择不更新程序包将产生额外的安全风险。

使用 AWS 管理控制台，您可以在选择 “**自定义 AMI**” 时选择禁用更新的选项。

使用 AWS CLI，您可以`--repo-upgrade-on-boot NONE`同时指定`--custom-ami-id`何时使用**create-cluster**命令。

使用 Amazon EMR API，您可以`NONE`为参数指定。[RepoUpgradeOnBoot](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_RunJobFlow.html#EMR-RunJobFlow-request-RepoUpgradeOnBoot)

## 创建带加密 Amazon EBS 根设备卷的自定义 AMI
<a name="emr-custom-ami-encrypted"></a>

要为 Amazon EMR 加密 Amazon Linux AMI 的 Amazon EBS 根设备卷，请将未加密的 AMI 中的快照镜像复制到已加密的目标。有关创建加密 EBS 卷的信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EBS 加密](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html)。快照的源 AMI 可以是基础 Amazon Linux AMI，您也可从派生自您自定义的基础 Amazon Linux AMI 的 AMI 复制快照。

**注意**  
从 Amazon EMR 5.24.0 版本开始，当您指定 AWS KMS 为密钥提供程序时，您可以使用安全配置选项对 EBS 根设备和存储卷进行加密。有关更多信息，请参阅 [本地磁盘加密](emr-data-encryption-options.md#emr-encryption-localdisk)。

您可以使用外部密钥提供程序或 AWS KMS 密钥来加密 EBS 根卷。至少必须允许 Amazon EMR 使用的服务角色（通常为默认 `EMR_DefaultRole`）为 Amazon EMR 加密和解密卷，这样才能使用 AMI 创建集群。当 AWS KMS 用作密钥提供程序时，这意味着必须允许以下操作：
+ `kms:encrypt`
+ `kms:decrypt`
+ `kms:ReEncrypt*`
+ `kms:CreateGrant`
+ `kms:GenerateDataKeyWithoutPlaintext"`
+ `kms:DescribeKey"`

执行此操作的最简单方式是添加角色作为密钥用户，如以下教程中所述。如果您需要自定义角色策略，请参考以下示例策略语句。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EmrDiskEncryptionPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:CreateGrant",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:DescribeKey"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

### 教程：使用 KMS 密钥创建带加密根设备卷的自定义 AMI
<a name="emr-custom-ami-encrypted-walkthrough"></a>

此示例中的第一步是查找 KMS 密钥的 ARN 或创建新的 ARN。有关创建密钥的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。以下过程说明如何将默认服务角色 `EMR_DefaultRole` 作为密钥用户添加到密钥策略。当创建或编辑密钥时，记下密钥的 **ARN** 值。随后，在创建 AMI 时将使用此 ARN 更高版本。

**使用控制台将 Amazon EC2 的服务角色添加到加密密钥用户列表**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 选择要使用的 KMS 密钥的别名。

1. 在密钥详细信息页面的 **Key Users (密钥用户)** 下，选择 **Add (添加)**。

1. 在 **Attach (附加)** 对话框中，选择 Amazon EMR 服务角色。默认角色的名称为 `EMR_DefaultRole`。

1. 选择 **Attach (附加)**。

**要使用创建加密的 AMI AWS CLI**
+ 使用中的`aws ec2 copy-image`命令创建带有加密的 EBS 根设备卷和您修改的密钥的 AMI。 AWS CLI 将指定的 `--kms-key-id` 值替换为您在早期版本创建或修改的密钥的完整 ARN。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

  ```
  aws ec2 copy-image --source-image-id MyAmiId \
  --source-region us-west-2 --name MyEncryptedEMRAmi \
  --encrypted --kms-key-id arn:aws:kms:us-west-2:12345678910:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  ```

此命令的输出将提供您创建的 AMI 的 ID (可在创建集群时指定此 ID)。有关更多信息，请参阅[在 EMR 集群中使用单个自定义 AMI](#single-custom-ami)。您也可选择通过安装软件并执行其它配置来自定义此 AMI。有关更多信息，请参阅[从预置的实例创建自定义 Amazon Linux AMI](#emr-custom-ami-preconfigure)。

## 最佳实践和注意事项
<a name="emr-custom-ami-considerations"></a>

在为 Amazon EMR 创建自定义 AMI 时，请考虑以下事项：
+ Amazon EMR 7.x 系列基于 Amazon Linux 2023。对于这些亚马逊 EMR 版本，您需要使用基于亚马逊 Linux 2023 的图像进行自定义。 AMIs要查找基本自定义 AMI，请参阅[查找 Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)。
+ 亚马逊 Linux 2023 AMI 应基于 Linux 内核 6.1，使用基于 Linux 内核版本 6.12 的亚马逊 Linux 2023 AMI 可能会导致集群配置失败。
+ 对于低于 7.x 的亚马逊 EMR 版本，不支持亚马逊 Linux 2023 AMIs 。
+ Amazon EMR 5.30.0 及更高版本，以及 Amazon EMR 6.x 系列都基于 Amazon Linux 2。对于这些亚马逊 EMR 版本，您需要使用基于 Amazon Linux 2 的镜像进行自定义。 AMIs要查找基本自定义 AMI，请参阅[查找 Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)。
+ 对于低于 5.30.0 和 6.x 的亚马逊 EMR 版本，不支持亚马逊 Linux 2。 AMIs 
+ 您必须使用 64 位 Amazon Linux AMI。不支持 32 位 AMI。
+ 不支持 AMIs 带有多个亚马逊 EBS 卷的亚马逊 Linux。
+ 使您的自定义项基于由 EBS 支持的最新 [Amazon Linux AMI](https://aws.amazon.com/amazon-linux-ami/)。有关亚马逊 Linux AMIs 和相应的 AMI 的列表 IDs，请参阅[亚马逊 Linux AMI](https://aws.amazon.com/amazon-linux-ami/)。
+ 请不要复制现有 Amazon EMR 实例的快照来创建自定义 AMI。这将导致错误。
+ 仅支持 HVM 虚拟化类型和与 Amazon EMR 兼容的实例。在您执行 AMI 自定义过程时，务必选择 HVM 镜像和与 Amazon EMR 兼容的实例类型。有关兼容的实例和虚拟化类型，请参阅[Amazon EMR 支持的实例类型](emr-supported-instance-types.md)。
+ 您的服务角色在 AMI 上必须具有启动许可，因此 AMI 必须为公用 AMI，或者您必须是 AMI 的所有者或所有者已与您共享 AMI。
+ 在 AMI 上创建与应用程序同名的用户将导致错误 (例如，`hadoop`、`hdfs`、`yarn` 或 `spark`)。
+ `/tmp`、`/var` 和 `/emr`（如果它们存在于 AMI 上）的内容将在启动时分别移至 `/mnt/tmp`、`/mnt/var` 和 `/mnt/emr`。文件将保留，但如果有大量数据，则启动时间可能长于预期时间。
+ 如果您使用基于 Amazon Linux AMI（创建日期为 2018-08-11）的自定义 Amazon Linux AMI，则 Oozie 服务器无法启动。如果您使用 Oozie，请根据具有不同创建日期的 Amazon Linux AMI ID 创建自定义 AMI。您可以使用以下 AWS CLI 命令返回所有版本为 2018.03 的 HVM Amazon Linux AMIs 的图片 IDs 列表以及发布日期，以便您可以选择合适的 Amazon Linux AMI 作为基础。 MyRegion 替换为您的地区标识符，例如 us-west-2。

  ```
  aws ec2 --region MyRegion describe-images --owner amazon --query 'Images[?Name!=`null`]|[?starts_with(Name, `amzn-ami-hvm-2018.03`) == `true`].[CreationDate,ImageId,Name]' --output text | sort -rk1
  ```
+ 如果您使用具有非标准域名和 AmazonProvided DNS 的 VPC，则不应在操作系统 DNS 配置中使用该`rotate`选项。
+ 如果您创建包含 Amazon EC2 Systems Manager (SSM) 代理的自定义 AMI，则启用的 SSM 代理可能会导致集群出现配置错误。为避免这种情况，在使用自定义 AMI 时，请禁用 SSM 代理。为此，在选择和启动 Amazon EC2 实例时，请先禁用 SSM 代理，然后再使用该实例创建自定义 AMI 并随后创建 EMR 集群。

有关更多信息，请参阅《Amazon EC2 用户指南》**中的[创建 Amazon EBS 支持的 Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html)。