指定 EC2 实例集或竞价型实例集的实例类型选择属性
创建 EC2 实例集或竞价型实例集时,必须指定一种或多种实例类型,以便配置实例集中的按需型实例和竞价型实例。除了手动指定实例类型外,还可以指定实例必须具有的属性,Amazon EC2 将使用这些属性标识所有实例类型。这称为基于属性的实例类型选择。例如,您可以指定实例所需的最小和最大 vCPU 数量,实例集将使用满足这些 vCPU 要求的任何可用实例类型启动实例。
基于属性的实例类型选择是工作负载和框架的理想选择,这些工作负载和框架可以灵活地确定所用的实例类型,例如在运行容器或 Web 机群、处理大数据以及实施持续集成和部署 (CI/CD) 工具等情况下。
优点
基于属性的实例类型选择具有以下优势:
-
轻松使用正确的实例类型 – 有如此多的实例类型可供使用,因此找到适用于您的工作负载的实例类型可能非常耗时。当您指定实例属性时,实例类型将自动具有工作负载所需的属性。
-
简化配置 – 要为实例集手动指定多种实例类型,您必须为每种实例类型创建单独的启动模板覆盖。但是,借助基于属性的实例类型选择,要提供多种实例类型,您只需在启动模板或启动模板覆盖中指定实例属性即可。
-
自动使用新实例类型 – 当您指定实例属性而不是实例类型时,您的实例集可以在新一代实例类型发布时使用这些实例类型,“满足未来”实例集配置的需求。
-
实例类型灵活性 – 指定实例属性而不是实例类型时,实例集可以从各种实例类型中进行选择来启动竞价型实例,从而遵循灵活选择竞价型实例类型的最佳实践。
主题
基于属性的实例类型选择的工作原理
要在机群配置中使用基于属性的实例类型选择,请将实例类型列表替换为实例所需的实例属性列表。EC2 实例集或竞价型实例集将在具有指定实例属性的任何可用实例类型上启动实例。
实例属性的类型
您可以指定多个实例属性来表达计算需求,例如:
-
vCPU 数量 - 每个实例的最小和最大 vCPU 数量。
-
内存 - 每个实例的最小和最大内存 GiB 数量。
-
本地存储 - 是使用 EBS 还是实例存储卷作为本地存储。
-
可突增性能 - 是否使用 T 实例系列(包括 T4g、T3a、T3 和 T2 类型)。
有关每个属性和默认值的描述,请参阅 Amazon EC2 API 参考中的 InstanceRequirements。
在何处配置基于属性的实例类型选择
根据您使用的是控制台还是 Amazon CLI,可以按如下方式为基于属性的实例类型选择指定实例属性:
在控制台中,您可以在以下实例集配置组件中指定实例属性:
-
在启动模板中,并在实例集请求中引用启动模板
-
(仅适用于竞价型实例集)在实例集请求中
在 Amazon CLI 中,您可以在以下一个或全部机群配置组件中指定实例属性:
-
在启动模板中,并在实例集请求中引用启动模板
-
在启动模板覆盖中
如果您想混合应用使用不同 AMI 的实例,则可以在多个启动模板覆盖中指定实例属性。例如,不同的实例类型可以使用 x86 和基于 ARM 的处理器。
-
(仅适用于竞价型实例集)在启动规范中
EC2 实例集或竞价型实例集如何在预置实例集时使用基于属性的实例类型选择
EC2 实例集或竞价型实例集通过以下方式预置实例集:
-
标识具有指定属性的实例类型。
-
使用价格保护来确定要排除的实例类型。
-
根据具有匹配实例类型的 Amazon 区域或可用区确定将从中启动实例的容量池。
-
应用指定的分配策略来确定从中启动实例的容量池。
请注意,基于属性的实例类型选择不会选择从中预置实例集的容量池;这是分配策略的任务。
如果您指定分配策略,实例集将根据指定的分配策略启动实例。
-
若为竞价型实例,基于属性的实例类型选择支持价格容量优化、容量优化和最低价格分配策略。请注意,不推荐使用最低价格竞价型分配策略,因为这对竞价型实例造成的中断风险最高。
-
若为按需型实例,基于属性的实例类型选择支持最低价格分配策略。
-
-
如果没有适用于具有指定实例属性的实例类型的容量,则无法启动任何实例,并且机群返回错误。
价格保护
价格保护是一项功能,可以防止 EC2 实例集或竞价型实例集使用您认为成本过高的实例类型,即使它们恰好适合您指定的属性。要使用价格保护,您需要设置价格阈值。然后,当 Amazon EC2 选择具有您的属性的实例类型时,会排除定价高于阈值的实例类型。
Amazon EC2 计算价格阈值的方式如下:
-
Amazon EC2 首先从与您的属性匹配的实例类型中识别出价格最低的实例类型。
-
然后,Amazon EC2 会使用您为价格保护参数指定的值(以百分比表示)乘以已识别的实例类型的价格。其结果就是用作价格阈值的价格。
按需型实例和竞价型实例有不同的价格阈值。
当您使用基于属性的实例类型选择创建实例集时,默认情况下会启用价格保护。您可以保留默认值,也可以指定自己的值。
您也可以关闭价格保护。要表明无价格保护阈值,请指定一个较高的百分比值,如 999999
。
价格最低的实例类型的识别方式
Amazon EC2 会从与您指定的属性相匹配的实例类型中识别价格最低的实例类型,从而确定价格阈值所依据的价格。它的做法具体如下:
-
它首先会从当前一代 C、M 或 R 实例类型中查找与您的属性相匹配的实例类型。如果找到匹配结果,它就会识别出价格最低的实例类型。
-
如果没有匹配结果,它会从当前一代的任何实例类型中查找与您的属性相匹配的实例类型。如果找到匹配结果,它就会识别出价格最低的实例类型。
-
如果没有匹配结果,它会从上一代的任何实例类型中查找与您的属性相匹配的实例类型,并识别出价格最低的实例类型。
按需型实例价格保护
按需型实例类型的价格保护阈值基于已识别的最低价格按需型实例类型(OnDemandMaxPricePercentageOverLowestPrice
),按照高于其价格的百分比计算。您可以指定该高出的百分比,表示您原意支付的价格。如果您未指定此参数,则使用默认值 20
计算价格保护阈值(即比已识别的价格高出 20%)。
例如,如果识别的按需型实例价格为 0.4271
,并且您指定了 25
,则价格阈值将比 0.4271
高 25%。按如下方式计算:0.4271 * 1.25 =
0.533875
。计算出的价格是您愿意为按需型实例支付的最高价格,在本示例中,Amazon EC2 将排除任何价格高于 0.533875
的按需型实例类型。
竞价型实例价格保护
默认情况下,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
的竞价型实例类型。我们不建议使用该参数,因为竞价型实例类型的价格可能会波动,因此您的价格保护阈值也可能会波动。
指定价格保护阈值
使用 Amazon CLI 指定价格保护阈值
使用 Amazon CLI 创建 EC2 实例集或竞价型实例集时,请配置实例集,以便使用基于属性的实例类型选择,然后执行以下操作:
-
若要指定按需型实例价格保护阈值,请在 JSON 配置文件的
InstanceRequirements
结构中,为OnDemandMaxPricePercentageOverLowestPrice
输入以百分比表示的价格保护阈值。 -
要指定竞价型实例的价格保护阈值,请在 JSON 配置文件的
InstanceRequirements
结构中指定以下参数之一:-
对于
MaxSpotPriceAsPercentageOfOptimalOnDemandPrice
,输入以百分比表示的价格保护阈值。 -
对于
SpotMaxPricePercentageOverLowestPrice
,输入以百分比表示的价格保护阈值。
-
有关更多信息,请参阅通过基于属性的实例类型选择创建 EC2 机群或通过基于属性的实例类型选择创建竞价型实例集。
(仅适用于竞价型实例集)使用控制台指定价格保护阈值
在控制台中创建竞价型实例集时,请配置实例集,以便使用基于属性的实例类型选择,然后执行以下操作:
-
若要指定按需型实例价格保护阈值,请在其他实例属性下选择按需型价格保护,随后选择添加属性,然后输入以百分比表示的价格保护阈值。
-
若要指定竞价型实例价格保护阈值,请在其他实例属性下选择竞价型价格保护,随后选择添加属性,再选择作为价格依据的基值,然后输入以百分比表示的价格保护阈值。
注意
创建实例集时,如果将 TargetCapacityUnitType
设置为 vcpu
或 memory-mib
,则会基于每个 vCPU 或每个内存的价格,而不是每个实例的价格应用价格保护阈值。
性能保护
性能保护是一项功能,可确保您的 EC2 实例集或竞价型实例集使用的实例类型类似于或超过指定的性能基准。要使用性能保护,请指定一个实例系列作为基准参考。指定的实例系列的功能确立了可接受的最低性能水平。当 Amazon EC2 为您的实例集选择实例类型时,它会考虑您指定的属性和性能基准。低于性能基准的实例类型将被自动排除在选择范围之外,即使它们与您指定的其他属性相匹配。这可确保所有选定的实例类型都提供与指定实例系列建立的基准相似或更好的性能。Amazon EC2 使用此基准来指导实例类型选择,但并不能保证选定实例类型始终会超过每个应用程序的基准。
目前,此功能仅支持将 CPU 性能作为基准性能因素。指定的实例系列的 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
如果您通过指定支持的实例系列来启用性能保护,则返回的实例类型将排除上述不受支持的实例系列。
如果您将不支持的实例系列指定为基准性能值,则 API 会针对 GetInstanceTypesFromInstanceRequirements 返回空响应,对于 CreateFleet、RequestSpotFleet、ModifyFleet 和 ModifySpotFleetRequest 返回异常。
示例:设置 CPU 性能基准
在以下示例中,实例要求是使用具有与 c6i
实例系列一样性能的 CPU 核心的实例类型启动。这将筛选掉 CPU 处理器性能较低的实例类型,即使它们满足您指定的其他实例要求(例如 vCPU 数量)。例如,如果您指定的实例属性包括 4 个 vCPU 和 16 GB 内存,则具有这些属性但 CPU 性能低于 c6i
的实例类型将被排除在选择范围之外。
"BaselinePerformanceFactors": { "Cpu": { "References": [ { "InstanceFamily": "c6i" } ] }
注意事项
-
您可以在 EC2 实例集或竞价型实例集中指定实例类型或实例属性,但不能同时指定两者。
使用 CLI 时,启动模板覆盖将覆盖启动模板。例如,如果启动模板包含实例类型,而启动模板覆盖包含实例属性,则由实例属性标识的实例将覆盖启动模板中的实例类型。
-
使用 CLI 时,如果将实例属性指定为覆盖,也无法指定权重或优先级。
-
在一个请求配置中,最多可以指定四个
InstanceRequirements
结构。
通过基于属性的实例类型选择创建 EC2 机群
您可以通过 Amazon CLI 将 EC2 实例集配置为使用基于属性的实例类型选择。
若要通过基于属性的实例类型选择创建 EC2 实例集(Amazon CLI)
使用 create-fleet(Amazon CLI)命令创建 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": "" }, "Overrides": [{ "InstanceRequirements": { "VCpuCount": { "Min":
1
2
}, "MemoryMiB": { "Min":4
} } }] }], "TargetCapacitySpecification": { "TotalTargetCapacity":20
, "DefaultTargetCapacityType": "spot
" }, "Type": "instant
" }
基于属性的实例类型选择的属性在 InstanceRequirements
结构中指定。在此示例中,指定了两个属性:
-
VCpuCount
– 至少指定了 2 个 vCPU。由于未指定最大值,因此没有最大限制。 -
MemoryMiB
– 至少指定了 4 MiB 的内存。由于未指定最大值,因此没有最大限制。
将识别具有 2 个或更多 vCPU 和 4 MiB 或更大内存的任何实例类型。然而,当 EC2 实例集预置实例集时,价格保护和分配策略可能会排除某些实例类型。
有关您可以指定的所有可能属性的列表和描述,请参阅 Amazon EC2 API Reference(《Amazon EC2 API 参考》)中的 InstanceRequirements。
注意
当 InstanceRequirements
包含在机群配置中时,必须排除 InstanceType
和 WeightedCapacity
;它们无法与实例属性同时确定机群配置。
JSON 还包含以下实例集配置:
-
"AllocationStrategy": "
– 实例集中竞价型实例的分配策略。price-capacity-optimized
" -
"LaunchTemplateName": "
– 启动模板包含一些实例配置信息,但如果指定了任何实例类型,则这些配置信息将被my-launch-template
", "Version": "
"1
InstanceRequirements
中指定的属性覆盖。 -
"TotalTargetCapacity":
– 目标容量为 20 个竞价型实例。20
-
"DefaultTargetCapacityType": "
– 默认容量为竞价型实例。spot
" -
"Type": "
– 实例集的请求类型是instant
"instant
。
通过基于属性的实例类型选择创建竞价型实例集
您可以通过 Amazon EC2 控制台或 Amazon CLI 将机群配置为使用基于属性的实例类型选择。
使用控制台创建竞价型实例集
配置竞价型实例集以使用基于属性的实例类型选择(控制台)
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择 Spot Requests(竞价型请求),然后选择 Request Spot Instances(请求竞价型实例)。
-
按照步骤创建竞价型实例集。有关更多信息,请参阅 使用已定义的参数创建 Spot 队列请求(控制台)。
创建竞价型实例集时,按如下方式配置机群以使用基于属性的实例类型选择:
-
对于 Instance type requirements(实例类型要求),选择 Specify instance attributes that match your compute requirements(指定符合计算要求的实例属性)。
-
对于 vCPU,输入所需的最小和最大 vCPU 数。要指定没有限制,请选择 No minimum(没有最小值)和/或 No maximum(没有最大值)。
-
对于 Memory (GiB)(内存 (GiB)),输入所需的最小和最大内存量。要指定没有限制,请选择 No minimum(没有最小值)和/或 No maximum(没有最大值)。
-
(可选)对于 Additional instance attributes(其它实例属性),您可以选择指定一个或多个属性以更详细地表达计算要求。每个额外属性都会进一步增加对您的请求的限制。
-
(可选)展开 Preview matching instance types(预览匹配的实例类型),查看具有指定属性的实例类型。
-
使用 Amazon CLI 创建竞价型实例集
配置竞价型实例集以使用基于属性的实例类型选择(Amazon CLI)
使用 request-spot-fleet (Amazon CLI) 命令可创建竞价型实例集。请在 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
}, "MemoryMiB": { "Min":4
} } }] }] }
基于属性的实例类型选择的属性在 InstanceRequirements
结构中指定。在此示例中,指定了两个属性:
-
VCpuCount
– 至少指定了 2 个 vCPU。由于未指定最大值,因此没有最大限制。 -
MemoryMiB
– 至少指定了 4 MiB 的内存。由于未指定最大值,因此没有最大限制。
将识别具有 2 个或更多 vCPU 和 4 MiB 或更大内存的任何实例类型。然而,当竞价型实例集预置实例集时,价格保护和分配策略可能会排除某些实例类型。
有关您可以指定的所有可能属性的列表和描述,请参阅 Amazon EC2 API Reference(《Amazon EC2 API 参考》)中的 InstanceRequirements。
注意
当 InstanceRequirements
包含在机群配置中时,必须排除 InstanceType
和 WeightedCapacity
;它们无法与实例属性同时确定机群配置。
JSON 还包含以下实例集配置:
-
"AllocationStrategy": "
– 实例集中竞价型实例的分配策略。priceCapacityOptimized
" -
"LaunchTemplateName": "
– 启动模板包含一些实例配置信息,但如果指定了任何实例类型,则这些配置信息将被my-launch-template
", "Version": "
"1
InstanceRequirements
中指定的属性覆盖。 -
"TargetCapacity":
– 目标容量为 20 个竞价型实例。20
-
"Type": "
– 实例集的请求类型是request
"request
。
有效 EC2 实例集配置示例和无效 EC2 实例集配置示例
如果您使用 Amazon CLI 创建 EC2 机群,必须确保机群配置有效。以下示例展示了有效配置和无效配置。
如果配置包含以下项,则视为无效:
-
单个
Overrides
结构,但同时包含InstanceRequirements
和InstanceType
-
两个
Overrides
结构,其中一个包含InstanceRequirements
,而另一个包含InstanceType
-
两个
InstanceRequirements
结构,但在同一LaunchTemplateSpecification
中具有重叠的属性值
示例配置
有效配置:具有覆盖的单个启动模板
以下配置有效。包含一个启动模板和一个 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 的单个启动模板
以下配置有效。包含一个启动模板和一个 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" } } }
有效配置:两个启动模板,每个都具有覆盖
以下配置有效。包含两个启动模板,每个模板都有一个 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
,且属性值不重叠
以下配置有效。包含两个 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
以下配置无效。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
以下配置无效。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"
}
}
}
配置无效:属性值重叠
以下配置无效。两个 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"
}
}
}
有效竞价型实例集配置示例和无效竞价型实例集配置示例
如果您使用 Amazon CLI 创建竞价型实例集,必须确保机群配置有效。以下示例展示了有效配置和无效配置。
如果配置包含以下项,则视为无效:
-
单个
Overrides
结构,但同时包含InstanceRequirements
和InstanceType
-
两个
Overrides
结构,其中一个包含InstanceRequirements
,而另一个包含InstanceType
-
两个
InstanceRequirements
结构,但在同一LaunchTemplateSpecification
中具有重叠的属性值
示例配置
有效配置:具有覆盖的单个启动模板
以下配置有效。包含一个启动模板和一个 Overrides
结构(包含一个 InstanceRequirements
结构)。下面是示例配置的文本说明。
{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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 的单个启动模板
以下配置有效。包含一个启动模板和一个 Overrides
结构(包含两个 InstanceRequirements
结构)。InstanceRequirements
中指定的属性有效,因为值不重叠,第一个 InstanceRequirements
结构指定 VCpuCount
为 0-2 个 vCPU,而第二个 InstanceRequirements
结构指定 4-8 个 vCPU。
{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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" } }
有效配置:两个启动模板,每个都具有覆盖
以下配置有效。包含两个启动模板,每个模板都有一个 Overrides
结构(包含一个 InstanceRequirements
结构)。此配置适用于在同一机群中支持 arm
和 x86
架构。
{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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
,且属性值不重叠
以下配置有效。包含两个 LaunchTemplateSpecification
结构,每个结构都有一个启动模板和一个 Overrides
结构(包含一个 InstanceRequirements
结构)。InstanceRequirements
中指定的属性有效,因为值不重叠,第一个 InstanceRequirements
结构指定 VCpuCount
为 0-2 个 vCPU,而第二个 InstanceRequirements
结构指定 4-8 个 vCPU。
{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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
以下配置无效。Overrides
结构同时包含 InstanceRequirements
和 InstanceType
。对于 Overrides
,可以指定 InstanceRequirements
或 InstanceType
,但不能同时指定两者。
{
"SpotFleetRequestConfig": {
"AllocationStrategy": "priceCapacityOptimized",
"ExcessCapacityTerminationPolicy": "default",
"IamFleetRole": "arn:aws:iam::000000000000: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
以下配置无效。Overrides
结构同时包含 InstanceRequirements
和 InstanceType
。您可以指定 InstanceRequirements
或 InstanceType
,但不能同时指定两者,即使采用不同的 Overrides
结构也是如此。
{
"SpotFleetRequestConfig": {
"AllocationStrategy": "priceCapacityOptimized",
"ExcessCapacityTerminationPolicy": "default",
"IamFleetRole": "arn:aws:iam::000000000000: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"
}
}
配置无效:属性值重叠
以下配置无效。两个 InstanceRequirements
结构,每个结构都包含 "VCpuCount":
{"Min": 0, "Max": 2}
。这些属性的值重叠,这将导致容量池重复。
{
"SpotFleetRequestConfig": {
"AllocationStrategy": "priceCapacityOptimized",
"ExcessCapacityTerminationPolicy": "default",
"IamFleetRole": "arn:aws:iam::000000000000: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"
}
}
预览具有指定属性的实例类型
您可以使用 get-instance-types-from-instance-requirements Amazon CLI 命令预览与您指定的属性匹配的实例类型。这对于在不启动任何实例的情况下确定要在请求配置中指定的属性尤其有用。请注意,该命令不考虑可用容量。
通过使用 Amazon CLI 指定属性来预览实例类型列表
-
(可选)要生成所有可以指定的可能属性,请使用 get-instance-types-from-instance-requirements 命令和
--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": "" }
-
使用上一步的输出创建 JSON 配置文件,然后按如下方式进行配置:
注意
您必须提供
ArchitectureTypes
、VirtualizationTypes
、VCpuCount
和MemoryMiB
的值。您可以省略其它属性;如果省略,则使用默认值。有关每个属性及其默认值的描述,请参阅 get-instance-types-from-instance-requirements。
-
对于
ArchitectureTypes
,请指定一个或多个处理器架构类型。 -
对于
VirtualizationTypes
,请指定一个或多个虚拟化类型。 -
对于
VCpuCount
,请指定最小和最大 vCPU 数量。要指定没有最低限制,对于Min
,请指定0
。要指定没有最大限制,请省略Max
参数。 -
对于
MemoryMiB
,请指定最小和最大内存量(以 MiB 为单位)。要指定没有最低限制,对于Min
,请指定0
。要指定没有最大限制,请省略Max
参数。 -
您可以选择指定一个或多个其他属性来进一步限制返回的实例类型列表。
-
-
要预览具有您在 JSON 文件中所指定属性的实例类型,请使用 get-instance-types-from-instance-requirements 命令,然后使用
--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 || ...
-
在确定满足您的需求的实例类型后,请记下您使用的实例属性,以便在配置机群请求时可以使用。