

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

# 创建基础设施配置
<a name="create-infra-config"></a>

本节介绍如何使用 Image Builder 控制台或中的**imagebuilder**命令 Amazon CLI 来创建基础架构配置，

------
#### [ Console ]

要从 Image Builder 控制台创建基础设施配置资源，请执行以下步骤：

1. 打开 EC2 Image Builder 控制台，网址为[https://console.aws.amazon.com/imagebuilder/](https://console.amazonaws.cn/imagebuilder/)。

1. 从导航窗格中选择**基础设施配置**。

1. 选择**创建基础设施配置**。

1. 在 **概述** 部分中，输入以下必要信息：
   + 输入基础设施配置资源的**名称**。
   + 选择希望与构建和测试实例上的组件权限实例配置文件关联的 **IAM 角色**。Image Builder 使用这些权限来下载和运行您的组件 CloudWatch、向其上传日志，以及执行配方中组件指定的任何其他操作。

1. 在 **Amazon 基础设施**面板中，您可以配置其余可用的基础设施设置。输入以下必要信息：
   + **实例类型**：您可以为此构建指定一个或多个实例类型。该服务将根据可用性选择其中一种实例类型。
**注意**  
Mac 实例运行于专属主机上的 `.metal` 实例类型。您的实例类型必须与为运行它的主机定义的类型之一相匹配。有关 Mac 实例的更多信息以及原生支持 macOS 操作系统的实例类型列表，请参阅《Amazon EC2 用户指南》**中的 [Amazon EC2 Mac 实例](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-mac-instances.html)。
   + **SNS 主题（可选）** - 选择一个 SNS 主题来接收来自 EC2 Image Builder 的通知和提醒。

   如果您没有为以下设置提供值，则这些设置将使用特定于服务的默认值（如适用）。
   + **VPC、子网和安全组**：Image Builder 将使用默认 VPC 和子网。有关配置 VPC 接口端点的更多信息，请参阅 [Image Builder 和 Amazon PrivateLink 接口 VPC 终端节点](vpc-interface-endpoints.md)。
   + 在**故障排除设置**部分，配置以下值：
     + 默认情况下，**失败时终止实例**复选框为选中状态。但是，构建失败时，您可以登录 EC2 实例排查问题。如果您希望实例在构建失败后继续运行，请清除该复选框。
     + **密钥对**：如果 EC2 实例在构建失败后继续运行，则可以创建密钥对或使用现有密钥对登录实例并排查问题。
     + **日志**：您可以指定一个 S3 存储桶，Image Builder 可以在其中写入应用程序日志，以帮助构建和测试排查问题。如果您未指定 S3 存储桶，Image Builder 会将应用程序日志写入实例。
   + 在**实例元数据设置**部分，您可以配置以下值以应用于 Image Builder 用于构建和测试映像的 EC2 实例：
     + 选择**元数据版本**，确定 EC2 是否要求为元数据检索请求提供签名令牌标头。
       + **V1 和 V2（令牌可选）**：如果您未选择任何内容，则为默认值。
       + **V2（令牌必填）**
**注意**  
我们建议您将 Image Builder 从管道构建中启动的所有 EC2 实例配置为使用， IMDSv2 以便实例元数据检索请求需要签名的令牌标头。
     + **元数据标记响应跃点限制** – 元数据令牌可以传输的网络跃点数。最小跃点数：1，最大跃点数：64，默认为一跃点。
   + 在**实例放置设置**部分，您可以配置以下值以应用于 Image Builder 用于构建和测试映像的 EC2 实例：
     + 您可以选择 Image Builder 在创建映像期间启动实例的**可用区**。
     + （可选）为运行您启动的实例的服务器选择**租赁**。默认情况下，EC2 实例将在共享租赁硬件上运行。这表示多个 Amazon Web Services 账户 可能会共享相同物理硬件。具有 `dedicated` 租期的实例在单租户硬件上运行。具有 `host` 租期的实例在专属主机上运行。

       在构建自定义映像之前，Mac 实例需要一台作为先决条件创建的专属主机。为您的 macOS 映像选择 `host`。然后，您可以选择目标主机或主机资源组来启动实例，但如果您的专属主机启用了自动置放功能，则不需要这样做。有关更多信息，请参阅《Amazon EC2 用户指南》中的[自动置放](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/dedicated-hosts-understanding.html#dedicated-hosts-auto-placement)。
       + **租赁主机 ID** - 运行实例的专属主机的 ID。
       + **租赁主机资源组** - 要在其中启动实例的主机资源组的 Amazon 资源名称 (ARN)。

1. 在**基础设施标签**部分（可选）中，您可以将元数据标签分配给 Image Builder 在构建过程中启动的 Amazon EC2 实例。输入标签作为键值对。

1. 在**标签**部分（可选）中，您可以将元数据标签分配给 Image Builder 作为输出创建的基础设施配置资源。输入标签作为键值对。

------
#### [ Amazon CLI ]

以下步骤说明如何使用 Amazon CLI中的 Image Builder **[create-infrastructure-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/create-infrastructure-configuration.html)** 命令为您的映像配置基础设施。步骤 2 中的命令采用您在步骤 1 中创建的文件。对于这些示例，步骤 1 中的文件称为 `create-infrastructure-configuration.json`。

1. 

**创建 CLI 输入 JSON 文件**

   以下示例展示了您可能为基础设施配置创建的 JSON 文件的变体。使用文件编辑工具创建您自己的 JSON 文件。

   **示例 1：用于保留编译失败后的实例的配置**

   此示例指定了两种实例类型，即 `m5.large` 和 `m5.xlarge`。我们建议指定多种实例类型，因为这允许 Image Builder 从具有足够容量的池中启动实例。这可以减少临时的生成失败次数。

   `instanceProfileName` 规定了实例配置文件，该文件用于为实例提供执行自定义活动所需的权限。例如，如果您具有一个从 Amazon S3 中检索资源的组件，则实例配置文件需要具有访问这些文件的权限。该实例配置文件还需要具备能使EC2 Image Builder 成功与实例进行通信的最低权限。有关更多信息，请参阅 [准备好使用 Image Builder 构建自定义映像](set-up-ib-env.md)。

   ```
   {
       "name": "ExampleInfraConfigDontTerminate",
       "description": "An example that will retain instances of failed builds",
       "instanceTypes": [
           "m5.large", "m5.xlarge"
       ],
       "instanceProfileName": "myIAMInstanceProfileName",
       "securityGroupIds": [
           "sg-12345678"
       ],
       "subnetId": "sub-12345678",
       "logging": {
           "s3Logs": {
               "s3BucketName": "my-logging-bucket",
               "s3KeyPrefix": "my-path"
           }
       },
       "keyPair": "myKeyPairName",
       "terminateInstanceOnFailure": false,
       "snsTopicArn": "arn:aws:sns:us-west-2:123456789012:MyTopic"
   }
   ```

**示例 2：具有自动置放功能的 macOS 配置**  
此示例为专属主机启用了自动置放功能的 Mac 实例指定实例类型和置放位置。

   ```
   {
      "name": "macOSInfraConfigAutoPlacement",
      "description": "An example infrastructure configuration for macOS.",
      "instanceProfileName": "EC2InstanceProfileForImageBuilder",
      "instanceTypes": ["mac1.metal, mac2.metal"],
      "terminateInstanceOnFailure": false,
      "placement": {
         "tenancy": "host"
      }
   }
   ```

**示例 3：指定了主机 ID 的 macOS 配置**  
此示例为以特定专属主机为目标的 Mac 实例指定实例类型和置放位置。

   ```
   {
      "name": "macOSInfraConfigHostPlacement",
      "description": "An example infrastructure configuration for macOS.",
      "instanceProfileName": "EC2InstanceProfileForImageBuilder",
      "instanceTypes": ["mac2-m1ultra.metal"],
      "terminateInstanceOnFailure": false,
      "placement": {
         "tenancy": "host",
         "hostId" : "h-1234567890abcdef0"
      }
   }
   ```

1. 

**当您运行以下命令时，使用您作为输入而创建的文件。**

   ```
   aws imagebuilder create-infrastructure-configuration --cli-input-json file://create-infrastructure-configuration.json
   ```

------