示例:使用基于属性的实例类型选择创建 Auto Scaling 组
在创建自动扩缩组时,必须指定信息以配置以下内容:
-
为 Amazon EC2 实例指定 AMI 和实例类型的启动模板
-
实例的可用区和 VPC 子网
-
所需容量
-
最小容量和最大容量限制
作为在创建混合实例组时手动选择实例类型的替代方法,您可以指定一组用于描述计算要求的实例属性。当 Amazon EC2 Auto Scaling 启动实例时,Auto Scaling 组使用的所有实例类型都必须与您所需实例的属性匹配。这称为基于属性的实例类型选择。
您的自动扩缩组或启动模板指定了您的实例属性。这些属性包括您打算在实例上运行的应用程序所需的存储容量和计算能力。此外,您的自动扩缩组或启动模板为您可以自定义的竞价型实例和按需型实例指定了两个价格保护阈值。通过这种方式,您可以在不需要时防止 Amazon EC2 Auto Scaling 启动更昂贵的实例类型。
这种方法非常适合于可以灵活处理所使用实例类型的工作负载和框架,例如容器、大数据和 CI/CD。
选择基于属性的实例类型具有以下优势:
-
Amazon EC2 Auto Scaling 可以从各种实例类型中进行选择,从而启动竞价型实例。这是符合灵活处理实例类型的竞价型实例的最佳实践,可以使得 Amazon EC2 竞价型服务有更好的机会查找和分配所需的计算容量。
-
因为可供选择的选项如此之多,为您的工作负载找到合适的实例类型可能会非常耗时。通过指定实例属性,您可以在配置混合实例组时简化实例类型的选择。
-
您的 Auto Scaling 组可以在发布新一代实例类型时就对其进行采用。新一代实例类型将自动投入使用,如果它们符合您的要求并与您为 Auto Scaling 组选择的分配策略保持一致。
您可以通过 Amazon Web Services Management Console、Amazon CLI 或 SDK 使用基于属性的实例类型选择。
有关如何在启动模板中配置基于属性的实例类型选择的信息,请参阅 为 Auto Scaling 组创建启动模板。您还可以通过开发工具包在 Amazon EC2 Auto Scaling API 调用中传递参数,以配置基于属性的实例类型选择。有关更多信息,请参阅《Amazon EC2 Auto Scaling API 参考》中的 InstanceRequirements。
要详细了解基于属性的实例类型选择,请参阅 Amazon 博客中的适用于 EC2 Auto Scaling 和 EC2 机群的基于属性的实例类型选择
注意事项
使用基于属性的实例类型选择时需要考虑以下几点:
-
对于大多数通用型工作负载,指定您所需要的 vCPU 和内存数量就足够了。对于高级使用案例,您可以指定存储类型、网络接口、CPU 制造商和加速器类型等属性。
-
默认情况下,您将 Auto Scaling 组的所需容量值设置为实例的数量。在使用基于属性的实例类型选择时,您可以选择将所需容量类型指定为 vCPU 的数量或内存量。然后,在 Amazon EC2 Auto Scaling 启动实例时,它们的 vCPU 数量或内存量会计入您所需的容量中。在 Amazon EC2 Auto Scaling 控制台中创建您的组时,此设置将显示在 Configure group size and scaling policies(配置组大小和扩展策略)页面的 Group size(组大小)部分中。此功能是实例权重功能的有用替代。
-
您可以预览符合计算要求的实例类型而无需启动它们,并在必要时调整要求。在 Amazon EC2 Auto Scaling 控制台中创建 Auto Scaling 组时,实例类型的预览将显示在 Choose instance launch options(选择实例启动选项)页面的 Preview matching instance types(预览匹配的实例类型)部分中。
-
或者,您可以通过使用 Amazon CLI 或者 SDK 建立 Amazon EC2 GetInstanceTypesFromInstanceRequirements API 调用来预览实例类型。在请求中传递
InstanceRequirements
参数,其格式与用于创建或更新 Auto Scaling 组的格式一致。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的预览具有指定属性的实例类型。
了解价格保护
价格保护是一项功能,可以保护您的 Auto Scaling 组免受实例类型之间的极端价格差异影响。当您使用基于属性的实例类型选择创建新的 Auto Scaling 组或更新现有 Auto Scaling 组时,我们将默认启用价格保护。或者,您可以为竞价型和按需型实例选择价格保护阈值。当您执行此操作时,Amazon EC2 Auto Scaling 不会选择价格高于您指定阈值的实例类型。阈值代表您愿意支付的金额,其定义是高于基准的百分比,而不是绝对值。基准取决于具有指定属性的最便宜当前一代 M、C 或 R 实例类型的价格。如果您的属性与任何 M、C 或 R 实例类型都不匹配,我们将使用价格最低的实例类型。
如果您没有指定阈值,则默认使用以下阈值:
-
对于按需型实例,价格保护阈值设置为 20%。
-
对于竞价型实例,价格保护阈值设置为 100%。
在 Amazon EC2 Auto Scaling 控制台中创建自动扩缩组时,您可以更新这些值。在 Choose instance launch options(选择实例启动选项)页面上,从 Additional instance attributes(其他实例属性)下拉列表中选择所需的价格保护属性。然后,在文本框中键入或选择该属性的值。您也可以稍后通过从控制台编辑自动扩缩组或使用 Amazon CLI 或开发工具包更新这些值。
如果您将 Desired capacity type(所需容量类型)设置为 vCPUs (vCPU) 或 Memory GiB(内存 GiB),则将根据单位 vCPU 价格或单位内存价格而不是单位实例价格来应用价格保护阈值。
先决条件
创建启动模板,其中包括启动 EC2 实例所需的参数,例如 Amazon Machine Image (AMI) 和安全组。有关更多信息,请参阅为 Auto Scaling 组创建启动模板。
验证启动模板尚未请求竞价型实例。
验证您拥有使用启动模板所需的权限。当您使用启动模板时,将检查您的 ec2:RunInstances
权限。如果启动模板指定了 IAM 角色,也会检查您的 iam:PassRole
权限。有关更多信息,请参阅 启动模板支持。
使用基于属性的实例类型选择
完成以下步骤以创建您可以扩展的竞价型实例和按需型实例队组。
通过以下程序使用基于属性的实例类型选择。如果您更愿意选择您的组可以启动的单个实例类型,则请参阅 Auto Scaling 组具有多个实例类型和购买选项 以通过手动选择实例类型来配置实例类型要求。
以下步骤说明了如何创建使用基于属性的实例类型选择的自动扩缩组。
-
指定用于启动实例的启动模板。
-
选择要在其中启动您的自动扩缩组的 VPC 和子网。
-
选择使用新要求覆盖启动模板的现有实例类型要求的选项。
-
指定符合您的计算需求的实例属性,例如 vCPU 数、内存大小和存储容量。
-
指定要启动的按需型实例和竞价型实例的百分比。
-
选择决定 Amazon EC2 Auto Scaling 将如何利用可能的实例类型来达到您的按需型和竞价型容量的分配策略。
-
指定组大小,包括您的所需容量、最小容量、最大容量以及所需容量类型,这定义了所需容量的测量单位。
使用基于属性的实例类型选择(控制台)创建 Auto Scaling 组
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
在屏幕顶部的导航栏中,选择在创建启动模板时使用的同一 Amazon Web Services 区域。
-
选择 Create an Auto Scaling group (创建 Auto Scaling 组)。
-
在选择启动模板或配置页面上,对于 Auto Scaling 组名称,输入 Auto Scaling 组的名称。
-
要选择启动模板,请执行以下操作:
-
对于启动模板,请选择现有启动模板。
-
对于 Launch template version(启动模板版本),选择 Auto Scaling 组在扩展时使用启动模板的默认版本、最新版本还是特定版本。
-
验证您的启动模板是否支持您计划使用的所有选项,然后选择下一步。
-
-
要选择要在其中启动实例的 VPC 和子网,请执行以下操作:
-
在 Choose instance launch options (选择实例启动选项) 页面的 Network (网络) 下方,对于 VPC,选择相应的 VPC。 Auto Scaling 组必须与您在启动模板中指定的安全组创建在相同的 VPC 中。
-
对于 Availability Zones and subnets (可用区和子网),选择指定 VPC 中的一个或多个子网。可以在多个可用区中使用子网以提供高可用性。有关更多信息,请参阅选择 VPC 子网时的注意事项。
-
-
要将您的组配置为使用基于属性的实例类型选择,请执行以下操作:
-
对于 Instance type requirements(实例类型要求),请选择 Override launch template(覆盖启动模板)。
注意 如果您选择了某个已经包含您的要求的启动模板,则启动模板设置(例如 vCPU 数和内存大小)将被自动用作属性。您可以随时通过 Amazon EC2 Auto Scaling 控制台更新这些属性。
-
在 Specify instance attributes(指定实例属性)下,首先输入 vCPU 和内存要求。
-
vCPU:输入计算要求的最小 vCPU 数量和最大 vCPU 数量。选择 No minimum(无最小值)或 No maximum(无最大值)复选框以指示该方向没有限制。
-
Memory (MiB)(内存 (MiB)):为您的计算要求输入最小和最大存储容量(以 MiB 为单位)。选择 No minimum(无最小值)或 No maximum(无最大值)复选框以指示该方向没有限制。
-
-
(可选)对于 Additional instance attributes(额外实例属性),选择 Add Attributes(添加属性)以更详细地表达您的计算要求。您在此处选择的属性和值进一步定义了可以启动的实例类型。
有关所有受支持属性的更多信息,请参阅 《Amazon EC2 Auto Scaling API 参考》中的 InstanceRequirements。
-
对于 Preview matching instance types(预览匹配的实例类型),请查看符合指定计算要求的实例类型,例如 vCPU、内存和存储。
-
在 Instance purchase options(实例购买选项)下,对于 Instances distribution(实例分配),分别指定要启动的按需型实例和竞价型实例在该组中所占的百分比。如果您的应用程序无状态、容错,并且可以处理中断的实例,则可以指定更高的竞价型实例百分比。
-
如果您指定了一个竞价型实例百分比,则可以选中 Include On-Demand base capacity(包括按需基本容量)旁边的复选框,然后指定按需型实型例在自动扩缩组的最小初始容量中必须达到的数量。超出基本容量的任何内容都使用百分比来确定要启动多少按需实例和 Spot 实例。
-
在 Allocation strategies(分配策略)下,已为 On-Demand allocation strategy(按需分配策略)自动选择 Lowest price(最低价格),无法对其进行更改。
-
对于 Spot allocation strategy(竞价型分配策略),选择分配策略。默认情况下,将选择 Price capacity optimized(价格容量优化)。默认情况下,将隐藏 Lowest price(最低价格),仅在您选择 Show all strategies(显示所有策略)时才会出现。
注意 如果您选择了 Lowest price(最低价格),则请输入价格最低的池的数量,以跨价格最低的池实现多样化。
-
对于 Capacity rebalance (容量再平衡),选择启用还是禁用容量再平衡。
如果您选择了一个竞价型实例百分比,则可以使用容量再平衡功能,以自动响应竞价型实例因竞价中断而即将终止的情况。有关更多信息,请参阅使用容量重新平衡来处理 Amazon EC2 竞价型实例中断。
-
完成之后,选择 Next(下一步)两次,以转至 Configure group size and scaling policies(配置组大小和扩缩策略)页面。
-
-
对于 Configure group size and scaling policies(配置组大小和扩缩策略)步骤,请执行以下操作:
-
如果您希望以实例以外的其他单位来衡量所需容量,请为 Desired capacity type(所需容量类型)选择相应的选项。支持 Units(单位)、vCPUs(vCPU 数)和 Memory GiB(内存 GiB)。默认情况下,Amazon EC2 Auto Scaling 指会定 Units(单位),这会用实例数量来衡量。
-
为 Desired capacity(所需容量)输入您的 Auto Scaling 组的初始大小,然后根据需要更新 Minimum capacity(最小容量)和 Maximum capacity(最大容量)。有关更多信息,请参阅为 Auto Scaling 组设置容量限制。
-
(可选)将组配置为通过指定目标跟踪扩展策略进行扩展。或者,在您创建组后指定此策略。有关更多信息,请参阅Amazon EC2 Auto Scaling 的目标跟踪扩缩策略。
-
(可选)启用实例横向缩减保护功能,该功能可以防止您的自动扩缩组在横向缩减时终止实例。有关更多信息,请参阅实例横向缩减保护。
-
在完成后,选择下一步。
-
-
(可选)要在自动扩缩组扩展时收到通知,请为 Add notification(添加通知)配置通知,然后选择 Next(下一步)。有关更多信息,请参阅在 Auto Scaling 组扩展时获取 Amazon SNS 通知。
-
(可选)要添加标签,请选择 Add tag(添加标签),为每个标签提供标签键和值,然后选择 Next(下一步)。有关更多信息,请参阅为 Auto Scaling 组和实例添加标签。
-
在 Review(查看)页面上,选择 Create Auto Scaling group(创建 Auto Scaling 组)。
示例:使用基于属性的实例类型选择创建 Auto Scaling 组 (Amazon CLI)
要使用命令行创建具有基于属性的实例类型选择的 Auto Scaling 组,您可以使用以下 create-auto-scaling-group 命令。
指定了以下实例属性:
-
VCpuCount
– 实例类型的 vCPU 数量必须最少为 4 个,最多为 8 个。 -
MemoryMiB
– 实例类型的最小内存必须为 16384 MiB。 -
CpuManufacturers
- 实例类型必须具有英特尔制造的 CPU。
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":, "MaxSize":
0
, "DesiredCapacity":
100
, "DesiredCapacityType": "units", "VPCZoneIdentifier": "
4
subnet-5ea0c127
,subnet-6194ea3b
,subnet-c934b782
" }
要将所需容量的值设置为 vCPU 的数量或内存量,请在文件中指定 "DesiredCapacityType": "vcpu"
或 "DesiredCapacityType": "memory-mib"
。默认的所需容量类型为 units
,它将所需容量的值设置为实例数。
或者,您可以使用以下 create-auto-scaling-group
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
要将所需容量的值设置为 vCPU 的数量或内存量,请在文件中指定 DesiredCapacityType: vcpu
或 DesiredCapacityType: memory-mib
。默认的所需容量类型为 units
,它将所需容量的值设置为实例数。
限制
-
您只能为使用启动模板的 Auto Scaling 组配置基于属性的实例类型选择。
-
如果您现有的 Auto Scaling 组并计划用所需的实例属性替换实例类型,则按需分配策略必须为
lowest-price
。要使用prioritized
分配策略,您必须继续手动添加实例类型并确定其优先级。此外,您的竞价型分配策略必须是price-capacity-optimized
、capacity-optimized
或lowest-price
。要使用capacity-optimized-prioritized
分配策略,您必须手动添加实例类型并确定其优先级。