

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

# 使用基于属性的实例类型选择创建混合实例组
<a name="create-mixed-instances-group-attribute-based-instance-type-selection"></a>

在创建混合实例组时手动选择实例类型有一个替代方法，您可以指定一组用于描述计算要求的实例属性。当 Amazon EC2 Auto Scaling 启动实例时，自动扩缩组使用的所有实例类型都必须与您所需实例的属性匹配。这称为*基于属性的实例类型选择*。

这种方法非常适合于可以灵活处理所使用实例类型的工作负载和框架，例如容器、大数据和 CI/CD。

选择基于属性的实例类型具有以下优势：
+ **竞价型实例的最佳灵活性**：Amazon EC2 Auto Scaling 可以从各种实例类型中进行选择，从而启动竞价型实例。这是符合灵活处理实例类型的竞价型实例的最佳实践，可以使得 Amazon EC2 竞价型服务有更好的机会查找和分配所需的计算容量。
+ **轻松使用正确的实例类型** – 有如此多的实例类型可供使用，因此找到适用于您的工作负载的实例类型可能非常耗时。当您指定实例属性时，实例类型将自动具有工作负载所需的属性。
+ **自动使用新实例类型**：您的自动扩缩组可以在发布新一代实例类型时使用这些实例类型。新一代实例类型将自动投入使用，如果它们符合您的要求并与您为自动扩缩组选择的分配策略保持一致。

