

# EC2 实例集或竞价型实例集配置选项
<a name="ec2-fleet-configuration-strategies"></a>

规划 EC2 实例集或竞价型实例集时，建议在决定如何配置实例集时考虑以下选项。


****  

| 配置选项 | 问题 | 文档 | 
| --- | --- | --- | 
| 实例集请求类型 |  您想要提交对所需目标容量的一次性请求的实例集，还是随着时间推移维持目标容量的实例集？  | [EC2 实例集和竞价型实例集请求类型](ec2-fleet-request-type.md) | 
| 竞价型实例 | 您是否计划在实例集中包含竞价型实例？ 查看竞价型实例的最佳实践，使用这些最佳实践规划您的实例集，以便以可能的最低价预置实例。 | [Amazon EC2 竞价型实例的最佳实践](spot-best-practices.md) | 
| 实例集的支出限额 | 您是否想限制每小时为实例集支付的费用？ | [为 EC2 实例集或竞价型实例集设置支出限额](ec2-fleet-control-spending.md) | 
| 实例类型和基于属性的实例类型选择 |  您想要在实例集中指定实例类型，还是让 Amazon EC2 选择符合应用程序要求的实例类型？  | [指定 EC2 实例集或竞价型实例集的实例类型选择属性](ec2-fleet-attribute-based-instance-type-selection.md) | 
| 实例权重 | 您是否想为每种实例类型分配权重来表示其计算容量和性能，以便 Amazon EC2 可以选择任何可用实例类型的组合来满足所需的目标容量？ | [使用实例权重来管理 EC2 实例集或竞价型实例集的成本和性能](ec2-fleet-instance-weighting.md) | 
| 分配策略 | 您是否想决定是否针对可用容量、价格或实例类型进行优化，以便用于实例集中的竞价型实例和按需型实例？ | [使用分配策略确定 EC2 实例集或竞价型实例集如何满足竞价型和按需型容量](ec2-fleet-allocation-strategy.md) | 
| 容量再平衡 | 您是否想要实例集自动替换存在风险的竞价型实例？ | [在 EC2 实例集和竞价型实例集中使用“容量再平衡”功能来替换存在风险的竞价型实例](ec2-fleet-capacity-rebalance.md) | 
| 按需容量预留 | 您是否想为实例集中的按需型实例预留容量？ | [使用容量预留来预留 EC2 实例集中的按需型容量](ec2-fleet-on-demand-capacity-reservations.md) | 

# EC2 实例集和竞价型实例集请求类型
<a name="ec2-fleet-request-type"></a>

EC2 实例集或竞价型实例集的请求类型决定了请求是同步还是异步的，以及是针对所需目标容量发出一次性请求，还是随着时间推移持续努力维持容量。配置实例集时，必须指定请求类型。

EC2 实例集和竞价型实例集都提供两种请求类型：`request` 和 `maintain`。此外，EC2 实例集还提供名为 `instant` 的第三种请求类型。实例集请求类型

`instant`（仅适用于 EC2 实例集）  
如果您将请求类型配置为 `instant`，EC2 队列会针对所需容量发出同步一次性请求。在 API 响应中，它返回已启动的实例并为那些无法启动实例提供错误。有关更多信息，请参阅 [配置 instant 类型的 EC2 实例集](instant-fleet.md)。

`request`  
如果将请求类型配置为 `request`，则实例集针对所需容量发出异步一次性请求。如果因竞价型实例中断导致容量减少，实例集不会尝试补充竞价型实例，也不会在容量不可用时于其他竞价型容量池中提交请求。在使用控制台创建类型为 `request` 的竞价型实例集时，请清除**保持目标容量**复选框。

`maintain`（默认）  
如果将请求类型配置为 `maintain`，实例集会针对所需容量发出异步请求，并自动补充任何中断的竞价型实例来维持容量。在使用控制台创建类型为 `maintain` 的竞价型实例集时，请选中**保持目标容量**复选框

# 配置 instant 类型的 EC2 实例集
<a name="instant-fleet"></a>

*instant* 类型的 EC2 队列是同步一次性请求，该请求只尝试启动所需容量一次。API 响应列出已启动的实例，以及那些无法启动实例的错误。使用 *instant* 类型的 EC2 队列有几个益处，本文会对其进行介绍。本文末尾提供了配置示例。

对于需要仅启动 API 来启动 EC2 实例的工作负载，您可以使用 RunInstances API。但是，通过 RunInstances，您只能启动按需实例或 Spot 实例，但不能在同一请求中启动两者。此外，当您使用 RunInstances 启动 Spot 实例时，您的 Spot 实例请求仅限于一个实例类型和一个可用区。此操作针对单个 Spot 容量池（一组具有相同实例类型和可用区的未使用实例）。如果 Spot 容量池没有足够的 Spot 实例容量来满足您的请求，则 RunInstances 调用将失败。

相比使用 RunInstances 启动 Spot 实例，我们建议您使用具有设为 `instant` 的 `type` 参数的 CreateFleet API，以获得以下益处：
+ **在一个请求中启动按需实例和 Spot 实例。**EC2 队列可以启动按需实例和/或 Spot 实例。如果具有可用的容量，并且您的请求的每小时最高价格超过 Spot 价格，则会满足竞价型实例请求。
+ **提高 Spot 实例的可用性。**通过使用类型为 `instant` 的 EC2 阶段，您可以根据 [Spot 最佳实践](spot-best-practices.md)启动 Spot 实例，获得以下益处：
  + **Spot 最佳实践：灵活地选择实例类型和可用区。**

    益处：通过指定多个实例类型和可用区，您可以增加 Spot 容量池的数量。这让 Spot 服务有更好的机会查找和分配所需的 Spot 计算容量。一条很好的经验法则是，对于每种工作负载，灵活地在至少 10 种实例类型之间进行选择，并确保所有可用区配置为在 VPC 中使用。
  + **竞价型实例最佳实践：使用 price-capacity-optimized 分配策略。**

    益处：`price-capacity-optimized` 分配策略可从可用性最佳的竞价型实例容量池中识别实例，然后在这些容量池中自动预置价格最低的实例。由于 Spot 实例容量来自于具有最佳容量的池，因此，这会降低在 Amazon EC2 需要回收容量时，将中断 Spot 实例的可能性。
+ **获得更广泛功能集的访问权限。**对于需要仅启动 API 的工作负载，并且您希望管理实例的生命周期，而不是让 EC2 队列为您进行管理，请使用类型为 `instant` 的 EC2 队列，而不是 [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) API。EC2 队列提供相比 RunInstances 更广泛的功能组，如以下示例所示。对于所有其他工作负载，您应该使用 Amazon EC2 Auto Scaling，因为它为各种工作负载（如 ELB 支持的应用程序、容器化工作负载和队列处理作业）提供了更全面的功能集。

您可以使用类型为 *instant* 的 EC2 实例集在容量块中启动实例。有关更多信息，请参阅 [教程：将 EC2 实例集配置为将实例启动到容量块中](ec2-fleet-launch-instances-capacity-blocks-walkthrough.md)。

Amazon EC2 Auto Scaling 和 Amazon EMR 等 AWS 服务使用类型为 *instant* 的 EC2 队列启动 EC2 实例。

## 类型为 instant 的 EC2 队列的先决条件
<a name="instant-fleet-prerequisites"></a>

有关创建 EC2 实例集的先决条件，请参阅 [EC2 队列先决条件](ec2-fleet-prerequisites.md)。

## instant EC2 队列如何工作
<a name="how-instant-fleet-works"></a>

使用类型为 `instant` 的 EC2 队列时，事件序列如下所示：

1. **配置：**将 [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) 请求类型配置为 `instant`。有关更多信息，请参阅 [创建 EC2 实例集](create-ec2-fleet.md)。请注意，在进行 API 调用之后，您无法修改它。

1. **请求：**当您进行 API 调用时，Amazon EC2 队列会针对所需容量发出同步一次性请求。

1. **响应：**API 响应列出已启动的实例，以及那些无法启动实例的错误。

1. **描述：**您可以描述 EC2 队列、列出与 EC2 队列关联的实例，以及查看 EC2 队列的历史记录。

1. **终止实例：**您可以随时终止实例。

1. **删除实例集请求：**可以手动或自动删除实例集请求：
   + 手动：您可以在实例启动后[删除实例集请求](delete-fleet.md)。

     请注意，不支持包含正在运行实例的已删除 `instant` 实例集。当您删除 `instant` 实例集时，Amazon EC2 会自动终止其所有实例。对于具有超过 1000 个实例的 实例集，删除请求可能会失败。如果您的实例集有超过 1000 个实例，请先手动终止大多数实例，留下 1000 个或更少的实例。然后删除实例集，剩余的实例将自动终止。
   + 自动：Amazon EC2 会在以下任一时间后删除实例集请求：
     + 所有实例均已终止。
     + 实例集未能启动任何实例。

## 示例
<a name="instant-fleet-examples"></a>

以下示例显示如何使用类型为 `instant` 的 EC2 队列，以获取不同使用案例。有关使用 EC2 CreateFleet API 参数的更多信息，请参阅 *Amazon EC2 API 引用*中的 [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html)。

