使用基于属性的实例类型选择创建混合实例组
在创建混合实例组时手动选择实例类型有一个替代方法,您可以指定一组用于描述计算要求的实例属性。当 Amazon EC2 Auto Scaling 启动实例时,自动扩缩组使用的所有实例类型都必须与您所需实例的属性匹配。这称为基于属性的实例类型选择。
这种方法非常适合于可以灵活处理所使用实例类型的工作负载和框架,例如容器、大数据和 CI/CD。
选择基于属性的实例类型具有以下优势:
-
竞价型实例的最佳灵活性:Amazon EC2 Auto Scaling 可以从各种实例类型中进行选择,从而启动竞价型实例。这是符合灵活处理实例类型的竞价型实例的最佳实践,可以使得 Amazon EC2 竞价型服务有更好的机会查找和分配所需的计算容量。
-
轻松使用正确的实例类型 – 有如此多的实例类型可供使用,因此找到适用于您的工作负载的实例类型可能非常耗时。当您指定实例属性时,实例类型将自动具有工作负载所需的属性。
-
自动使用新实例类型:您的自动扩缩组可以在发布新一代实例类型时使用这些实例类型。新一代实例类型将自动投入使用,如果它们符合您的要求并与您为自动扩缩组选择的分配策略保持一致。
主题
基于属性的实例类型选择的工作原理
通过基于属性的实例类型选择,您无需提供特定实例类型列表,而是提供实例所需的实例属性列表,例如:
-
vCPU 数量 - 每个实例的最小和最大 vCPU 数量。
-
内存 - 每个实例的最小和最大内存 GiB 数量。
-
本地存储 - 是使用 EBS 还是实例存储卷作为本地存储。
-
可突增性能 - 是否使用 T 实例系列(包括 T4g、T3a、T3 和 T2 类型)。
有许多选项可用于定义您的实例要求。有关每个选项和默认值的描述,请参阅《Amazon EC2 Auto Scaling API Reference》中的 InstanceRequirements。
当您的自动扩缩组需要启动实例时,它将搜索与您指定的属性匹配且在该可用区中可用的实例类型。然后,分配策略确定启动哪种匹配的实例类型。默认情况下,基于属性的实例类型选择启用了价格保护功能,以防止您的自动扩缩组启动超出预算阈值的实例类型。
默认情况下,在设置自动扩缩组所需的容量时,使用实例数作为计量单位,这意味着每个实例算作一个单位。
此外,您可以将所需容量的值设置为 vCPU 的数量或内存量。为此,请使用 Amazon Web Services 管理控制台中的所需容量类型下拉字段或者 CreateAutoScalingGroup 或 UpdateAutoScalingGroup API 操作中的 DesiredCapacityType 属性。然后,Amazon EC2 Auto Scaling 会启动满足所需 vCPU 或内存容量所需的实例数量。例如,如果您使用 vCPU 作为所需容量类型,并使用每个具有 2 个 vCPU 的实例,则 10 个 vCPU 的所需容量将启动 5 个实例。这是实例权重的实用替代方案。
价格保护
通过价格保护,您可以指定愿意为由自动扩缩组启动的 EC2 实例所支付的最高价格。价格保护是一项功能,可以防止自动扩缩组使用您认为成本过高的实例类型,即使其恰好适合您指定的属性。
默认已启用价格保护,价格保护为按需型实例和竞价型实例设置了单独的价格阈值。当 Amazon EC2 Auto Scaling 需要启动新实例时,不会启动定价高于相关阈值的任何实例类型。
按需价格保护
对于按需型实例,您可以将愿意支付的最高按需价格定义为高于已确定按需价格的百分比。已确定按需价格是具有指定属性的、价格最低的最新一代 C、M 或 R 实例类型的价格。
如果未明确定义按需价格保护值,则将使用比已确定按需价格高 20% 的默认最高按需价格。
竞价价格保护
默认情况下,Amazon EC2 Auto Scaling 将自动应用最佳竞价型实例价格保护,从而始终如一地从各种实例类型中进行选择。您也可以自行手动设置价格保护。但是,让 Amazon EC2 Auto Scaling 为您代劳可以提高竞价型容量得到满足的可能性。
您可以使用以下选项之一,手动指定价格保护。如果您手动设置价格保护,则建议您使用第一个选项。
-
已确定按需价格的百分比:已确定按需价格是具有指定属性的、价格最低的最新一代 C、M 或 R 实例类型的价格。
-
高于已确定竞价价格的百分比:已确定竞价价格是具有指定属性的、价格最低的最新一代 C、M 或 R 实例类型的价格。不建议使用此选项,因为竞价价格可能会波动,因此您的价格保护阈值也可能会波动。
自定义价格保护
您可以在 Amazon EC2 Auto Scaling 控制台中,或者使用 Amazon CLI 或 SDK 自定义价格保护阈值。
-
在控制台中,使用其他实例属性中的按需价格保护和竞价价格保护设置。
-
在 InstanceRequirements 结构中,要指定按需型实例价格保护阈值,请使用
OnDemandMaxPricePercentageOverLowestPrice属性。要指定竞价型实例价格保护阈值,请使用MaxSpotPriceAsPercentageOfOptimalOnDemandPrice或SpotMaxPricePercentageOverLowestPrice属性。
如果您将所需容量类型 (DesiredCapacityType) 设置为 vCPU 或内存 GiB,则将根据单位 vCPU 价格或单位内存价格而不是单位实例价格来应用价格保护阈值。
您也可以关闭价格保护。要表明无价格保护阈值,请指定一个较高的百分比值,如 999999。
注意
如果没有与指定属性匹配的最新一代 C、M 或 R 实例类型,则价格保护仍然适用。如果找不到匹配项,则已确定价格来自匹配指定属性的、价格最低的最新一代实例类型;如果没有,则来自价格最低的上一代实例类型。
性能保护
性能保护是一项功能,可确保您的自动扩缩组使用的实例类型类似于或超过指定的性能基准。要使用性能保护,请指定一个实例系列作为基准参考。指定的实例系列的功能确立了可接受的最低性能水平。当 Auto Scaling 选择实例类型时,它会考虑您指定的属性和性能基准。低于性能基准的实例类型将被自动排除在选择范围之外,即使它们与您指定的其他属性相匹配。这可确保所有选定的实例类型都提供与指定实例系列建立的基准相似或更好的性能。Auto Scaling 使用此基准来指导实例类型选择,但并不能保证选定实例类型始终会超过每个应用程序的基准。
目前,此功能仅支持将 CPU 性能作为基准性能因素。指定实例系列的 CPU 性能充当性能基准,确保选定的实例类型与该基准相似或超过该基准。具有相同 CPU 处理器的实例系列会产生相同的筛选结果,即使其网络或磁盘性能有所不同。例如,将 c6in 或 c6i 指定为基准参考将产生相同的基于性能的筛选结果,因为两个实例系列使用相同的 CPU 处理器。
不支持的实例系列
以下实例系列不支持性能保护:
-
c1 -
g3|g3s -
hpc7g -
m1|m2 -
mac1|mac2|mac2-m1ultra|mac2-m2|mac2-m2pro -
p3dn|p4d|p5 -
t1 -
u-12tb1|u-18tb1|u-24tb1|u-3tb1|u-6tb1|u-9tb1|u7i-12tb|u7in-16tb|u7in-24tb|u7in-32tb
如果您通过指定支持的实例系列来启用性能保护,则返回的实例类型将排除上述不受支持的实例系列。
示例:设置 CPU 性能基准
在以下示例中,实例要求是使用具有与 c6i 实例系列一样性能的 CPU 核心的实例类型启动。这将筛选掉 CPU 处理器性能较低的实例类型,即使它们满足您指定的其他实例要求(例如 vCPU 数量)。例如,如果您指定的实例属性包括 4 个 vCPU 和 16 GB 内存,则具有这些属性但 CPU 性能低于 c6i 的实例类型将被排除在选择范围之外。
"BaselinePerformanceFactors": { "Cpu": { "References": [ { "InstanceFamily": "c6i" } ] }
注意事项
使用性能保护时,请注意以下事项:
-
您可以指定实例类型或实例属性,但不能同时指定两者。
-
在一个请求配置中,最多可以指定四个
InstanceRequirements结构。
先决条件
-
创建启动模板。有关更多信息,请参阅 为 Auto Scaling 组创建启动模板。
-
验证启动模板尚未请求竞价型实例。
使用基于属性的实例类型选择创建一个混合实例组(控制台)
通过以下过程使用基于属性的实例类型选择创建混合实例组。为了帮助您高效地完成这些步骤,我们跳过了一些可选部分。
对于大多数通用型工作负载,指定您所需要的 vCPU 和内存数量就足够了。对于高级使用案例,您可以指定存储类型、网络接口、CPU 制造商和加速器类型等属性。
要查看混合实例组的最佳实践,请参阅创建混合实例组的设置概述。
创建一个混合实例组
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 自动扩缩组。 -
在屏幕顶部的导航栏中,选择在创建启动模板时使用的同一 Amazon Web Services 区域。
-
选择创建自动扩缩组。
-
在选择启动模板或配置页面上,对于自动扩缩组名称,输入自动扩缩组的名称。
-
要选择启动模板,请执行以下操作:
-
对于启动模板,请选择现有启动模板。
-
对于 Launch template version(启动模板版本),选择自动扩缩组在扩展时使用启动模板的默认版本、最新版本还是特定版本。
-
验证您的启动模板是否支持您计划使用的所有选项,然后选择下一步。
-
-
在选择实例启动选项页面上,执行以下操作:
-
对于 Instance type requirements(实例类型要求),请选择 Override launch template(覆盖启动模板)。
注意
如果您选择了某个已经包含一组实例属性(例如 vCPU 和内存)的启动模板,那么将显示实例属性。这些属性将被添加到自动扩缩组属性中,您可以随时通过 Amazon EC2 Auto Scaling 控制台更新这些属性。
-
在 Specify instance attributes(指定实例属性)下,首先输入 vCPU 和内存要求。
-
对于 vCPU,输入所需的最小和最大 vCPU 数。要指定没有限制,请选择 No minimum(没有最小值)和/或 No maximum(没有最大值)。
-
对于 Memory (GiB)(内存 (GiB)),输入所需的最小和最大内存量。要指定没有限制,请选择 No minimum(没有最小值)和/或 No maximum(没有最大值)。
-
-
(可选)对于 Additional instance attributes(其它实例属性),您可以选择指定一个或多个属性以更详细地表达计算要求。每个额外属性都会进一步增加对您的请求的限制。
-
(可选)展开预览匹配的实例类型以查看具有指定属性的实例类型。
-
在 实例购买选项下,对于 实例分配,指定要启动的按需型实例和竞价型实例在该组中所占的百分比。如果您的应用程序无状态、容错,并且可以处理中断的实例,则可以指定更高的竞价型实例百分比。
-
(可选)如果您指定了一个竞价型实例百分比,请选中包括按需型基本容量旁边的复选框,然后指定按需型实例在自动扩缩组的最小初始容量中必须达到的数量。超出基本容量的任何内容都使用百分比来确定要启动多少按需实例和 Spot 实例。
-
在 Allocation strategies(分配策略)下,已为 On-Demand allocation strategy(按需分配策略)自动选择 Lowest price(最低价格),无法对其进行更改。
-
对于 Spot allocation strategy(竞价型分配策略),选择分配策略。默认情况下,将选择 Price capacity optimized(价格容量优化)。
-
对于容量再平衡,选择启用还是禁用容量再平衡。使用容量再平衡功能,以自动响应竞价型实例因竞价中断而即将终止的情况。有关更多信息,请参阅 Auto Scaling 进行容量再平衡以替换存在风险的竞价型实例。
-
在 Network (网络) 下,对于 VPC,选择相应的 VPC。自动扩缩组必须与您在启动模板中指定的安全组创建在相同的 VPC 中。
-
对于 Availability Zones and subnets (可用区和子网),选择指定 VPC 中的一个或多个子网。可以在多个可用区中使用子网以提供高可用性。有关更多信息,请参阅 选择 VPC 子网时的注意事项。
-
选择下一步、下一步。
-
-
对于 Configure group size and scaling policies(配置组大小和扩缩策略)步骤,请执行以下操作:
-
如果您希望以实例以外的其他单位来衡量所需容量,请为组大小、所需容量类型选择合适的选项。支持 Units(单位)、vCPUs(vCPU 数)和 Memory GiB(内存 GiB)。默认情况下,Amazon EC2 Auto Scaling 指会定 Units(单位),这会用实例数量来衡量。
-
为自动扩缩组设置初始 所需容量。
-
在扩展部分的扩展限制下,如果所需容量的新值大于所需的最小容量和最大所需容量,则所需的最大容量将自动增加到新的所需容量值。您可以按需更改这些限制。有关更多信息,请参阅 为自动扩缩组设置扩缩限制。
-
-
选择 Skip to review (跳转以查看)。
-
在 Review(查看)页面上,选择 Create Auto Scaling group(创建 Auto Scaling 组)。
使用基于属性的实例类型选择创建一个混合实例组(Amazon CLI)
使用命令行创建一个混合实例组
使用以下命令之一:
-
create-auto-scaling-group
(Amazon CLI) -
New-ASAutoScalingGroup (Amazon Tools for Windows PowerShell)
示例配置
要使用Amazon CLI创建具有基于属性的实例类型选择的自动扩缩组,请使用以下 create-auto-scaling-group
指定了以下实例属性:
-
VCpuCount– 实例类型的 vCPU 数量必须最少为 4 个,最多为 8 个。 -
MemoryMiB– 实例类型的最小内存必须为 16384 MiB。 -
CpuManufacturers- 实例类型必须具有英特尔制造的 CPU。
aws autoscaling create-auto-scaling-group --cli-input-jsonfile://~/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":, "MaxSize":0, "DesiredCapacity":100, "DesiredCapacityType": "units", "VPCZoneIdentifier": "4subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }
要将所需容量的值设置为 vCPU 的数量或内存量,请在文件中指定 "DesiredCapacityType": "vcpu" 或 "DesiredCapacityType": "memory-mib"。默认的所需容量类型为 units,它将所需容量的值设置为实例数。
或者,您可以使用以下 create-auto-scaling-group
aws autoscaling create-auto-scaling-group --cli-input-yamlfile://~/config.yaml
下面是一个 config.yaml 示例文件。
--- AutoScalingGroupName:my-asgDesiredCapacityType: units MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName:my-launch-templateVersion:$DefaultOverrides: - InstanceRequirements: VCpuCount: Min: 2 Max: 4 MemoryMiB: Min: 2048 CpuManufacturers: - intel InstancesDistribution: OnDemandPercentageAboveBaseCapacity:50SpotAllocationStrategy: price-capacity-optimized MinSize:0MaxSize:100DesiredCapacity:4DesiredCapacityType: units VPCZoneIdentifier:subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782
要将所需容量的值设置为 vCPU 的数量或内存量,请在文件中指定 DesiredCapacityType: vcpu 或 DesiredCapacityType: memory-mib。默认的所需容量类型为 units,它将所需容量的值设置为实例数。
有关如何使用多个启动模板和基于属性的实例类型选择的示例,请参阅使用多个启动模板。
预览您的实例类型
您可以预览符合计算要求的实例类型而无需启动它们,并在必要时调整要求。在 Amazon EC2 Auto Scaling 控制台中创建 Auto Scaling 组时,实例类型的预览将显示在 Choose instance launch options(选择实例启动选项)页面的 Preview matching instance types(预览匹配的实例类型)部分中。
或者,您可以通过使用 Amazon CLI 或者 SDK 建立 Amazon EC2 GetInstanceTypesFromInstanceRequirements API 调用来预览实例类型。在请求中传递 InstanceRequirements 参数,其格式与用于创建或更新 Auto Scaling 组的格式一致。有关更多信息,请参阅《Amazon EC2 用户指南》中的预览具有指定属性的实例类型。
相关资源
要详细了解基于属性的实例类型选择,请参阅 Amazon 博客中的适用于 EC2 Auto Scaling 和 EC2 机群的基于属性的实例类型选择
当您使用 Amazon CloudFormation 创建一个自动缩放组时,您可以声明基于属性的实例类型选择。有关更多信息,请参阅 Amazon CloudFormation 用户指南中的 自动扩缩模板片段部分中的示例片段。