**Topics**
+ [基于属性的实例类型选择的工作原理](#how-attribute-based-instance-type-selection-works)
+ [价格保护](#understand-price-protection)
+ [性能保护](#understand-performance-protection)
+ [先决条件](#attribute-based-instance-type-selection-prerequisites)
+ [使用基于属性的实例类型选择创建一个混合实例组（控制台）](#attribute-based-instance-type-selection-console)
+ [使用基于属性的实例类型选择创建一个混合实例组（Amazon CLI）](#attribute-based-instance-type-selection-aws-cli)
+ [示例配置](#attribute-based-instance-type-selection-example-configurations)
+ [预览您的实例类型](#attribute-based-instance-type-selection-preview)
+ [相关资源](#attribute-based-instance-type-selection-related-resources)

## 基于属性的实例类型选择的工作原理
<a name="how-attribute-based-instance-type-selection-works"></a>

通过基于属性的实例类型选择，您无需提供特定实例类型列表，而是提供实例所需的实例属性列表，例如：
+ **vCPU 计数**-每个实例的最小和最大 v CPUs 数。
+ **内存**-每个实例的最小 GiBs 和最大内存。
+ **本地存储** - 是使用 EBS 还是实例存储卷作为本地存储。
+ **可突增性能** - 是否使用 T 实例系列（包括 T4g、T3a、T3 和 T2 类型）。

有许多选项可用于定义您的实例要求。有关每个选项和默认值的描述，请参阅[InstanceRequirements](https://docs.amazonaws.cn/autoscaling/ec2/APIReference/API_InstanceRequirements.html)《*Amazon EC2 Auto Scaling API 参考*》。

当您的自动扩缩组需要启动实例时，它将搜索与您指定的属性匹配且在该可用区中可用的实例类型。然后，分配策略确定启动哪种匹配的实例类型。默认情况下，基于属性的实例类型选择启用了价格保护功能，以防止您的自动扩缩组启动超出预算阈值的实例类型。

默认情况下，在设置自动扩缩组所需的容量时，使用实例数作为计量单位，这意味着每个实例算作一个单位。

或者，您可以将所需容量的值设置为 v 数CPUs 或内存量。为此，请在或 `UpdateAutoScalingGroup` API 操作中使用 Amazon Web Services 管理控制台 或`DesiredCapacityType`属性的**所需容量类型**下拉字段。`CreateAutoScalingGroup`然后，Amazon EC2 Auto Scaling 会启动满足所需 vCPU 或内存容量所需的实例数量。例如，如果您使用 v CPUs 作为所需容量类型，并使用CPUs 每个容量为 2 v 的实例，则所需容量为 10 v CPUs 将启动 5 个实例。这是[实例权重](ec2-auto-scaling-mixed-instances-groups-instance-weighting.md)的实用替代方案。

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

通过价格保护，您可以指定愿意为由自动扩缩组启动的 EC2 实例所支付的最高价格。价格保护是一项功能，可以防止自动扩缩组使用您认为成本过高的实例类型，即使其恰好适合您指定的属性。

默认已启用价格保护，价格保护为按需型实例和竞价型实例设置了单独的价格阈值。当 Amazon EC2 Auto Scaling 需要启动新实例时，不会启动定价高于相关阈值的任何实例类型。

**Topics**
+ [按需价格保护](#on-demand-price-price-protection)
+ [竞价价格保护](#spot-price-price-protection)
+ [自定义价格保护](#customize-price-price-protection)

### 按需价格保护
<a name="on-demand-price-price-protection"></a>

对于按需型实例，您可以将愿意支付的最高按需价格定义为高于已确定按需价格的百分比。已确定按需价格是具有指定属性的、价格最低的最新一代 C、M 或 R 实例类型的价格。

如果未明确定义按需价格保护值，则将使用比已确定按需价格高 20% 的默认最高按需价格。

### 竞价价格保护
<a name="spot-price-price-protection"></a>

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

您可以使用以下选项之一，手动指定价格保护。如果您手动设置价格保护，则建议您使用第一个选项。
+ **已确定*按需价格*的百分比**：已确定按需价格是具有指定属性的、价格最低的最新一代 C、M 或 R 实例类型的价格。
+ **高于已确定*竞价价格*的百分比**：已确定竞价价格是具有指定属性的、价格最低的最新一代 C、M 或 R 实例类型的价格。不建议使用此选项，因为竞价价格可能会波动，因此您的价格保护阈值也可能会波动。

### 自定义价格保护
<a name="customize-price-price-protection"></a>

您可以在 Amazon EC2 Auto Scaling 控制台中或使用或自定义价格保护阈值 SDKs。 Amazon CLI 
+ 在控制台中，使用**其他实例属性**中的**按需价格保护**和**竞价价格保护**设置。
+ 在[InstanceRequirements](https://docs.amazonaws.cn/autoscaling/ec2/APIReference/API_InstanceRequirements.html)结构中，要指定按需实例价格保护阈值，请使用`OnDemandMaxPricePercentageOverLowestPrice`属性。要指定竞价型实例价格保护阈值，请使用 `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice` 或 `SpotMaxPricePercentageOverLowestPrice` 属性。

如果您将 “**所需容量类型**” (`DesiredCapacityType`) 设置为 **v CPUs** 或**内存 GiB**，则价格保护将根据每个 vCPU 或每个内存的价格而非每个实例的价格适用。

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

**注意**  
如果没有与指定属性匹配的最新一代 C、M 或 R 实例类型，则价格保护仍然适用。如果找不到匹配项，则已确定价格来自匹配指定属性的、价格最低的最新一代实例类型；如果没有，则来自价格最低的上一代实例类型。

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

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

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

**不支持的实例系列**  
以下实例系列不支持性能保护：
+ `c1`
+ `g3` \$1 `g3s`
+ `hpc7g`
+ `m1` \$1 `m2`
+ `mac1` \$1 `mac2` \$1 `mac2-m1ultra` \$1 `mac2-m2` \$1 `mac2-m2pro`
+ `p3dn` \$1 `p4d` \$1 `p5`
+ `t1`
+ `u-12tb1` \$1 `u-18tb1` \$1 `u-24tb1` \$1 `u-3tb1` \$1 `u-6tb1` \$1 `u-9tb1` \$1 `u7i-12tb` \$1 `u7in-16tb` \$1 `u7in-24tb` \$1 `u7in-32tb`

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

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

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

**注意事项**  
使用性能保护时，请注意以下事项：
+ 您可以指定实例类型或实例属性，但不能同时指定两者。
+ 在一个请求配置中，最多可以指定四个 `InstanceRequirements` 结构。

## 先决条件
<a name="attribute-based-instance-type-selection-prerequisites"></a>
+ 创建启动模板。有关更多信息，请参阅 [为 Auto Scaling 组创建启动模板](create-launch-template.md)。
+ 验证启动模板尚未请求竞价型实例。

## 使用基于属性的实例类型选择创建一个混合实例组（控制台）
<a name="attribute-based-instance-type-selection-console"></a>

通过以下过程使用基于属性的实例类型选择创建混合实例组。为了帮助您高效地完成这些步骤，我们跳过了一些可选部分。

对于大多数通用工作负载，只需指定所需的 v 数量CPUs 和内存就足够了。对于高级使用案例，您可以指定存储类型、网络接口、CPU 制造商和加速器类型等属性。

要查看混合实例组的最佳实践，请参阅[创建混合实例组的设置概述](mixed-instances-groups-set-up-overview.md)。

**创建一个混合实例组**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 在屏幕顶部的导航栏中，选择在创建启动模板时使用的同一 Amazon Web Services 区域 。

1. 选择**创建自动扩缩组**。

1. 在**选择启动模板或配置**页面上，对于**自动扩缩组名称**，输入自动扩缩组的名称。

1. 要选择启动模板，请执行以下操作：

   1. 对于**启动模板**，请选择现有启动模板。

   1. 对于 **Launch template version（启动模板版本）**，选择自动扩缩组在扩展时使用启动模板的默认版本、最新版本还是特定版本。

   1. 验证您的启动模板是否支持您计划使用的所有选项，然后选择**下一步**。

1. 在**选择实例启动选项**页面上，执行以下操作：

   1. 对于 **Instance type requirements**（实例类型要求），请选择 **Override launch template**（覆盖启动模板）。
**注意**  
如果您选择了某个已经包含一组实例属性（例如 vCPU 和内存）的启动模板，那么将显示实例属性。这些属性将被添加到自动扩缩组属性中，您可以随时通过 Amazon EC2 Auto Scaling 控制台更新这些属性。

   1. 在 **“指定实例属性”** 下，首先输入您的 v CPUs 和内存要求。
      + 对于 **v CPUs**，输入所需的最小和最大值 v CPUs。 要指定无限制，请选择**无最小值、无****最大值**或两者兼而有之。
      + 对于 **Memory (GiB)**（内存 (GiB)），输入所需的最小和最大内存量。要指定没有限制，请选择 **No minimum**（没有最小值）和/或 **No maximum**（没有最大值）。

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

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

   1. 在 **实例购买选项**下，对于 **实例分配**，指定要启动的按需型实例和竞价型实例在该组中所占的百分比。如果您的应用程序无状态、容错，并且可以处理中断的实例，则可以指定更高的竞价型实例百分比。

   1. （可选）如果您指定了一个竞价型实例百分比，请选中**包括按需型基本容量**旁边的复选框，然后指定按需型实例在自动扩缩组的最小初始容量中必须达到的数量。超出基本容量的任何内容都使用**百分比**来确定要启动多少按需实例和 Spot 实例。

   1. 在 **Allocation strategies**（分配策略）下，已为 **On-Demand allocation strategy**（按需分配策略）自动选择 **Lowest price**（最低价格），无法对其进行更改。

   1. 对于 **Spot allocation strategy**（竞价型分配策略），选择分配策略。默认情况下，将选择 **Price capacity optimized**（价格容量优化）。

   1. 对于**容量再平衡**，选择启用还是禁用容量再平衡。使用容量再平衡功能，以自动响应竞价型实例因竞价中断而即将终止的情况。有关更多信息，请参阅 [Auto Scaling 进行容量再平衡以替换存在风险的竞价型实例](ec2-auto-scaling-capacity-rebalancing.md)。

   1. 在 **Network** (网络) 下，对于 **VPC**，选择相应的 VPC。自动扩缩组必须与您在启动模板中指定的安全组创建在相同的 VPC 中。

   1. 对于 **Availability Zones and subnets** (可用区和子网)，选择指定 VPC 中的一个或多个子网。可以在多个可用区中使用子网以提供高可用性。有关更多信息，请参阅 [选择 VPC 子网时的注意事项](asg-in-vpc.md#as-vpc-considerations)。

   1. 选择**下一步**、**下一步**。

1. 对于 **Configure group size and scaling policies**（配置组大小和扩缩策略）步骤，请执行以下操作：

   1. 如果您希望以实例以外的其他单位来衡量所需容量，请为**组大小**、**所需容量类型**选择合适的选项。**支持单位**CPUs、**v** 和**内存 GiB**。默认情况下，Amazon EC2 Auto Scaling 指会定 **Units**（单位），这会用实例数量来衡量。

   1. 为自动扩缩组设置初始 **所需容量**。

   1. 在**扩展**部分的**扩展限制**下，如果**所需容量**的新值大于**所需的最小容量**和**最大所需容量**，则**所需的最大容量**将自动增加到新的所需容量值。您可以按需更改这些限制。有关更多信息，请参阅 [为自动扩缩组设置扩缩限制](asg-capacity-limits.md)。

1. 选择 **Skip to review** (跳转以查看)。

1. 在 **Review**（查看）页面上，选择 **Create Auto Scaling group**（创建 Auto Scaling 组）。

## 使用基于属性的实例类型选择创建一个混合实例组（Amazon CLI）
<a name="attribute-based-instance-type-selection-aws-cli"></a>

**使用命令行创建一个混合实例组**  
使用以下命令之一：
+ [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) (Amazon CLI)
+ [新-ASAuto ScalingGroup](https://docs.amazonaws.cn/powershell/latest/reference/items/New-ASAutoScalingGroup.html) (Amazon Tools for Windows PowerShell)

## 示例配置
<a name="attribute-based-instance-type-selection-example-configurations"></a>

要使用创建具有基于属性的实例类型选择的 Auto Scaling 组 Amazon CLI，请使用以下[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)命令。

指定了以下实例属性：
+ `VCpuCount`— 实例类型必须最小为四 vCPUs，最大为八 v CPUs。
+ `MemoryMiB` – 实例类型的最小内存必须为 16384 MiB。
+ `CpuManufacturers` - 实例类型必须具有英特尔制造的 CPU。

### JSON
<a name="attribute-based-instance-type-selection-aws-cli-json"></a>

```
aws autoscaling create-auto-scaling-group --cli-input-json file://~/config.json
```

下面是一个 `config.json` 示例文件。

```
{
    "AutoScalingGroupName": "my-asg",
    "DesiredCapacityType": "units",
    "MixedInstancesPolicy": {
        "LaunchTemplate": {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "$Default"
            },
            "Overrides": [{
                "InstanceRequirements": {
                    "VCpuCount": {"Min": 4, "Max": 8},
                    "MemoryMiB": {"Min": 16384},
                    "CpuManufacturers": ["intel"]
                }
            }]
        },
        "InstancesDistribution": {
            "OnDemandPercentageAboveBaseCapacity": 50,
            "SpotAllocationStrategy": "price-capacity-optimized"
        }
    },
    "MinSize": 0,
    "MaxSize": 100,
    "DesiredCapacity": 4,
    "DesiredCapacityType": "units",
    "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782"
}
```

要将所需容量的值设置为 v 数CPUs 或内存量，请在文件`"DesiredCapacityType": "memory-mib"`中指定`"DesiredCapacityType": "vcpu"`或。默认的所需容量类型为 `units`，它将所需容量的值设置为实例数。

### YAML
<a name="attribute-based-instance-type-selection-aws-cli-yaml"></a>

或者，您可以使用以下[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)命令创建 Auto Scaling 组。这将引用 YAML 文件作为自动扩缩组的唯一参数。

```
aws autoscaling create-auto-scaling-group --cli-input-yaml file://~/config.yaml
```

下面是一个 `config.yaml` 示例文件。

```
---
AutoScalingGroupName: my-asg
DesiredCapacityType: units
MixedInstancesPolicy:
  LaunchTemplate:
    LaunchTemplateSpecification:
      LaunchTemplateName: my-launch-template
      Version: $Default
    Overrides:
    - InstanceRequirements:
         VCpuCount:
           Min: 2
           Max: 4
         MemoryMiB:
           Min: 2048
         CpuManufacturers:
         - intel
  InstancesDistribution:
    OnDemandPercentageAboveBaseCapacity: 50
    SpotAllocationStrategy: price-capacity-optimized
MinSize: 0
MaxSize: 100
DesiredCapacity: 4
DesiredCapacityType: units
VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782
```

要将所需容量的值设置为 v 数CPUs 或内存量，请在文件`DesiredCapacityType: memory-mib`中指定`DesiredCapacityType: vcpu`或。默认的所需容量类型为 `units`，它将所需容量的值设置为实例数。

有关如何使用多个启动模板和基于属性的实例类型选择的示例，请参阅[使用多个启动模板](ec2-auto-scaling-mixed-instances-groups-launch-template-overrides.md)。

## 预览您的实例类型
<a name="attribute-based-instance-type-selection-preview"></a>

您可以预览符合计算要求的实例类型而无需启动它们，并在必要时调整要求。在 Amazon EC2 Auto Scaling 控制台中创建 Auto Scaling 组时，实例类型的预览将显示在 **Choose instance launch options**（选择实例启动选项）页面的 **Preview matching instance types**（预览匹配的实例类型）部分中。

或者，您可以使用 Amazon CLI 或软件开发工具包调用 Amazon EC2 [GetInstanceTypesFromInstanceRequirements](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html)API 来预览实例类型。在请求中传递 `InstanceRequirements` 参数，其格式与用于创建或更新 Auto Scaling 组的格式一致。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[预览具有指定属性的实例类型](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements)。

## 相关资源
<a name="attribute-based-instance-type-selection-related-resources"></a>

要了解有关基于属性的实例类型选择的更多信息，请参阅博客上的 EC2 A [uto Scaling 和 EC2 队列的基于属性的实例类型选择](https://www.amazonaws.cn/blogs/aws/new-attribute-based-instance-type-selection-for-ec2-auto-scaling-and-ec2-fleet/)。 Amazon 

当您使用 Amazon CloudFormation创建一个自动缩放组时，您可以声明基于属性的实例类型选择。有关更多信息，请参阅 *Amazon CloudFormation 用户指南*中的 [自动扩缩模板片段](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html#scenario-mixed-instances-group-template-examples)部分中的示例片段。