**Topics**
+ [示例 1：使用容量优化的分配策略启动 Spot 实例](#instant-fleet-example-1)
+ [示例 2：使用容量优化分配策略启动单个 Spot 实例](#instant-fleet-example-2)
+ [示例 3：使用实例权重启动 Spot 实例](#instant-fleet-example-3)
+ [示例 4：在单个可用区内启动竞价型实例](#instant-fleet-example-4)
+ [示例 5：在单个可用区内启动单个实例类型的 Spot 实例](#instant-fleet-example-5)
+ [示例 6：仅当可以启动最小目标容量时才启动 Spot 实例](#instant-fleet-example-6)
+ [示例 7：仅当可在单个可用区中启动相同实例类型的最低目标容量时，才能启动 Spot 实例](#instant-fleet-example-7)
+ [示例 8：启动具有多个启动模板的实例](#instant-fleet-example-8)
+ [示例 9：启动基于按需实例的 Spot 实例](#instant-fleet-example-9)
+ [示例 10：基于使用容量预留和优先分配策略的按需实例，使用容量优化分配策略启动 Spot 实例](#instant-fleet-example-10)
+ [示例 11：使用容量优化优先级分配策略启动 Spot 实例](#instant-fleet-example-11)
+ [示例 12：指定 Systems Manager 参数而非 AMI ID](#instant-fleet-example-12)

### 示例 1：使用容量优化的分配策略启动 Spot 实例
<a name="instant-fleet-example-1"></a>

下面的示例指定了类型为 `instant` 的 EC2 队列中所需的参数：启动模板、目标容量、原定设置购买选项，并启动模板覆盖。
+ 启动模板由其启动模板名称和版本号标识。
+ 12 个启动模板覆盖指定了 4 个不同的实例类型和 3 个不同的子网，每个子网都位于单独的可用区中。每个实例类型和子网组合都定义了 Spot 容量池，从而生成 12 个 Spot 容量池。
+ 队列的目标容量为 20 个实例。
+ 原定设置购买选项为 `spot`，这会导致实例集尝试在 Spot 容量池中启动 20 个 Spot 实例，并为启动的实例数量提供最佳容量。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 示例 2：使用容量优化分配策略启动单个 Spot 实例
<a name="instant-fleet-example-2"></a>

您可以通过进行类型为 `instant` 的多个 EC2 队列 API 调用，将 TotalTargetCapacity 设置为 1，以最佳方式一次启动一个 Spot 实例。

下面的示例指定了类型为 instant 的 EC2 队列中所需的参数：启动模板、目标容量、原定设置购买选项和启动模板覆盖。启动模板由其启动模板名称和版本号标识。12 个启动模板覆盖有 4 个不同的实例类型和 3 个不同的子网，每个子网位于单独的可用区域中。实例集的目标容量为 1 个实例，并且原定设置购买选项为 Spot，这导致实例集尝试根据容量优化分配策略，从 12 个 Spot 容量池之一启动 Spot 实例，从最可用的容量池启动 Spot 实例。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 1,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 示例 3：使用实例权重启动 Spot 实例
<a name="instant-fleet-example-3"></a>

以下示例使用实例权重，这意味着价格是每单位小时价格，而不是每实例小时价格。假定一个工作负载单位需要 15 GB 内存和 4 个 vCPU，每个启动配置列出不同的实例类型和不同的权重，具体取决于实例上可以运行的工作负载单位数。例如，m5.xlarge（4 个 vCPU 和 16 GB 内存）可以运行 1 个单位且权重为 1，m5.2xlarge（8 个 vCPUs 和 32 GB 内存）可以运行 2 个单位，且权重为 2，依此类推。总目标容量设置为 40 个单位。原定设置购买选项为 Spot，并且分配策略为容量优化，这会导致 40 个 m5.xlarge（40 除以 1），20 个 m5.2xlarge（40 除以 2），10 个 m5.4xlarge（40 除以 4），5 个 m5.8xlarge（40 除以 8），或基于容量优化分配策略，权重相加达到所需容量的实例类型的混合。

有关更多信息，请参阅 [使用实例权重来管理 EC2 实例集或竞价型实例集的成本和性能](ec2-fleet-instance-weighting.md)。

```
{
   "SpotOptions":{
      "AllocationStrategy":"capacity-optimized"
   },
   "LaunchTemplateConfigs":[
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"m5.xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":1
            },
            {
               "InstanceType":"m5.xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":1
            },
            {
               "InstanceType":"m5.xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":1
            },
            {
               "InstanceType":"m5.2xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":2
            },
            {
               "InstanceType":"m5.2xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":2
            },
            {
               "InstanceType":"m5.2xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":2
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":4
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":4
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":4
            },
            {
               "InstanceType":"m5.8xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":8
            },
            {
               "InstanceType":"m5.8xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":8
            },
            {
               "InstanceType":"m5.8xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":8
            }
         ]
      }
   ],
   "TargetCapacitySpecification":{
      "TotalTargetCapacity":40,
      "DefaultTargetCapacityType":"spot"
   },
   "Type":"instant"
}
```

### 示例 4：在单个可用区内启动竞价型实例
<a name="instant-fleet-example-4"></a>

您可以通过将 Spot 选项 SingleAvailabilityZone 设置为 true（真），将实例集配置为启动单个可用区中的所有实例。

12 个启动模板覆盖具有不同的实例类型和子网（每个都位于单独的可用区），但权重容量相同。总目标容量为 20 个实例，原定设置购买选项为 Spot，并且 Spot 分配策略为容量优化。EC2 队列使用启动规范，从具有最佳容量的 Spot 容量池启动全部在单个可用区中的 20 个 Spot 实例。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleAvailabilityZone": true
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 示例 5：在单个可用区内启动单个实例类型的 Spot 实例
<a name="instant-fleet-example-5"></a>

您可以通过将 SpotOptions SingleInstanceType 和 SingleAvailabilityZone 设置为 true（真），将队列配置为启动单个可用区中相同实例类型的所有实例。

12 个启动模板覆盖具有不同的实例类型和子网（每个都位于单独的可用区），但权重容量相同。总目标容量为 20 个实例，原定设置购买选项为 Spot，Spot 分配策略为容量优化。EC2 队列使用启动规范，从具有最佳容量的 Spot 容量池启动全部在单个可用区中相同实例类型的 20 个 Spot 实例。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 示例 6：仅当可以启动最小目标容量时才启动 Spot 实例
<a name="instant-fleet-example-6"></a>

只有通过将 Spot 选项 MinTargetCapacity 设置为要同时启动的最小目标容量，以启动最小目标容量，您才可以将队列配置为启动实例。

指定 MinTargetCapacity 时，必须至少指定下列参数中的一个：SingleInstanceType 或 SingleAvailabilityZone。此示例中指定的是 SingleInstanceType，因此所有这 20 个实例必须使用相同的实例类型。

12 个启动模板覆盖具有不同的实例类型和子网（每个都位于单独的可用区），但权重容量相同。总目标容量和最小目标容量均设置为 20 个实例，默认购买选项为竞价型，竞价型分配策略为容量优化。只有在能够同时启动所有 20 个实例时，EC2 队列才能使用启动模板覆盖，从具有最佳容量的 Spot 容量池启动 20 个 Spot 实例。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleInstanceType": true,
        "MinTargetCapacity": 20
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 示例 7：仅当可在单个可用区中启动相同实例类型的最低目标容量时，才能启动 Spot 实例
<a name="instant-fleet-example-7"></a>

只有通过将 Spot 选项 MinTargetCapacity，以及 SingleInstanceType 和 SingleAvailabilityZone 选项设置为要同时启动的最小目标容量，以在单个可用区中，以单个实例类型启动最小目标容量，您才可以将队列配置为启动实例。

覆盖启动模板的 12 个启动规范具有不同的实例类型和子网（每个都位于单独的可用区），但权重容量相同。总目标容量和最小目标容量均为 20 个实例，原定设置购买选项为 Spot，Spot 分配策略为容量优化，SingleInstanceType 和 SingleAvailabilityZone 均为 true（真）。只有在能够同时启动所有 20 个实例时，EC2 队列才能使用启动规范，从具有最佳容量的 Spot 容量池，启动全部在单个可用区中相同实例类型的 20 个 Spot 实例。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true,
        "MinTargetCapacity": 20
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 示例 8：启动具有多个启动模板的实例
<a name="instant-fleet-example-8"></a>

您可以通过指定多个启动模板来配置队列，以便为不同的实例类型或一组实例类型启动具有不同启动规范的实例。在此示例中，我们希望为不同实例类型提供不同的 EBS 卷大小，并且我们已经在启动模板 ec2-fleet-lt-4xl、ec2-fleet-lt-9xl 和 ec2-fleet-lt-18xl 中进行配置。

在此示例中，我们根据大小为 3 种实例类型使用了 3 种不同启动模板。所有启动模板上的启动规范覆盖使用基于实例类型上 vCPU 的实例权重。总目标容量为 144 个单位，原定设置购买选项为 Spot，并且 Spot 分配策略为容量优化。EC2 队列可以使用启动模板 ec2-fleet-4xl 启动 9 个 c5n.4xlarge（144 除以 16），或者使用启动模板 ec2-fleet-9xl 启动 4 个 c5n.9xlarge（144 除以 36），或者使用启动模板 ec2-fleet-18xl 启动 2 个 c5n.18xlarge（144 除以 72），或基于容量优化分配策略，权重相加达到所需容量的实例类型的混合。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt-18xl",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5n.18xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":72
            },
            {
               "InstanceType":"c5n.18xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":72
            },
            {
               "InstanceType":"c5n.18xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":72
            }
         ]
      },
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt-9xl",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5n.9xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":36
            },
            {
               "InstanceType":"c5n.9xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":36
            },
            {
               "InstanceType":"c5n.9xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":36
            }
         ]
      },
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt-4xl",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5n.4xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":16
            },
            {
               "InstanceType":"c5n.4xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":16
            },
            {
               "InstanceType":"c5n.4xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":16
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 144,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 示例 9：启动基于按需实例的 Spot 实例
<a name="instant-fleet-example-9"></a>

下面的示例为队列指定 20 个实例的总目标容量和 5 个按需实例的目标容量。原定设置购买选项为 Spot。队列按照指定的方式启动 5 个按需实例，但需要再启动 15 个实例以满足总目标容量要求。差值购买选项的计算公式为 TotalTargetCapacity – OnDemandTargetCapacity = DefaultTargetCapacityType，这使得启动 15 个 Spot 实例的队列根据容量优化分配策略构成 12 个 Spot 容量池之一。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "OnDemandTargetCapacity": 5,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 示例 10：基于使用容量预留和优先分配策略的按需实例，使用容量优化分配策略启动 Spot 实例
<a name="instant-fleet-example-10"></a>

您可以通过将容量预留的使用策略配置为 use-capacity-reservations-first（首先使用容量预留），来将队列配置为在以原定设置目标容量类型作为 Spot 启动按需实例的基础时，首先使用按需容量预留。此外，如果多个实例池具有未使用的 容量预留，则应用选定的按需分配策略。在此示例中，按需分配策略为优先级。

在该示例中，有 6 个可用的未使用容量预留。此数目少于队列的 10 个按需实例的目标按需容量。

账户在 2 个池中有以下 6 个未使用的容量预留。每个池中的容量预留数由 AvailableInstanceCount 指示。

```
{
    "CapacityReservationId": "cr-111", 
    "InstanceType": "m5.large", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 3, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
 
{
    "CapacityReservationId": "cr-222", 
    "InstanceType": "c5.large", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 3, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
```

以下队列配置仅显示该示例的相关配置。按需分配策略为优先级，容量预留的使用策略为 use-capacity-reservations-first（首先使用容量预留）。Spot 分配策略为容量优化。总目标容量为 20，按需目标容量为 10，原定设置目标容量类型为 Spot。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "OnDemandOptions":{
       "CapacityReservationOptions": {
         "UsageStrategy": "use-capacity-reservations-first"
       },
       "AllocationStrategy":"prioritized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 2.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 3.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 4.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 5.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 6.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 7.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 8.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 9.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 10.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 11.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 12.0
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "OnDemandTargetCapacity": 10,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

在使用上述配置创建 instant 队列后，将启动下面的 20 个实例来满足目标容量：
+ us-east-1a 中的 7 个 c5.large 按需实例 – us-east-1a 中的 c5.large 的优先级第一，并且有 3 个可用的未使用 c5.large 容量预留。首先使用容量预留启动 3 个按需实例，并根据按需分配策略（此示例中为优先级）启动另 4 个按需实例。
+ us-east-1a 中的 3 个 m5.large 按需型实例：us-east-1a 中的 m5.large 实例优先级第二，并且有 3 个未使用的 m5.large 容量预留可用。
+ 来自 12 个 Spot 容量池之一的 10 个 Spot 实例，该容量池根据容量优化的分配策略具有最佳容量。

在启动队列后，您可以运行 [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html) 来查看保留的未使用的 容量预留 的数目。在此示例中，您该看到以下响应，该响应指示已使用所有 c5.large 和 m5.large 容量预留。

```
{
    "CapacityReservationId": "cr-111",
    "InstanceType": "m5.large",  
    "AvailableInstanceCount": 0
}
 
{
    "CapacityReservationId": "cr-222",
    "InstanceType": "c5.large", 
    "AvailableInstanceCount": 0
}
```

### 示例 11：使用容量优化优先级分配策略启动 Spot 实例
<a name="instant-fleet-example-11"></a>

下面的示例指定了类型为 instant 的 EC2 队列中所需的参数：启动模板、目标容量、原定设置购买选项和启动模板覆盖。启动模板由其启动模板名称和版本号标识。覆盖启动模板的 12 个启动规范具有分配了优先级的 4 个不同的实例类型，以及 3 个不同的子网（每个都位于单独的可用区）。队列的目标容量是 20 个实例，原定设置购买选项为 Spot，这导致队列尝试根据容量优化优先级的分配策略，从 12 个 Spot 容量池之一启动 20 个 Spot 实例，该策略会尽最大努力实施优先级，但首先会针对容量进行优化。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized-prioritized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 2.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 2.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 2.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 3.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 3.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 3.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 4.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 4.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 4.0
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 示例 12：指定 Systems Manager 参数而非 AMI ID
<a name="instant-fleet-example-12"></a>

以下示例使用启动模板来指定实例集中实例的配置。在本示例中，不是为 `ImageId` 指定 AMI ID，而是使用 System Manager 参数来引用 AMI。在实例启动时，Systems Manager 参数会解析为 AMI ID。

在本示例中，Systems Manager 参数以有效格式指定：`resolve:ssm:golden-ami`。Systems Manager 参数也有其他有效格式。有关更多信息，请参阅 [使用 Systems Manager 参数而非 AMI ID](create-launch-template.md#use-an-ssm-parameter-instead-of-an-ami-id)。

**注意**  
队列类型必须为类型 `instant`。其他实例集类型不支持指定 Systems Manager 参数来代替 AMI ID。

```
{
    "LaunchTemplateData": {
        "ImageId": "resolve:ssm:golden-ami",
        "InstanceType": "m5.4xlarge",
        "TagSpecifications": [{
            "ResourceType": "instance",
            "Tags": [{
                "Key": "Name",
                "Value": "webserver"
            }]
        }]
    }
}
```

# 为 EC2 实例集或竞价型实例集设置支出限额
<a name="ec2-fleet-control-spending"></a>

您可以设置每小时愿意为 EC2 实例集或竞价型实例集支出的限额。在达到支出限额时，即使尚未达到目标容量，实例集也会停止启动实例。

按需型实例和竞价型实例有单独的支出限额。

**为 EC2 实例集中的按需型实例和竞价型实例配置支出限额**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令和以下参数：
+ 若为按需型实例：在 `OnDemandOptions` 结构中，在 `MaxTotalPrice` 字段中指定支出限额。
+ 若为竞价型实例：在 `SpotOptions` 结构中，在 `MaxTotalPrice` 字段中指定支出限额。

**为竞价型实例集中的按需型实例和竞价型实例配置支出限额**  
Amazon EC2 控制台和 AWS CLI 都可用于配置支出限额。

（控制台）创建竞价型实例集时，请选中**设置 Spot 实例的最大成本**复选框，然后在**设置您的最大成本(每小时)**中输入一个值。有关更多信息，请参阅[使用已定义的参数创建竞价型实例集请求](create-spot-fleet.md#create-spot-fleet-advanced)中的步骤 6.e.。

（AWS CLI）使用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 命令和以下参数：
+ 若为按需型实例：在 `OnDemandMaxTotalPrice` 字段中指定支出限额。
+ 若为竞价型实例：在 `SpotMaxTotalPrice` 字段中指定支出限额。

## 示例
<a name="ec2-fleet-spending-limit-examples"></a>

以下示例显示了两个不同的方案。在第一个示例中，实例集在满足按需型实例的目标容量 (`OnDemandTargetCapacity`) 后停止启动按需型实例。在第二个示例中，实例集在达到每小时愿意为按需型实例支付的最高金额 (`MaxTotalPrice`) 时停止启动实例。

**示例：在达到目标容量时停止启动按需型实例**

假设发出 `m4.large` 按需实例请求，其中：
+ 按需价格：每小时 0.10 美元
+ `OnDemandTargetCapacity`: 10
+ `MaxTotalPrice`：1.50 美元

实例集启动 10 个按需型实例，因为总费用 1.00 美元（10 个实例 x 0.10 美元）未超过实例的 `MaxTotalPrice` 1.50 美元。

**示例：在达到最高总费用时停止启动按需型实例**

假设发出 `m4.large` 按需实例请求，其中：
+ 按需价格：每小时 0.10 美元
+ `OnDemandTargetCapacity`: 10
+ `MaxTotalPrice`：0.80 美元

如果实例集启动按需型目标容量（10 个按需型实例），则每小时的总成本为 1.00 美元。这超过了为按需实例的 `MaxTotalPrice` 指定的金额（0.80 美元）。为了防止支出超过您愿意支付的金额，实例集仅启动 8 个按需型实例（低于按需型目标容量），因为启动更多实例将超过按需型实例的 `MaxTotalPrice`。

## 具爆发能力的实例
<a name="ec2-fleet-burstable-spot-instances"></a>

如果您使用[可突增性能的实例类型](burstable-performance-instances.md)启动您的 Spot 实例，并打算立即并短时间使用可突增性能的 Spot 实例，且没有空闲时间来积累 CPU 积分，建议您以[标准模式](burstable-performance-instances-standard-mode.md)启动实例，以避免支付更高的成本。如果您以[无限模式](burstable-performance-instances-unlimited-mode.md)启动可突增性能的 Spot 实例并立即突增 CPU，您将会为突增花费超额积分。如果使用实例的时间很短，使得实例没有时间积累 CPU 积分来支付超额积分，则您将在终止实例时为超额积分付费。

仅当实例的运行时间较长，足以积累进行突增的 CPU 积分时，针对可突增性能的竞价型实例的无限模式才适用。否则，支付剩余积分会使可突增性能的竞价型实例比使用其他实例更加昂贵。有关更多信息，请参阅[何时使用无限模式与固定 CPU](burstable-performance-instances-unlimited-mode-concepts.md#when-to-use-unlimited-mode)。

通过提供足够的计算资源来配置实例，启动积分旨在为 T2 实例提供有成效的初始启动体验。不允许重复启动 T2 实例以访问新的启动积分。如果您需要持续的 CPU，您可以赚取积分（通过空转一段时间），将[无限模式](burstable-performance-instances-unlimited-mode.md)用于 T2 Spot 实例，或将实例类型和专用 CPU 一起使用。

# 指定 EC2 实例集或竞价型实例集的实例类型选择属性
<a name="ec2-fleet-attribute-based-instance-type-selection"></a>

创建 EC2 实例集或竞价型实例集时，必须指定一种或多种实例类型，以便配置实例集中的按需型实例和竞价型实例。除了手动指定实例类型外，还可以指定实例必须具有的属性，Amazon EC2 将使用这些属性标识所有实例类型。这称为*基于属性的实例类型选择*。例如，您可以指定实例所需的最小和最大 vCPU 数量，实例集将使用满足这些 vCPU 要求的任何可用实例类型启动实例。

基于属性的实例类型选择是工作负载和框架的理想选择，这些工作负载和框架可以灵活地确定所用的实例类型，例如在运行容器或 Web 机群、处理大数据以及实施持续集成和部署 (CI/CD) 工具等情况下。

**优点**

基于属性的实例类型选择具有以下优势：
+ **轻松使用正确的实例类型** – 有如此多的实例类型可供使用，因此找到适用于您的工作负载的实例类型可能非常耗时。当您指定实例属性时，实例类型将自动具有工作负载所需的属性。
+ **简化配置** – 要为实例集手动指定多种实例类型，您必须为每种实例类型创建单独的启动模板覆盖。但是，借助基于属性的实例类型选择，要提供多种实例类型，您只需在启动模板或启动模板覆盖中指定实例属性即可。
+ **自动使用新实例类型** – 当您指定实例属性而不是实例类型时，您的实例集可以在新一代实例类型发布时使用这些实例类型，“满足未来”实例集配置的需求。
+ **实例类型灵活性** – 指定实例属性而不是实例类型时，实例集可以从各种实例类型中进行选择来启动竞价型实例，从而遵循[灵活选择竞价型实例类型的最佳实践](spot-best-practices.md#be-instance-type-flexible)。

**Topics**
+ [基于属性的实例类型选择的工作原理](#ec2fleet-abs-how-it-works)
+ [价格保护](#ec2fleet-abs-price-protection)
+ [性能保护](#ec2fleet-abis-performance-protection)
+ [注意事项](#ec2fleet-abs-considerations)
+ [通过基于属性的实例类型选择创建 EC2 机群](#abs-create-ec2-fleet)
+ [通过基于属性的实例类型选择创建竞价型实例集](#abs-create-spot-fleet)
+ [有效 EC2 实例集配置示例和无效 EC2 实例集配置示例](#ec2fleet-abs-example-configs)
+ [有效竞价型实例集配置示例和无效竞价型实例集配置示例](#spotfleet-abs-example-configs)
+ [预览具有指定属性的实例类型](#ec2fleet-get-instance-types-from-instance-requirements)

## 基于属性的实例类型选择的工作原理
<a name="ec2fleet-abs-how-it-works"></a>

要在机群配置中使用基于属性的实例类型选择，请将实例类型列表替换为实例所需的实例属性列表。EC2 实例集或竞价型实例集将在具有指定实例属性的任何可用实例类型上启动实例。

**Topics**
+ [实例属性的类型](#ef-abs-instance-attribute-types)
+ [在何处配置基于属性的实例类型选择](#ef-abs-where-to-configure)
+ [EC2 实例集或竞价型实例集如何在预置实例集时使用基于属性的实例类型选择](#how-ef-uses-abs)

### 实例属性的类型
<a name="ef-abs-instance-attribute-types"></a>

您可以指定多个实例属性来表达计算需求，例如：
+ **vCPU 数量** - 每个实例的最小和最大 vCPU 数量。
+ **内存** - 每个实例的最小和最大内存 GiB 数量。
+ **本地存储** - 是使用 EBS 还是实例存储卷作为本地存储。
+ **可突增性能** - 是否使用 T 实例系列（包括 T4g、T3a、T3 和 T2 类型）。

有关每个属性和默认值的描述，请参阅 *Amazon EC2 API 参考*中的 [InstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceRequirements.html)。

### 在何处配置基于属性的实例类型选择
<a name="ef-abs-where-to-configure"></a>

根据您使用的是控制台还是 AWS CLI，可以按如下方式为基于属性的实例类型选择指定实例属性：

在控制台中，您可以在以下实例集配置组件中指定实例属性：
+ 在启动模板中，并在实例集请求中引用启动模板
+ （仅适用于竞价型实例集）在实例集请求中

在 AWS CLI 中，您可以在以下一个或全部机群配置组件中指定实例属性：
+ 在启动模板中，并在实例集请求中引用启动模板
+ 在启动模板覆盖中

  如果您想混合应用使用不同 AMI 的实例，则可以在多个启动模板覆盖中指定实例属性。例如，不同的实例类型可以使用 x86 和基于 ARM 的处理器。
+ （仅适用于竞价型实例集）在启动规范中

### EC2 实例集或竞价型实例集如何在预置实例集时使用基于属性的实例类型选择
<a name="how-ef-uses-abs"></a>

EC2 实例集或竞价型实例集通过以下方式预置实例集：
+ 标识具有指定属性的实例类型。
+ 使用价格保护来确定要排除的实例类型。
+ 根据具有匹配实例类型的 AWS 区域或可用区确定将从中启动实例的容量池。
+ 应用指定的分配策略来确定从中启动实例的容量池。

  请注意，基于属性的实例类型选择不会选择从中预置实例集的容量池；这是[分配策略](ec2-fleet-allocation-strategy.md)的任务。

  如果您指定分配策略，实例集将根据指定的分配策略启动实例。
  + 若为竞价型实例，基于属性的实例类型选择支持**价格容量优化**、**容量优化**和**最低价格**分配策略。请注意，不推荐使用**最低价格**竞价型分配策略，因为这对竞价型实例造成的中断风险最高。
  + 若为按需型实例，基于属性的实例类型选择支持**最低价格**分配策略。
+ 如果没有适用于具有指定实例属性的实例类型的容量，则无法启动任何实例，并且机群返回错误。

## 价格保护
<a name="ec2fleet-abs-price-protection"></a>

价格保护是一项功能，可以防止 EC2 实例集或竞价型实例集使用您认为成本过高的实例类型，即使它们恰好适合您指定的属性。要使用价格保护，您需要设置价格阈值。然后，当 Amazon EC2 选择具有您的属性的实例类型时，会排除定价高于阈值的实例类型。

Amazon EC2 计算价格阈值的方式如下：
+ Amazon EC2 首先从与您的属性匹配的实例类型中识别出价格最低的实例类型。
+ 然后，Amazon EC2 会使用您为价格保护参数指定的值（以百分比表示）乘以已识别的实例类型的价格。其结果就是用作价格阈值的价格。

按需型实例和竞价型实例有不同的价格阈值。

当您使用基于属性的实例类型选择创建实例集时，默认情况下会启用价格保护。您可以保留默认值，也可以指定自己的值。

您也可以关闭价格保护。要表明无价格保护阈值，请指定一个较高的百分比值，如 `999999`。

**Topics**
+ [价格最低的实例类型的识别方式](#ec2fleet-abs-price-protection-lowest-priced)
+ [按需型实例价格保护](#ec2fleet-abs-on-demand-price-protection)
+ [竞价型实例价格保护](#ec2fleet-abs-spot-price-protection)
+ [指定价格保护阈值](#ec2fleet-abs-specify-price-protection)

### 价格最低的实例类型的识别方式
<a name="ec2fleet-abs-price-protection-lowest-priced"></a>

Amazon EC2 会从与您指定的属性相匹配的实例类型中识别价格最低的实例类型，从而确定价格阈值所依据的价格。它的做法具体如下：
+ 它首先会从当前一代 C、M 或 R 实例类型中查找与您的属性相匹配的实例类型。如果找到匹配结果，它就会识别出价格最低的实例类型。
+ 如果没有匹配结果，它会从当前一代的任何实例类型中查找与您的属性相匹配的实例类型。如果找到匹配结果，它就会识别出价格最低的实例类型。
+ 如果没有匹配结果，它会从上一代的任何实例类型中查找与您的属性相匹配的实例类型，并识别出价格最低的实例类型。

### 按需型实例价格保护
<a name="ec2fleet-abs-on-demand-price-protection"></a>

按需型实例类型的价格保护阈值基于已识别的最低价格按需型实例类型(`OnDemandMaxPricePercentageOverLowestPrice`)，按照*高于其价格的百分比*计算。您可以指定该高出的百分比，表示您原意支付的价格。如果您未指定此参数，则使用默认值 `20` 计算价格保护阈值(即比已识别的价格高出 20%)。

例如，如果识别的按需型实例价格为 `0.4271`，并且您指定了 `25`，则价格阈值将比 `0.4271` 高 25%。按如下方式计算：`0.4271 * 1.25 = 0.533875`。计算出的价格是您愿意为按需型实例支付的最高价格，在本示例中，Amazon EC2 将排除任何价格高于 `0.533875` 的按需型实例类型。

### 竞价型实例价格保护
<a name="ec2fleet-abs-spot-price-protection"></a>

默认情况下，Amazon EC2 将自动应用最佳的竞价型实例价格保护，从而始终如一地从各种实例类型中进行选择。您也可以自行手动设置价格保护。但是，让 Amazon EC2 为您代劳可以提高竞价型容量得到满足的可能性。

您可以使用以下选项之一，手动指定价格保护。如果您手动设置价格保护，则建议您使用第一个选项。
+ **已识别的最低价格*按需型实例*类型的*百分比*** [`MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`]

  例如，如果识别的按需型实例价格为 `0.4271`，并且您指定了 `60`，则价格阈值将是 `0.4271` 的 60%。按如下方式计算：`0.4271 * 0.60 = 0.25626`。计算出的价格是您愿意为竞价型实例支付的最高价格，在本示例中，Amazon EC2 将排除任何价格高于 `0.25626` 的竞价型实例类型。
+ **比已识别的最低价格*竞价型实例*实例类型*高出的百分比*** [`SpotMaxPricePercentageOverLowestPrice`]

  例如，如果识别的竞价型实例价格为 `0.1808`，并且您指定了 `25`，则价格阈值将比 `0.1808` 高 25%。按如下方式计算：`0.1808 * 1.25 = 0.226`。计算出的价格是您愿意为竞价型实例支付的最高价格，在本示例中，Amazon EC2 将排除任何价格高于 `0.266` 的竞价型实例类型。我们不建议使用该参数，因为竞价型实例类型的价格可能会波动，因此您的价格保护阈值也可能会波动。

### 指定价格保护阈值
<a name="ec2fleet-abs-specify-price-protection"></a>

**使用 AWS CLI 指定价格保护阈值**

使用 AWS CLI 创建 EC2 实例集或竞价型实例集时，请配置实例集，以便使用基于属性的实例类型选择，然后执行以下操作：
+ 若要指定按需型实例价格保护阈值，请在 JSON 配置文件的 `InstanceRequirements` 结构中，为 `OnDemandMaxPricePercentageOverLowestPrice` 输入以百分比表示的价格保护阈值。
+ 要指定竞价型实例的价格保护阈值，请在 JSON 配置文件的 `InstanceRequirements` 结构中指定以下参数之*一*：
  + 对于 `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`，输入以百分比表示的价格保护阈值。
  + 对于 `SpotMaxPricePercentageOverLowestPrice`，输入以百分比表示的价格保护阈值。

有关更多信息，请参阅 [通过基于属性的实例类型选择创建 EC2 机群](#abs-create-ec2-fleet) 或 [通过基于属性的实例类型选择创建竞价型实例集](#abs-create-spot-fleet)。

**（仅适用于竞价型实例集）使用控制台指定价格保护阈值**

在控制台中创建竞价型实例集时，请配置实例集，以便使用基于属性的实例类型选择，然后执行以下操作：
+ 若要指定按需型实例价格保护阈值，请在**其他实例属性**下选择**按需型价格保护**，随后选择**添加属性**，然后输入以百分比表示的价格保护阈值。
+ 若要指定竞价型实例价格保护阈值，请在**其他实例属性**下选择**竞价型价格保护**，随后选择**添加属性**，再选择作为价格依据的基值，然后输入以百分比表示的价格保护阈值。

**注意**  
创建实例集时，如果将 `TargetCapacityUnitType` 设置为 `vcpu` 或 `memory-mib`，则会基于每个 vCPU 或每个内存的价格，而不是每个实例的价格应用价格保护阈值。

## 性能保护
<a name="ec2fleet-abis-performance-protection"></a>

*性能保护*是一项功能，可确保您的 EC2 实例集或竞价型实例集使用的实例类型类似于或超过指定的性能基准。要使用性能保护，请指定一个实例系列作为基准参考。指定的实例系列的功能确立了可接受的最低性能水平。当 Amazon EC2 为您的实例集选择实例类型时，它会考虑您指定的属性和性能基准。低于性能基准的实例类型将被自动排除在选择范围之外，即使它们与您指定的其他属性相匹配。这可确保所有选定的实例类型都提供与指定实例系列建立的基准相似或更好的性能。Amazon EC2 使用此基准来指导实例类型选择，但并不能保证选定实例类型始终会超过每个应用程序的基准。

目前，此功能仅支持将 CPU 性能作为基准性能因素。指定的实例系列的 CPU 处理器的 CPU 性能充当性能基准，确保选定的实例类型与该基准相似或超过该基准。具有相同 CPU 处理器的实例系列会产生相同的筛选结果，即使其网络或磁盘性能有所不同。例如，将 `c6in` 或 `c6i` 指定为基准参考将产生相同的基于性能的筛选结果，因为两个实例系列使用相同的 CPU 处理器。

**不支持的实例系列**  
以下实例系列**不支持**性能保护：
+ **通用型**：Mac1 \$1 Mac2 \$1 Mac2-m1ultra \$1 Mac2-m2 \$1 Mac2-m2pro \$1 M1 \$1 M2 \$1 T1
+ **计算优化型：**C1
+ **内存优化型：**U-3tb1 \$1 U-6tb1 \$1 U-9tb1 \$1 U-12tb1 \$1 U-18tb1 \$1 u-24tb1 \$1 U7i-12tb \$1 U7in-16tb \$1 U7in-24tb \$1 U7in-32tb
+ **加速计算型：**G3 \$1 G3s \$1 P3dn \$1 P4d \$1 P5
+ **高性能计算型：**Hpc7g

如果您通过指定支持的实例系列来启用性能保护，则返回的实例类型将排除上述不受支持的实例系列。

如果您将不支持的实例系列指定为基准性能值，则 API 会针对 [GetInstanceTypesFromInstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html) 返回空响应，对于 [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html)、[RequestSpotFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html)、[ModifyFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyFleet.html) 和 [ModifySpotFleetRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifySpotFleetRequest.html) 返回异常。

**示例：设置 CPU 性能基准**  
在以下示例中，实例要求是使用具有与 `c6i` 实例系列一样性能的 CPU 核心的实例类型启动。这将筛选掉 CPU 处理器性能较低的实例类型，即使它们满足您指定的其他实例要求（例如 vCPU 数量）。例如，如果您指定的实例属性包括 4 个 vCPU 和 16 GB 内存，则具有这些属性但 CPU 性能低于 `c6i` 的实例类型将被排除在选择范围之外。

```
"BaselinePerformanceFactors": {
        "Cpu": {
            "References": [
                {
                    "InstanceFamily": "c6i"
                }
            ]
        }
```

## 注意事项
<a name="ec2fleet-abs-considerations"></a>
+ 您可以在 EC2 实例集或竞价型实例集中指定实例类型或实例属性，但不能同时指定两者。

  使用 CLI 时，启动模板覆盖将覆盖启动模板。例如，如果启动模板包含实例类型，而启动模板覆盖包含实例属性，则由实例属性标识的实例将覆盖启动模板中的实例类型。
+ 使用 CLI 时，如果将实例属性指定为覆盖，也无法指定权重或优先级。
+ 在一个请求配置中，最多可以指定四个 `InstanceRequirements` 结构。

## 通过基于属性的实例类型选择创建 EC2 机群
<a name="abs-create-ec2-fleet"></a>

可以配置 EC2 实例集以使用基于属性的实例类型选择。无法通过 Amazon EC2 控制台创建 EC2 实例集。

基于属性的实例类型选择的属性在 `InstanceRequirements` 结构中指定。如果实例集配置中包含 `InstanceRequirements`，则必须排除 `InstanceType` 和 `WeightedCapacity`，因为它们无法同时确定实例集配置与实例属性。

在 AWS CLI 和 PowerShell 示例中，指定了以下属性：
+ `VCpuCount`：最少 2 个 vCPU，最多 4 个 vCPU。如果不需要最大限制，则可省略最大值。
+ `MemoryMiB`：内存最小为 8 GiB，最大为 16 GiB。如果不需要最大限制，则可省略最大值。

此配置可识别具有 2 到 4 个 vCPU 和 8 到 16 GiB 内存的所有实例类型。然而，当 [EC2 实例集预置实例集](#how-ef-uses-abs)时，价格保护和分配策略可能会排除某些实例类型。

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

**通过基于属性的实例类型选择创建 EC2 实例集**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令创建 EC2 实例集。在 JSON 文件中指定机群配置。

```
aws ec2 create-fleet \
    --region us-east-1 \
    --cli-input-json file://file_name.json
```

以下示例 `file_name.json` 文件所含参数可配置 EC2 实例集以使用基于属性的实例类型选择。

```
{
    "SpotOptions": {
        "AllocationStrategy": "price-capacity-optimized"
    },
    "LaunchTemplateConfigs": [{
        "LaunchTemplateSpecification": {
            "LaunchTemplateName": "my-launch-template",
            "Version": "1"
        },
        "Overrides": [{
            "InstanceRequirements": {
                "VCpuCount": {
                    "Min": 2,
                    "Max": 4
                },
                "MemoryMiB": {
                    "Min": 8192,
                    "Max": 16384
                }
            }
        }]
    }],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

------
#### [ PowerShell ]

**通过基于属性的实例类型选择创建 EC2 实例集**  
使用 [New-EC2Fleet](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Fleet.html) cmdlet。

```
$vcpuCount = New-Object Amazon.EC2.Model.VCpuCountRangeRequest
$vcpuCount.Min = 2 
$vcpuCount.Max = 4  
$memoryMiB = New-Object Amazon.EC2.Model.MemoryMiBRequest
$memoryMiB.Min = 8192  
$memoryMiB.Max = 16384  
$instanceRequirements = New-Object Amazon.EC2.Model.InstanceRequirementsRequest
$instanceRequirements.VCpuCount = $vcpuCount
$instanceRequirements.MemoryMiB = $memoryMiB

$launchTemplateSpec = New-Object Amazon.EC2.Model.FleetLaunchTemplateSpecificationRequest
$launchTemplateSpec.LaunchTemplateName = "my-launch-template" 
$launchTemplateSpec.Version = "1"
$override = New-Object Amazon.EC2.Model.FleetLaunchTemplateOverridesRequest
$override.InstanceRequirements = $instanceRequirements
$launchTemplateConfig = New-Object Amazon.EC2.Model.FleetLaunchTemplateConfigRequest
$launchTemplateConfig.LaunchTemplateSpecification = $launchTemplateSpec
$launchTemplateConfig.Overrides = @($override)

New-EC2Fleet `
    -SpotOptions_AllocationStrategy "price-capacity-optimized" `
    -LaunchTemplateConfig @($launchTemplateConfig) `
    -TargetCapacitySpecification_DefaultTargetCapacityType "spot" `
    -TargetCapacitySpecification_TotalTargetCapacity 20 `
    -Type "instant"
```

------

## 通过基于属性的实例类型选择创建竞价型实例集
<a name="abs-create-spot-fleet"></a>

您可以配置实例集以使用基于属性的实例类型选择。

基于属性的实例类型选择的属性在 `InstanceRequirements` 结构中指定。如果实例集配置中包含 `InstanceRequirements`，则必须排除 `InstanceType` 和 `WeightedCapacity`，因为它们无法同时确定实例集配置与实例属性。

在 AWS CLI 和 PowerShell 示例中，指定了以下属性：
+ `VCpuCount`：最少 2 个 vCPU，最多 4 个 vCPU。如果不需要最大限制，则可省略最大值。
+ `MemoryMiB`：内存最小为 8 GiB，最大为 16 GiB。如果不需要最大限制，则可省略最大值。

此配置可识别具有 2 到 4 个 vCPU 和 8 到 16 GiB 内存的所有实例类型。然而，当[竞价型实例集预置实例集](#how-ef-uses-abs)时，价格保护和分配策略可能会排除某些实例类型。

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

**配置竞价型实例集以使用基于属性的实例类型选择**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Spot Requests**（竞价型请求），然后选择 **Request Spot Instances**（请求竞价型实例）。

1. 按照步骤创建竞价型实例集。有关更多信息，请参阅 [使用已定义的参数创建竞价型实例集请求](create-spot-fleet.md#create-spot-fleet-advanced)。

   创建竞价型实例集时，按如下方式配置机群以使用基于属性的实例类型选择：

   1. 对于 **Instance type requirements**（实例类型要求），选择 **Specify instance attributes that match your compute requirements**（指定符合计算要求的实例属性）。

   1. 对于 **vCPU**，输入所需的最小和最大 vCPU 数。要指定没有限制，请选择 **No minimum**（没有最小值）和/或 **No maximum**（没有最大值）。

   1. 对于 **Memory (GiB)**（内存 (GiB)），输入所需的最小和最大内存量。要指定没有限制，请选择 **No minimum**（没有最小值）和/或 **No maximum**（没有最大值）。

   1. （可选）对于 **Additional instance attributes**（其它实例属性），您可以选择指定一个或多个属性以更详细地表达计算要求。每个额外属性都会进一步增加对您的请求的限制。

   1. （可选）展开 **Preview matching instance types**（预览匹配的实例类型），查看具有指定属性的实例类型。

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

**配置竞价型实例集以使用基于属性的实例类型选择**  
使用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 命令创建竞价型实例集。在 JSON 文件中指定机群配置。

```
aws ec2 request-spot-fleet \
    --region us-east-1 \
    --spot-fleet-request-config file://file_name.json
```

以下示例 `file_name.json` 文件所含参数可配置竞价型实例集以使用基于属性的实例类型选择。

```
{
    "AllocationStrategy": "priceCapacityOptimized",
    "TargetCapacity": 20,
    "Type": "request",
    "LaunchTemplateConfigs": [{
        "LaunchTemplateSpecification": {
            "LaunchTemplateName": "my-launch-template",
            "Version": "1"
        },
        "Overrides": [{
            "InstanceRequirements": {
                "VCpuCount": {
                    "Min": 2,
                    "Max": 4
                },
                "MemoryMiB": {
                    "Min": 8192,
                    "Max": 16384
                }
            }
        }]
    }]
}
```

------
#### [ PowerShell ]

**配置竞价型实例集以使用基于属性的实例类型选择**  
使用 [Request-EC2SpotFleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Request-EC2SpotFleet.html) cmdlet。

```
$vcpuCount = New-Object Amazon.EC2.Model.VCpuCountRange
$vcpuCount.Min = 2 
$vcpuCount.Max = 4  
$memoryMiB = New-Object Amazon.EC2.Model.MemoryMiB
$memoryMiB.Min = 8192  
$memoryMiB.Max = 16384  
$instanceRequirements = New-Object Amazon.EC2.Model.InstanceRequirements
$instanceRequirements.VCpuCount = $vcpuCount
$instanceRequirements.MemoryMiB = $memoryMiB

$launchTemplateSpec = New-Object Amazon.EC2.Model.FleetLaunchTemplateSpecification
$launchTemplateSpec.LaunchTemplateName = "my-launch-template" 
$launchTemplateSpec.Version = "1"
$override = New-Object Amazon.EC2.Model.LaunchTemplateOverrides
$override.InstanceRequirements = $instanceRequirements
$launchTemplateConfig = New-Object Amazon.EC2.Model.LaunchTemplateConfig
$launchTemplateConfig.LaunchTemplateSpecification = $launchTemplateSpec
$launchTemplateConfig.Overrides = @($override)

Request-EC2SpotFleet `
    -SpotFleetRequestConfig_AllocationStrategy "PriceCapacityOptimized" `
    -SpotFleetRequestConfig_TargetCapacity 20 `
    -SpotFleetRequestConfig_Type "Request" `
    -SpotFleetRequestConfig_LaunchTemplateConfig $launchTemplateConfig
```

------

## 有效 EC2 实例集配置示例和无效 EC2 实例集配置示例
<a name="ec2fleet-abs-example-configs"></a>

如果您使用 AWS CLI 创建 EC2 机群，必须确保机群配置有效。以下示例展示了有效配置和无效配置。

如果配置包含以下项，则视为无效：
+ 单个 `Overrides` 结构，但同时包含 `InstanceRequirements` 和 `InstanceType`
+ 两个 `Overrides` 结构，其中一个包含 `InstanceRequirements`，而另一个包含 `InstanceType`
+ 两个 `InstanceRequirements` 结构，但在同一 `LaunchTemplateSpecification` 中具有重叠的属性值

**Topics**
+ [有效配置：具有覆盖的单个启动模板](#ef-abs-example-config1)
+ [有效配置：具有多个 InstanceRequirements 的单个启动模板](#ef-abs-example-config2)
+ [有效配置：两个启动模板，每个都具有覆盖](#ef-abs-example-config3)
+ [有效配置：仅指定 `InstanceRequirements`，且属性值不重叠](#ef-abs-example-config4)
+ [配置无效：`Overrides` 包含 `InstanceRequirements` 和 `InstanceType`](#ef-abs-example-config5)
+ [配置无效：两个 `Overrides` 包含 `InstanceRequirements` 和 `InstanceType`](#ef-abs-example-config6)
+ [配置无效：属性值重叠](#ef-abs-example-config7)

### 有效配置：具有覆盖的单个启动模板
<a name="ef-abs-example-config1"></a>

以下配置有效。包含一个启动模板和一个 `Overrides` 结构（包含一个 `InstanceRequirements` 结构）。下面是示例配置的文本说明。

```
{
        "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "My-launch-template",
                "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 2,
                            "Max": 8
                        },
                        "MemoryMib": {
                            "Min": 0,
                            "Max": 10240
                        },
                        "MemoryGiBPerVCpu": {
                            "Max": 10000
                        },
                        "RequireHibernateSupport": true
                    }
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 5000,
        "DefaultTargetCapacityType": "spot",
        "TargetCapacityUnitType": "vcpu"
        }
    }
}
```

****`InstanceRequirements`****  
要使用基于属性的实例选择，您必须在机群配置中包含 `InstanceRequirements` 结构，并为机群中的实例指定所需的属性。

在上述示例中，指定了以下实例属性：
+ `VCpuCount` – 实例类型的 vCPU 数量必须最少为 2 个，最多为 8 个。
+ `MemoryMiB` – 实例类型的最大内存必须为 10240MiB。最小值 0 表示没有最低限制。
+ `MemoryGiBPerVCpu` – 实例类型的每个 vCPU 内存最大值必须为 10000GiB。`Min` 参数是可选的。省略此属性表示没有最低限制。

**`TargetCapacityUnitType`**  
`TargetCapacityUnitType` 参数为目标容量指定单位。在该示例中，目标容量是 `5000`，目标容量单位类型是 `vcpu`，它们共同指定了所需的 5000 个 vCPU 目标容量。EC2 机群将启动足够多的实例，以便机群中的 vCPU 总数为 5000 个 vCPU。

### 有效配置：具有多个 InstanceRequirements 的单个启动模板
<a name="ef-abs-example-config2"></a>

以下配置有效。包含一个启动模板和一个 `Overrides` 结构（包含两个 `InstanceRequirements` 结构）。`InstanceRequirements` 中指定的属性有效，因为值不重叠，第一个 `InstanceRequirements` 结构指定 `VCpuCount` 为 0-2 个 vCPU，而第二个 `InstanceRequirements` 结构指定 4-8 个 vCPU。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 有效配置：两个启动模板，每个都具有覆盖
<a name="ef-abs-example-config3"></a>

以下配置有效。包含两个启动模板，每个模板都有一个 `Overrides` 结构（包含一个 `InstanceRequirements` 结构）。此配置适用于在同一机群中支持 `arm` 和 `x86` 架构。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "armLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "x86LaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 有效配置：仅指定 `InstanceRequirements`，且属性值不重叠
<a name="ef-abs-example-config4"></a>

以下配置有效。包含两个 `LaunchTemplateSpecification` 结构，每个结构都有一个启动模板和一个 `Overrides` 结构（包含一个 `InstanceRequirements` 结构）。`InstanceRequirements` 中指定的属性有效，因为值不重叠，第一个 `InstanceRequirements` 结构指定 `VCpuCount` 为 0-2 个 vCPU，而第二个 `InstanceRequirements` 结构指定 4-8 个 vCPU。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 配置无效：`Overrides` 包含 `InstanceRequirements` 和 `InstanceType`
<a name="ef-abs-example-config5"></a>

以下配置无效。`Overrides` 结构同时包含 `InstanceRequirements` 和 `InstanceType`。对于 `Overrides`，可以指定 `InstanceRequirements` 或 `InstanceType`，但不能同时指定两者。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 配置无效：两个 `Overrides` 包含 `InstanceRequirements` 和 `InstanceType`
<a name="ef-abs-example-config6"></a>

以下配置无效。`Overrides` 结构同时包含 `InstanceRequirements` 和 `InstanceType`。您可以指定 `InstanceRequirements` 或 `InstanceType`，但不能同时指定两者，即使采用不同的 `Overrides` 结构也是如此。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 配置无效：属性值重叠
<a name="ef-abs-example-config7"></a>

以下配置无效。两个 `InstanceRequirements` 结构，每个结构都包含 `"VCpuCount": {"Min": 0, "Max": 2}`。这些属性的值重叠，这将导致容量池重复。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    },
                    {
                      "InstanceRequirements": {
                          "VCpuCount": {
                              "Min": 0,
                              "Max": 2
                          },
                          "MemoryMiB": {
                              "Min": 0
                          }
                      }
                  }
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

## 有效竞价型实例集配置示例和无效竞价型实例集配置示例
<a name="spotfleet-abs-example-configs"></a>

如果您使用 AWS CLI 创建竞价型实例集，必须确保机群配置有效。以下示例展示了有效配置和无效配置。

如果配置包含以下项，则视为无效：
+ 单个 `Overrides` 结构，但同时包含 `InstanceRequirements` 和 `InstanceType`
+ 两个 `Overrides` 结构，其中一个包含 `InstanceRequirements`，而另一个包含 `InstanceType`
+ 两个 `InstanceRequirements` 结构，但在同一 `LaunchTemplateSpecification` 中具有重叠的属性值

**Topics**
+ [有效配置：具有覆盖的单个启动模板](#sf-abs-example-config1)
+ [有效配置：具有多个 InstanceRequirements 的单个启动模板](#sf-abs-example-config2)
+ [有效配置：两个启动模板，每个都具有覆盖](#sf-abs-example-config3)
+ [有效配置：仅指定 `InstanceRequirements`，且属性值不重叠](#sf-abs-example-config4)
+ [配置无效：`Overrides` 包含 `InstanceRequirements` 和 `InstanceType`](#sf-abs-example-config5)
+ [配置无效：两个 `Overrides` 包含 `InstanceRequirements` 和 `InstanceType`](#sf-abs-example-config6)
+ [配置无效：属性值重叠](#sf-abs-example-config7)

### 有效配置：具有覆盖的单个启动模板
<a name="sf-abs-example-config1"></a>

以下配置有效。包含一个启动模板和一个 `Overrides` 结构（包含一个 `InstanceRequirements` 结构）。下面是示例配置的文本说明。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "My-launch-template",
                "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 2,
                            "Max": 8
                        },
                        "MemoryMib": {
                            "Min": 0,
                            "Max": 10240
                        },
                        "MemoryGiBPerVCpu": {
                            "Max": 10000
                        },
                        "RequireHibernateSupport": true
                    }
                }
            ]
        }
    ],
        "TargetCapacity": 5000,
            "OnDemandTargetCapacity": 0,
            "TargetCapacityUnitType": "vcpu"
    }
}
```

****`InstanceRequirements`****  
要使用基于属性的实例选择，您必须在机群配置中包含 `InstanceRequirements` 结构，并为机群中的实例指定所需的属性。

在上述示例中，指定了以下实例属性：
+ `VCpuCount` – 实例类型的 vCPU 数量必须最少为 2 个，最多为 8 个。
+ `MemoryMiB` – 实例类型的最大内存必须为 10240MiB。最小值 0 表示没有最低限制。
+ `MemoryGiBPerVCpu` – 实例类型的每个 vCPU 内存最大值必须为 10000GiB。`Min` 参数是可选的。省略此属性表示没有最低限制。

**`TargetCapacityUnitType`**  
`TargetCapacityUnitType` 参数为目标容量指定单位。在该示例中，目标容量是 `5000`，目标容量单位类型是 `vcpu`，它们共同指定了所需的 5000 个 vCPU 目标容量。竞价型实例集将启动足够多的实例，以便机群中的 vCPU 总数为 5000 个 vCPU。

### 有效配置：具有多个 InstanceRequirements 的单个启动模板
<a name="sf-abs-example-config2"></a>

以下配置有效。包含一个启动模板和一个 `Overrides` 结构（包含两个 `InstanceRequirements` 结构）。`InstanceRequirements` 中指定的属性有效，因为值不重叠，第一个 `InstanceRequirements` 结构指定 `VCpuCount` 为 0-2 个 vCPU，而第二个 `InstanceRequirements` 结构指定 4-8 个 vCPU。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 有效配置：两个启动模板，每个都具有覆盖
<a name="sf-abs-example-config3"></a>

以下配置有效。包含两个启动模板，每个模板都有一个 `Overrides` 结构（包含一个 `InstanceRequirements` 结构）。此配置适用于在同一机群中支持 `arm` 和 `x86` 架构。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "armLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "x86LaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 有效配置：仅指定 `InstanceRequirements`，且属性值不重叠
<a name="sf-abs-example-config4"></a>

以下配置有效。包含两个 `LaunchTemplateSpecification` 结构，每个结构都有一个启动模板和一个 `Overrides` 结构（包含一个 `InstanceRequirements` 结构）。`InstanceRequirements` 中指定的属性有效，因为值不重叠，第一个 `InstanceRequirements` 结构指定 `VCpuCount` 为 0-2 个 vCPU，而第二个 `InstanceRequirements` 结构指定 4-8 个 vCPU。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 配置无效：`Overrides` 包含 `InstanceRequirements` 和 `InstanceType`
<a name="sf-abs-example-config5"></a>

以下配置无效。`Overrides` 结构同时包含 `InstanceRequirements` 和 `InstanceType`。对于 `Overrides`，可以指定 `InstanceRequirements` 或 `InstanceType`，但不能同时指定两者。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 配置无效：两个 `Overrides` 包含 `InstanceRequirements` 和 `InstanceType`
<a name="sf-abs-example-config6"></a>

以下配置无效。`Overrides` 结构同时包含 `InstanceRequirements` 和 `InstanceType`。您可以指定 `InstanceRequirements` 或 `InstanceType`，但不能同时指定两者，即使采用不同的 `Overrides` 结构也是如此。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 配置无效：属性值重叠
<a name="sf-abs-example-config7"></a>

以下配置无效。两个 `InstanceRequirements` 结构，每个结构都包含 `"VCpuCount": {"Min": 0, "Max": 2}`。这些属性的值重叠，这将导致容量池重复。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    },
                    {
                      "InstanceRequirements": {
                          "VCpuCount": {
                              "Min": 0,
                              "Max": 2
                          },
                          "MemoryMiB": {
                              "Min": 0
                          }
                      }
                  }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

## 预览具有指定属性的实例类型
<a name="ec2fleet-get-instance-types-from-instance-requirements"></a>

您可以使用 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) 命令预览与您指定的属性匹配的实例类型。这对于在不启动任何实例的情况下确定要在请求配置中指定的属性尤其有用。请注意，该命令不考虑可用容量。

**通过使用 AWS CLI 指定属性来预览实例类型列表**

1. （可选）要生成所有可以指定的可能属性，请使用 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) 命令和 `--generate-cli-skeleton` 参数。您可以选择使用 `input > attributes.json` 将输出定向到某个文件以将其保存。

   ```
   aws ec2 get-instance-types-from-instance-requirements \
       --region us-east-1 \
       --generate-cli-skeleton input > attributes.json
   ```

   预期输出

   ```
   {
       "DryRun": true,
       "ArchitectureTypes": [
           "i386"
       ],
       "VirtualizationTypes": [
           "hvm"
       ],
       "InstanceRequirements": {
           "VCpuCount": {
               "Min": 0,
               "Max": 0
           },
           "MemoryMiB": {
               "Min": 0,
               "Max": 0
           },
           "CpuManufacturers": [
               "intel"
           ],
           "MemoryGiBPerVCpu": {
               "Min": 0.0,
               "Max": 0.0
           },
           "ExcludedInstanceTypes": [
               ""
           ],
           "InstanceGenerations": [
               "current"
           ],
           "SpotMaxPricePercentageOverLowestPrice": 0,
           "OnDemandMaxPricePercentageOverLowestPrice": 0,
           "BareMetal": "included",
           "BurstablePerformance": "included",
           "RequireHibernateSupport": true,
           "NetworkInterfaceCount": {
               "Min": 0,
               "Max": 0
           },
           "LocalStorage": "included",
           "LocalStorageTypes": [
               "hdd"
           ],
           "TotalLocalStorageGB": {
               "Min": 0.0,
               "Max": 0.0
           },
           "BaselineEbsBandwidthMbps": {
               "Min": 0,
               "Max": 0
           },
           "AcceleratorTypes": [
               "gpu"
           ],
           "AcceleratorCount": {
               "Min": 0,
               "Max": 0
           },
           "AcceleratorManufacturers": [
               "nvidia"
           ],
           "AcceleratorNames": [
               "a100"
           ],
           "AcceleratorTotalMemoryMiB": {
               "Min": 0,
               "Max": 0
           },
           "NetworkBandwidthGbps": {
               "Min": 0.0,
               "Max": 0.0
           },
           "AllowedInstanceTypes": [
               ""
           ]
       },
       "MaxResults": 0,
       "NextToken": ""
   }
   ```

1. 使用上一步的输出创建 JSON 配置文件，然后按如下方式进行配置：
**注意**  
您必须提供 `ArchitectureTypes`、`VirtualizationTypes`、`VCpuCount` 和 `MemoryMiB` 的值。您可以省略其它属性；如果省略，则使用默认值。  
有关每个属性及其默认值的描述，请参阅 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html)。

   1. 对于 `ArchitectureTypes`，请指定一个或多个处理器架构类型。

   1. 对于 `VirtualizationTypes`，请指定一个或多个虚拟化类型。

   1. 对于 `VCpuCount`，请指定最小和最大 vCPU 数量。要指定没有最低限制，对于 `Min`，请指定 `0`。要指定没有最大限制，请省略 `Max` 参数。

   1. 对于 `MemoryMiB`，请指定最小和最大内存量（以 MiB 为单位）。要指定没有最低限制，对于 `Min`，请指定 `0`。要指定没有最大限制，请省略 `Max` 参数。

   1. 您可以选择指定一个或多个其他属性来进一步限制返回的实例类型列表。

1. 要预览具有您在 JSON 文件中所指定属性的实例类型，请使用 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) 命令，然后使用 `--cli-input-json` 参数指定 JSON 文件的名称和路径。您可以选择将输出格式设置为以表格格式显示。

   ```
   aws ec2 get-instance-types-from-instance-requirements \
       --cli-input-json file://attributes.json \
       --output table
   ```

   示例 *attributes.json* 文件

   在此示例中，JSON 文件包含所需属性。它们是 `ArchitectureTypes`、`VirtualizationTypes`、`VCpuCount` 和 `MemoryMiB`。此外，还包含可选属性 `InstanceGenerations`。请注意，对于 `MemoryMiB`，可以省略 `Max` 值，指示没有限制。

   ```
   {
       
       "ArchitectureTypes": [
           "x86_64"
       ],
       "VirtualizationTypes": [
           "hvm"
       ],
       "InstanceRequirements": {
           "VCpuCount": {
               "Min": 4,
               "Max": 6
           },
           "MemoryMiB": {
               "Min": 2048
           },
           "InstanceGenerations": [
               "current"
           ]
       }
   }
   ```

    输出示例

   ```
   ------------------------------------------
   |GetInstanceTypesFromInstanceRequirements|
   +----------------------------------------+
   ||             InstanceTypes            ||
   |+--------------------------------------+|
   ||             InstanceType             ||
   |+--------------------------------------+|
   ||  c4.xlarge                           ||
   ||  c5.xlarge                           ||
   ||  c5a.xlarge                          ||
   ||  c5ad.xlarge                         ||
   ||  c5d.xlarge                          ||
   ||  c5n.xlarge                          ||
   ||  d2.xlarge                           ||
   ...
   ```

1. 在确定满足您的需求的实例类型后，请记下您使用的实例属性，以便在配置机群请求时可以使用。

# 使用实例权重来管理 EC2 实例集或竞价型实例集的成本和性能
<a name="ec2-fleet-instance-weighting"></a>

您可以借助实例权重为 EC2 实例集或竞价型实例集中的每种实例类型分配权重，来表示它们相对于彼此的计算容量和性能。实例集可以根据权重使用指定实例类型的任意组合，前提是可以满足所需的目标容量。这有助于管理实例集的成本和性能。

权重表示实例类型占总目标容量的容量单位。

**示例：使用实例权重管理性能**

假设实例集包含两种实例类型，并且每种实例类型都分配到了不同的权重，来反映实现相同性能所需的每种实例类型的数量，如下所示：
+  `m5.large` – 权重：1
+ `m5.2xlarge` – 权重：4

如此分配权重，即表明需要 4 个 `m5.large` 实例才能实现与 1 个 `m5.2xlarge` 实例相同的性能。

要计算给定目标容量所需的每种实例类型的实例数量，请使用以下公式：

`target capacity / weight = number of instances`

如果目标容量为 8 个单位，则实例集可以通过 `m5.large` 或 `m5.2xlarge` 或混合使用两者来满足目标容量，如下所示：
+ 8 个 `m5.large` 实例（容量为 8/权重为 1，表示需要 8 个实例）
+ 2 个 `m5.2xlarge` 实例（容量为 8/权重为 4，表示需要 2 个实例）
+ 4 个 `m5.large` 和 1 个 `m5.2xlarge`

**示例：使用实例权重管理成本**

默认情况下，您指定的价格是*每实例小时* 价格。在使用实例权重功能时，您指定的价格是*每单位小时* 价格。您可以将某种实例类型的价格除以它表示的单位数来计算每单位小时价格。实例集通过将目标容量除以实例权重，计算出要启动的实例数。如果结果不是整数，则 队列会将其向上舍入到下一个整数，以便队列的大小不低于其目标容量。队列可以选择您在启动规范中指定的任意池，即使所启动实例的容量超过请求的目标容量也是如此。

下表提供了用于确定目标容量为 10 的实例集每单位价格的计算示例。


| 实例类型 | 实例权重 | 目标容量 | 启动的实例数 | 每实例小时价格 | 每单位小时价格 | 
| --- | --- | --- | --- | --- | --- | 
| r3.xlarge |  2  | 10 |  5 (10 除以 2)  |  0.05 美元  |  0.025 美元 (0.05 除以 2)  | 
| r3.8xlarge |  8  | 10 |  2 (10 除以 8，结果向上舍入)  |  0.10 美元  |  0.0125 美元 (0.10 除以 8)  | 

按如下所示使用实例集实例权重，在履行时以最低的单位价格预置池中所需的目标容量：

1. 采用实例（默认设置）或所选单位（如 vCPU、内存、存储或吞吐量）为实例集设置目标容量。

1. 设置每单位价格。

1. 为每个启动规范指定权重，这是实例类型向目标容量提供的单位数。

**实例权重示例**  
考虑具有以下配置的实例集请求：
+ 目标容量为 24
+ 一个实例类型为 `r3.2xlarge` 且权重为 6 的启动规范
+ 一个实例类型为 `c3.xlarge` 且权重为 5 的启动规范

每个权重表示相应实例类型向目标容量提供的单位数。如果第一个启动规范提供了最低单位价格（`r3.2xlarge` 每实例小时价格除以 6），则实例集会启动 4 个这样的实例（24 除以 6）。

如果第二个启动规范提供了最低单位价格（`c3.xlarge` 每实例小时价格除以 5），则实例集会启动 5 个这样的实例（24 除以 5，结果向上取整）。

**实例权重和分配策略**  
考虑具有以下配置的实例集请求：
+ 目标容量为 30 个竞价型实例
+ 一个实例类型为 `c3.2xlarge` 且权重为 8 的启动规范
+ 一个实例类型为 `m3.xlarge` 且权重为 8 的启动规范
+ 一个实例类型为 `r3.xlarge` 且权重为 8 的启动规范

实例集会启动四个实例（30 除以 8，结果向上取整）。使用 `diversified` 策略时，队列会在所有三个池中各启动一个实例，并在三个池中提供最低每单位价格的那个池中启动第四个实例。

# 使用分配策略确定 EC2 实例集或竞价型实例集如何满足竞价型和按需型容量
<a name="ec2-fleet-allocation-strategy"></a>

在 EC2 实例集或竞价型实例集中使用多个容量池（每个容量池都包含一个实例类型和可用区）时，可以使用*分配策略*来管理 Amazon EC2 如何利用这些容量池满足竞价型和按需型容量。分配策略可以针对可用容量、价格和要使用的实例类型进行优化。竞价型实例和按需型实例有不同的分配策略。

**Topics**
+ [竞价型实例的分配策略](#ec2-fleet-allocation-strategies-for-spot-instances)
+ [按需型实例的分配策略](#ec2-fleet-allocation-strategies-for-on-demand-instances)
+ [选择合适的竞价型分配策略](#ec2-fleet-allocation-use-cases)
+ [维持竞价型实例的目标容量](#ec2-fleet-maintain-fleet-capacity)
+ [针对按需容量优化实例类型](#ec2-fleet-on-demand-priority)

## 竞价型实例的分配策略
<a name="ec2-fleet-allocation-strategies-for-spot-instances"></a>

您的启动配置决定了 EC2 实例集或竞价型实例集可以从中启动竞价型实例的所有可能竞价型容量池（实例类型和可用区）。但在启动实例时，实例集将使用您指定的分配策略从所有可能的池中选择特定的池。

**注意**  
（仅限 Linux 实例）如果将竞价型实例配置为启动并开启 [AMD SEV-SNP](sev-snp.md)，则您需要按小时支付额外的使用费，费率为所选实例类型[按需小时费率](https://aws.amazon.com/ec2/pricing/on-demand/)的 10%。如果分配策略使用价格作为输入，则实例集不包括这笔额外费用；只使用竞价型价格。

您可以为竞价型实例指定以下分配策略之一：

**价格容量优化**（推荐）  
实例集根据正在启动的实例数确定具有最高可用容量的池。这意味着我们将从我们认为短期内中断概率最低的池中请求竞价型实例。然后，实例集从这些池中价格最低的池请求竞价型实例。  
**价格容量优化**分配策略是大多数竞价型工作负载的最佳选择，例如无状态容器化应用程序、微服务、Web 应用程序、数据和分析任务以及批处理。  
如果使用的是 AWS CLI，则 EC2 实例集的参数名称为 `price-capacity-optimized`，竞价型实例集的参数名称为 `priceCapacityOptimized`。

**容量优化**  
实例集根据正在启动的实例数确定具有最高可用容量的池。这意味着我们将从我们认为短期内中断概率最低的池中请求竞价型实例。  
使用竞价型实例，定价会根据长期供需趋势缓慢发生变化，但容量会实时波动。**容量优化**策略通过查看实时容量数据并预测可用性最高的池，自动在可用性最高的池中启动竞价型实例。这适用于因重启工作而导致中断成本更高的工作负载，例如长时间持续集成（CI）、图像和媒体渲染、深度学习以及高性能计算（HPC）工作负载，这些工作负载可能具有与重启工作相关的更高的中断成本。通过实现更低的中断可能性，**容量优化**策略可以降低工作负载的整体成本。  
或者，您也可以使用**容量优化优先级**分配策略，该策略带有优先级参数，可从最高到最低优先级对实例类型进行排序。您可以为不同的实例类型设置相同的优先级。实例集首先会针对容量进行优化，但会尽力遵循实例类型的优先级（例如，如果遵循优先级不会显著影响实例集预置最佳容量的能力）。对于必须最大限度地减少中断可能性，同时对某些实例类型的偏好也很重要的工作负载来说，这是一个不错的选择。请注意，为竞价型容量的实例类型设置优先级时，如果按需型分配策略设置为**优先**，那么相同的优先级也会应用于按需型实例。对于竞价型实例集，仅当实例集使用启动模板时，才支持使用优先级。  
如果使用的是 AWS CLI，则 EC2 实例集的参数名称为 `capacity-optimized` 和 `capacity-optimized-prioritized`，竞价型实例集的参数名称为 `capacityOptimized` 和 `capacityOptimizedPrioritized`。

**多元化**  
竞价型实例 分布在所有 Spot 容量池中。如果使用的是 AWS CLI，则 EC2 实例集和竞价型实例集的参数名称皆为 `diversified`。

**最低价格**（不推荐）  
不推荐使用**最低价格**分配策略，因为这对竞价型实例造成的中断风险最高。
竞价型实例来自价格最低并且具有可用容量的池。这是使用 AWS CLI 时的默认策略。不过，建议指定**价格容量优化**分配策略来覆盖默认值。  
借助最低价格策略，如果价格最低的池没有可用容量，则竞价型实例将来自价格次低且具有可用容量的池。如果某个池在满足所需容量之前耗尽容量，则实例集将继续从价格次低的池中提取实例来满足请求。为确保达到所需容量，您可能会获得来自多个容量池的竞价型实例。  
由于此策略仅考虑实例价格而不考虑容量可用性，因此可能会导致较高的中断率。  
最低价格分配策略仅在使用 AWS CLI 时可用。EC2 实例集的参数名称为 `lowest-price`，竞价型实例集的参数名称为 `lowestPrice`。

**要使用的池数量**  
在其中分配您的目标 Spot 容量的 Spot 池数量。仅当分配策略设置为**最低价格**时有效。实例集选择价格最低的竞价型池，并在指定数量的竞价型池之间平均分配目标竞价型容量。  
请注意，实例集会尽力根据指定的池数量提取竞价型实例。如果池在满足目标容量之前耗尽竞价型容量，则实例集将继续从价格次低的池中提取实例来满足请求。为确保达到目标容量，您可能会从超过指定数量的池接收竞价型实例。同样，如果大多数池没有 Spot 容量，则您可能会从少于指定数量的池接收完整目标容量。  
此参数仅在指定**最低价格**分配策略且使用 AWS CLI 时可用。EC2 实例集和竞价型实例集的参数名称皆为 `InstancePoolsToUseCount`。

## 按需型实例的分配策略
<a name="ec2-fleet-allocation-strategies-for-on-demand-instances"></a>

您的启动配置决定了 EC2 实例集或竞价型实例集可以从中启动按需型实例的所有可能容量池（实例类型和可用区）。但在启动实例时，实例集将使用您指定的分配策略从所有可能的池中选择特定的池。

您可以为按需型实例指定以下分配策略之一：

**最低价格**  
按需型实例来自价格最低且具有可用容量的池。这是默认策略。  
如果价格最低的池没有可用容量，则按需型实例将来自价格次低且具有可用容量的池。  
如果某个池在满足所需容量之前耗尽容量，则实例集将继续从价格次低的池中提取实例来满足请求。为确保满足所需容量，您可能会获得来自多个容量池的按需型实例。

**优先级**  
实例集使用为每个启动模板覆盖分配的优先级，先启动最高优先级的实例类型。此策略不能与基于属性的实例类型选择一起使用。有关如何使用此分配策略的示例，请参阅[针对按需容量优化实例类型](#ec2-fleet-on-demand-priority)。

## 选择合适的竞价型分配策略
<a name="ec2-fleet-allocation-use-cases"></a>

您可以选择适当的 Spot 分配策略，从而根据您的使用案例来优化实例集。

### 平衡最低价格和可用容量
<a name="ec2-fleet-strategy-balance-price-and-capacity-availability"></a>

为了在价格最低的竞价型容量池与具有最高可用容量的竞价型容量池之间取得平衡，建议使用**价格容量优化**分配策略。该策略根据池的价格以及这些池中竞价型实例的可用容量来决定向哪些池请求竞价型实例。这意味着将从我们认为短期内中断概率最低的池中请求竞价型实例，同时还要考虑价格。

如果实例集运行弹性和无状态的工作负载（包括容器化应用程序、微服务、Web 应用程序、数据和分析作业以及批量处理），则使用**价格容量优化**分配策略来实现最大的成本节约和可用容量。

如果实例集运行的工作负载可能会因重启工作而导致更高的中断成本，则应设置检查点，以便应用程序中断时可从该点重启。通过使用检查点，可以让**价格容量优化**分配策略变得非常适用于这些工作负载，因为其会从价格最低的池中分配容量，这些池同时还具有较低的竞价型实例中断率。

有关使用**价格容量优化**分配策略的 JSON 配置示例，请参阅以下内容：
+ EC2 实例集 – [示例 10：在价格容量优化的实例集中启动竞价型实例](ec2-fleet-examples.md#ec2-fleet-config11)
+ 竞价型实例集 – [示例 11：在 priceCapacityOptimized 实例集中启动竞价型实例](spot-fleet-examples.md#fleet-config11)

### 当工作负载拥有较高中断成本时
<a name="ec2-fleet-strategy-capacity-optimized"></a>

如果您运行的工作负载使用价格相似的实例类型，或中断成本非常高，以至于任何成本节约都不足以负担一个轻微中断，则可以选择使用**容量优化**策略。此策略从可用容量最多的 Spot 容量池分配容量，这些容量池中断的可能性更低，从而可降低您工作负载的整体成本。

如果必须将中断的可能性降至最低，但某些实例类型的首选项又很紧要时，则可使用**容量优化优先级**分配策略来表达池的优先级，然后按从最高到最低优先级的顺序设置要使用的实例类型。

请注意，为**容量优化优先级**设置优先级时，如果按需型分配策略设置为**优先**，那么相同的优先级也会应用于按需型实例。另请注意，对于竞价型实例集，仅当实例集使用启动模板时，才支持使用优先级。

有关使用**容量优化**分配策略的 JSON 配置示例，请参阅以下内容：
+ EC2 实例集 – [示例 8：在容量优化的队列中启动竞价型实例](ec2-fleet-examples.md#ec2-fleet-config9)
+ 竞价型实例集 – [示例 9：在容量优化的队列中启动竞价型实例](spot-fleet-examples.md#fleet-config9)

有关使用**容量优化优先级**分配策略的 JSON 配置示例，请参阅以下内容：
+ EC2 实例集 – [示例 9：在具有优先级的容量优化队列中启动竞价型实例](ec2-fleet-examples.md#ec2-fleet-config10)
+ 竞价型实例集 – [示例 10：在具有优先级的容量优化队列中启动竞价型实例](spot-fleet-examples.md#fleet-config10)

### 当您的工作负载时间灵活且可用容量不是一个因素时
<a name="ec2-fleet-strategy-time-flexible-workload"></a>

如果实例集较小或运行时间较短，则可以使用**价格容量优化**来最大限度地节省成本，同时还要考虑可用容量。

### 当您的实例集较大或运行时间较长时
<a name="ec2-fleet-strategy-large-workload-long-time"></a>

如果实例集较大或运行时间较长，则可以使用**多元化**策略在多个池间分配竞价型实例来提高实例集的可用性。例如，如果实例集指定 10 个池，目标容量为 100 个实例，则实例集会在每个池中启动 10 个竞价型实例。如果某个池的 Spot 价格超过您在该池中的最高价，您的队列仅 10% 受到影响。使用此策略还可降低您的队列对单个池的 Spot 价格随时间上涨的敏感度。使用**多元化**策略时，实例集不会在竞价型价格等于或高于[按需型价格](https://aws.amazon.com/ec2/pricing/)的任何池中启动竞价型实例。

## 维持竞价型实例的目标容量
<a name="ec2-fleet-maintain-fleet-capacity"></a>

在竞价型实例因竞价型价格或竞价型容量池的可用容量发生变化而终止之后，`maintain` 类型的实例集会启动替换竞价型实例。分配策略确定从哪个池启动替换实例，如下所示：
+ 如果分配策略为**价格容量优化**，则实例集在具有最高竞价型实例可用容量的池中启动替换实例，同时还要考虑价格，并确定价格最低且具有高可用容量的池。
+ 如果分配策略为**容量优化**，则实例集在具有最高竞价型实例可用容量的池中启动替换实例。
+ 如果分配策略为**多元化**，则实例集在其余池间分配替换竞价型实例。

## 针对按需容量优化实例类型
<a name="ec2-fleet-on-demand-priority"></a>

EC2 实例集或竞价型实例集尝试满足按需型容量时，默认首先启动价格最低的实例类型。如果按需型分配策略设置为**优先**，则实例集使用优先级确定在满足按需型容量时先使用哪个实例类型。优先级分配给启动模板覆盖，优先级最高的最先启动。

**示例：确定实例类型的优先级**

在本例中，您可以配置三个启动模板覆盖，每个覆盖具有不同的实例类型。

实例类型的按需价格在价格范围内。以下是本例中使用的实例类型，按价格顺序列出，从价格最低的实例类型开始：
+ `m4.large` – 价格最低
+ `m5.large`
+ `m5a.large`

如果您不使用优先级来确定顺序，则实例集将从价格最低的实例类型开始满足按需容量。

但是，假设您有想要先使用的未用 `m5.large` 预留实例。您可以设置启动模板覆盖优先级，以便按优先级顺序使用实例类型，如下所示：
+ `m5.large` – 优先级 1
+ `m4.large` – 优先级 2
+ `m5a.large` – 优先级 3

# 在 EC2 实例集和竞价型实例集中使用“容量再平衡”功能来替换存在风险的竞价型实例
<a name="ec2-fleet-capacity-rebalance"></a>

借助“容量再平衡”功能，EC2 实例集或竞价型实例集可以通过主动替换存在中断风险的竞价型实例来维持所需的竞价型容量。竞价型实例面临较高的中断风险时，Amazon EC2 会发送[再平衡建议](rebalance-recommendations.md)。如果启用了“容量再平衡”功能，则再平衡建议会在存在风险的实例中断之前，触发启动新的竞价型实例。

“容量再平衡”功能可在运行中的实例被 Amazon EC2 中断之前，主动使用新竞价型实例扩展实例集，从而帮助维持工作负载的可用性。

**配置 EC2 实例集使用“容量再平衡”功能来启动替换竞价型实例**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令和 `MaintenanceStrategies` 结构中的相关参数。有关 JSON 配置示例，请参阅[示例 7：配置容量再平衡以启动替换竞价型实例](ec2-fleet-examples.md#ec2-fleet-config8)。

**配置竞价型实例集使用“容量再平衡”功能来启动替换竞价型实例**  
您可以使用 Amazon EC2 控制台或 AWS CLI 来配置“容量再平衡”功能。

（控制台）创建竞价型实例集时，选中**容量重新平衡**复选框。有关更多信息，请参阅[使用已定义的参数创建竞价型实例集请求](create-spot-fleet.md#create-spot-fleet-advanced)中的步骤 6.d..

（AWS CLI）使用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 命令和 `SpotMaintenanceStrategies` 结构中的相关参数。有关 JSON 配置示例，请参阅[示例 8：配置容量再平衡以启动替换竞价型实例](spot-fleet-examples.md#fleet-config8)。

**Topics**
+ [限制](#ec2-fleet-capacity-rebalance-limitations)
+ [配置选项](#ec2-fleet-capacity-rebalance-config-options)
+ [注意事项](#ec2-fleet-capacity-rebalance-considerations)

## 限制
<a name="ec2-fleet-capacity-rebalance-limitations"></a>
+ 容量再平衡仅适用于类型为 `maintain` 的机群。
+ 队列运行时，您无法修改容量再平衡设置。要更改容量再平衡设置，您必须删除此队列并创建新队列。

## 配置选项
<a name="ec2-fleet-capacity-rebalance-config-options"></a>

EC2 实例集和竞价型实例集的 `ReplacementStrategy` 支持以下两个值：

`launch-before-terminate`  
Amazon EC2 可以在新的替换竞价型实例启动后终止接收再平衡通知的竞价型实例。如果指定 `launch-before-terminate`，还必须为 `termination-delay` 指定值。启动新的替换实例后，Amazon EC2 将等待 `termination-delay` 的持续时间，然后终止旧实例。对于 `termination-delay`，最短为 120 秒（2 分钟），最长为 7200 秒（2 小时）。  
建议仅当您可以预测实例关闭过程完成所需的时长时才使用 `launch-before-terminate`。这将确保只有在关闭过程完成后才终止旧实例。请注意，Amazon EC2 可能会在 `termination-delay` 之前中断旧实例，并发出两分钟警告。  
强烈建议不要将 `lowest-price`（EC2 实例集）或 `lowestPrice`（竞价型实例集）分配策略与 `launch-before-terminate` 结合使用，避免让替换竞价型实例面临较高的中断风险。

`launch`  
针对现有竞价型实例发出再平衡通知时，Amazon EC2 将启动替换竞价型实例。Amazon EC2 不会终止接收再平衡通知的实例。您可以终止旧实例，也可以使其保持运行状态。在实例运行期间，您需要为它们付费。

## 注意事项
<a name="ec2-fleet-capacity-rebalance-considerations"></a>

如果针对“容量再平衡”功能配置 EC2 实例集或竞价型实例集，请考虑以下事项：

**在请求中提供尽可能多的 Spot 容量池**  
将实例集配置为使用多种实例类型和多个可用区。这提供了在各种 Spot 容量池中启动竞价型实例的灵活性。有关更多信息，请参阅 [灵活地选择实例类型和可用区](spot-best-practices.md#be-instance-type-flexible)。

**避免替换竞价型实例中断的风险升高**  
为避免中断风险增加，我们建议使用 `capacity-optimized` 或 `capacity-optimized-prioritized` 分配策略。这些策略确保替换竞价型实例在最佳的竞价型容量池中启动，因此在不久的将来不太可能被中断。有关更多信息，请参阅 [使用价格和容量优化分配策略](spot-best-practices.md#use-capacity-optimized-allocation-strategy)。  
如果使用 `lowest-price` 分配策略，替换竞价型实例可能会面临较高的中断风险。这是因为，即使替换竞价型实例可能在启动后不久中断，Amazon EC2 始终会在当时具有可用容量的价格最低池中启动实例。

**只有可用性相同或更好时，Amazon EC2 才会启动新实例**  
容量再平衡的目标之一是提高竞价型实例的可用性。如果现有竞价型实例收到再平衡建议，Amazon EC2 只有在新实例提供与现有实例相同或更好的可用性时才会启动新实例。如果新实例的中断风险比现有实例更高，那么 Amazon EC2 将不会启动新实例。但是，Amazon EC2 将继续评测 Spot 容量池，并在可用性改善时启动新实例。  
如果 Amazon EC2 没有主动启动新实例，则您的现有实例可能会中断。发生这种情况时，无论新实例的中断风险是否较高，Amazon EC2 都会尝试启动新实例。

**容量再平衡不会提高您的竞价型实例中断率**  
当您启用容量再平衡时，它不会提高您的[竞价型实例中断率](spot-interruptions.md)（在 Amazon EC2 需要收回容量时回收的竞价型实例的数量）。然而，如果容量再平衡检测到实例存在中断风险，Amazon EC2 将立即尝试启动新实例。结果是，与存在风险的实例中断后等待 Amazon EC2 启动新实例相比，可能会替换更多实例。  
虽然在启用了容量再平衡的情况下您可以更换更多实例，但在中断您的实例之前，您会有更多时间采取行动，从而因为处于主动而非被动地位而受益。使用 [Spot Instance interruption notice](spot-instance-termination-notices.md)（竞价型实例中断通知），您通常最多只有两分钟的时间来正常关闭您的实例。借助容量再平衡提前启动新实例，您可以使现有流程更有可能在存在风险的实例上完成，您可以启动实例关闭程序，并防止在存在风险的实例上安排新工作。您还可以开始准备新启动的实例，以接管应用程序。借助容量再平衡的主动替换，您可以因绝佳的连续性而受益。  
作为演示使用容量再平衡的风险和优点的理论示例，请考虑以下场景：  
+ 下午 2:00 – 收到针对实例 A 的再平衡建议，Amazon EC2 立即开始尝试启动替换实例 B，让您有时间启动关闭程序。\$1
+ 下午 2:30 - 收到针对实例 B 的再平衡建议，该实例将被替换为实例 C，让您有时间启动关闭程序。\$1
+ 下午 2:32 - 如果未启用容量再平衡，并且如果在下午 2:32 收到针对实例 A 的竞价型实例中断通知，则您最多只有两分钟时间采取行动，但实例 A 将一直运行到此时。
\$1 如果指定了 `launch-before-terminate`，Amazon EC2 将在替换实例上线后终止存在风险的实例。

**Amazon EC2 可以启动新替换竞价型实例，直到已执行容量达到目标容量的两倍**  
针对“容量再平衡”功能配置实例集时，实例集会尝试为接收再平衡建议的每个竞价型实例启动新的替换竞价型实例。在竞价型实例收到再平衡建议后，它不再统计为已执行容量的一部分。根据替换策略，Amazon EC2 将在预配置的终止延迟后终止实例，或使其保持运行状态。这使您有机会对实例执行[再平衡操作](rebalance-recommendations.md#rebalancing-actions)。  
如果您的队列达到目标容量的两倍，即使替换实例本身收到再平衡建议，它也会停止启动新的替换实例。  
例如，您创建的实例集目标容量为 100 个竞价型实例。所有竞价型实例都会收到再平衡建议，这将导致 Amazon EC2 启动 100 个替换竞价型实例。这使已执行的竞价型实例的数量增加到 200 个，是目标容量的两倍。一些替换实例会收到再平衡建议，但由于实例集不能超过其目标容量的两倍，因此不会再启动更多替换实例。  
请注意，在实例运行期间，您需要为所有实例付费。

**建议将实例集配置为终止接收再平衡建议的竞价型实例**  
如果针对“容量再平衡”功能配置实例集，建议仅在可以预测实例关闭过程完成所需的时长时，才选择 `launch-before-terminate` 和适当的终止延迟。这将确保只有在关闭过程完成后才终止旧实例。  
如果您选择自行终止建议再平衡的实例，我们建议您监控机群中的竞价型实例接收的再平衡建议信号。通过监控信号，您可以在 Amazon EC2 中断受影响的实例之前快速对其执行[再平衡操作](rebalance-recommendations.md#rebalancing-actions)，然后您可以手动终止它们。如果您不终止实例，则需要在实例运行期间继续为其付费。Amazon EC2 不会自动终止接收再平衡建议的实例。  
您可以使用 Amazon EventBridge 或实例元数据设置通知。有关更多信息，请参阅 [监控再平衡建议信号](rebalance-recommendations.md#monitor-rebalance-recommendations)。

**在计算横向缩减或横向扩展期间的已执行容量时，实例集会排除收到再平衡建议的实例**  
如果针对“容量再平衡”功能配置了实例集，并且将目标容量更改为横向缩减或横向扩展，则实例集不会将标记为再平衡的实例计算为已执行容量的一部分，如下所示：  
+ 横向缩减 – 如果您降低所需的目标容量，Amazon EC2 将终止未标记为再平衡的实例，直到达到所需容量。标记为再平衡的实例不计入已执行容量。

  例如，您创建的竞价型实例集目标容量为 100 个竞价型实例。10 个实例会收到再平衡建议，因此 Amazon EC2 会启动 10 个新的替换实例，从而获得 110 个实例的执行容量。然后，您将目标容量减少到 50 个（横向缩减），但已执行的容量实际上为 60 个实例，因为 Amazon EC2 不会终止标记为再平衡的 10 个实例。您需要手动终止这些实例，也可以让它们保持运行状态。
+ 横向扩展 – 如果您增加所需的目标容量，Amazon EC2 将启动新实例，直到达到所需容量。标记为再平衡的实例不计入已执行容量。

  例如，您创建的实例集目标容量为 100 个竞价型实例。10 个实例会收到再平衡建议，因此实例集启动 10 个新的替换实例，从而获得 110 个实例的执行容量。然后，您将目标容量增加到 200（扩展），但已执行的容量实际上为 210 个实例，因为标记为再平衡的 10 个实例不被队列计入目标容量的一部分。您需要手动终止这些实例，也可以让它们保持运行状态。

# 使用容量预留来预留 EC2 实例集中的按需型容量
<a name="ec2-fleet-on-demand-capacity-reservations"></a>

通过使用按需容量预留，您可以在特定可用区中为按需实例预留计算容量达任意持续时间。您可以将 EC2 队列配置为在启动按需实例时首先使用容量预留。

按需容量预留仅适用于请求类型设置为 `instant` 的 EC2 实例集。

容量预留配置为 `open` 或者 `targeted`。EC2 队列可以将按需实例启动到 `open` 或者 `targeted` 容量预留，如下所示：
+ 如果容量预留为 `open`，具有匹配属性的按需实例会自动在预留容量预留容量中运行。
+ 如果容量预留处于 `targeted` 状态，只有专门定位到其中的按需实例才能在预留容量中运行。这对于使用特定的能力预留或控制何时使用特定的能力预留非常有用。

如果您使用 `targeted` EC2 队列中的容量预留，必须有足够的容量预留才能满足目标按需容量，否则启动失败。为了避免启动失败，请将 `targeted` 能力预留资源组，然后将资源组定位为目标。资源组不需要足够的容量预留；如果在满足目标按需容量之前，其容量预留不足，资源组将剩余的目标容量启动为常规按需容量。

**将容量预留与 EC2 队列结合使用**

1. 将队列配置为类型 `instant`。您不能将容量预留用于其他类型的队列。

1. 将容量预留的使用策略配置为 `use-capacity-reservations-first`。

1. 在启动模板中，**容量预留**中，选择**打开**或者**按组列分类的目标**。如果您选择**按组列分类的目标**中，指定能力预留资源组 ID。

当队列尝试满足按需容量时，如果发现多个实例池具有未使用的匹配容量预留，则会根据按需分配策略确定启动按需实例的池（`lowest-price` 或者 `prioritized`)。

**相关资源**
+ 有关如何将实例集配置为使用容量预留来实现按需容量的 CLI 示例，请参阅[EC2 实例集 CLI 配置示例](ec2-fleet-examples.md)，特别是示例 5 到 7。
+ 有关指导您完成创建容量预留、在实例集中使用容量预留以及查看剩余容量预留数量的教程，请参阅[教程：使用目标容量预留配置 EC2 实例集以启动按需型实例](ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough.md)
+ 有关配置容量预留的信息，请参阅 [使用 EC2 按需容量预留来预留计算容量](ec2-capacity-reservations.md) 和[按需容量预留常见问题](https://aws.amazon.com/ec2/faqs/#On-Demand_Capacity_Reservation)。