我应该如何配置 AWS Auto-Scaling 组 mixed_instances_policy 以仅允许 spot_instances 与多个 EC2 instance_types?
How should I configure an AWS Auto-Scalling Group mixed_instances_policy to only allow for spot_instances with multiple EC2 instance_types?
我有一个 AWS Auto-Scalling 组,它根据特定 SQS 队列中的消息量生成(或关闭)一台 EC2 机器。这按预期工作,但有时我会收到以下错误:
Launching a new EC2 instance. Status Reason: Could not launch Spot
Instances. InsufficientInstanceCapacity - There is no Spot capacity
available that matches your request. Launching EC2 instance failed.
我认识的一个 DevOps 人员告诉我“将 spot_instance_pools 的数量增加到 20,然后再添加一些 instance_types”。
我做了一些研究,发现 the default number of spot_instance_pools is 2。相同的数字显示在 AWS 控制台上。每当我遇到这个问题时,我都会部署一个更改 EC 实例类型的新脚本并且它有效,所以这两个建议对我来说似乎都是有效的。
问题是我当前的 Terraform 脚本没有封闭的 mixed_instances_policy
,我不确定如何配置它以仅保留 on_spot
个实例(因为它们更便宜)并且没有 on_demand
实例。到目前为止我想出了:
mixed_instances_policy = {
on_demand_percentage_above_base_capacity = 0
spot_instance_pools = 20
}
将其他值保留在 mixed_instances_policy
中的默认值对我来说应该足够了。
可是我没看懂mixed_instances_policy launch_template. Is it nested within mixed_instances_policy
? Should I add a mixed_instances_policy launch_template override怎么配置呢?或者也许 launch_template_specification
TL;DR;
如何配置 AWS 自动缩放组 mixed_instances_policy 以仅允许 spot_instances 与多个 EC2 instance_types?
on_demand_percentage_above_base_capacity = 0
行就是你想要的那一行。根据您共享的文档和 structure in the AWS doc,我想说它可能在 instances_distribution
里面,它告诉 ASG 按需启动 0%(又名 100% 现货)。在 mixed_instances_policy
中,您需要为要添加的实例类型添加 overrides
(权重是可选的。权重是实例类型计为的所需容量单位的数量)。
此外,现货池的数量对于您的用例来说并不重要。这就是说/如果一切可用/每个 AZ 最多启动那么多不同的点类型。不过,拥有更多池确实对可用性有所帮助,因为如果一个池变得供应受限,那么您不会立即终止所有实例,但这根本不会影响启动。
实际上,如果你想要更便宜的成本,你希望数量更少。因为如果你的分配策略是 'cheapest first' 那么你希望每个 AZ 有几个池(因为它只有最便宜的几个池)。如果 AZ 中只有 1 种实例类型可用,则无论如何都会启动该实例类型。因此,覆盖次数 select 是启动时保持可用性的重要部分。
我有一个 AWS Auto-Scalling 组,它根据特定 SQS 队列中的消息量生成(或关闭)一台 EC2 机器。这按预期工作,但有时我会收到以下错误:
Launching a new EC2 instance. Status Reason: Could not launch Spot Instances. InsufficientInstanceCapacity - There is no Spot capacity available that matches your request. Launching EC2 instance failed.
我认识的一个 DevOps 人员告诉我“将 spot_instance_pools 的数量增加到 20,然后再添加一些 instance_types”。
我做了一些研究,发现 the default number of spot_instance_pools is 2。相同的数字显示在 AWS 控制台上。每当我遇到这个问题时,我都会部署一个更改 EC 实例类型的新脚本并且它有效,所以这两个建议对我来说似乎都是有效的。
问题是我当前的 Terraform 脚本没有封闭的 mixed_instances_policy
,我不确定如何配置它以仅保留 on_spot
个实例(因为它们更便宜)并且没有 on_demand
实例。到目前为止我想出了:
mixed_instances_policy = {
on_demand_percentage_above_base_capacity = 0
spot_instance_pools = 20
}
将其他值保留在 mixed_instances_policy
中的默认值对我来说应该足够了。
可是我没看懂mixed_instances_policy launch_template. Is it nested within mixed_instances_policy
? Should I add a mixed_instances_policy launch_template override怎么配置呢?或者也许 launch_template_specification
TL;DR;
如何配置 AWS 自动缩放组 mixed_instances_policy 以仅允许 spot_instances 与多个 EC2 instance_types?
on_demand_percentage_above_base_capacity = 0
行就是你想要的那一行。根据您共享的文档和 structure in the AWS doc,我想说它可能在 instances_distribution
里面,它告诉 ASG 按需启动 0%(又名 100% 现货)。在 mixed_instances_policy
中,您需要为要添加的实例类型添加 overrides
(权重是可选的。权重是实例类型计为的所需容量单位的数量)。
此外,现货池的数量对于您的用例来说并不重要。这就是说/如果一切可用/每个 AZ 最多启动那么多不同的点类型。不过,拥有更多池确实对可用性有所帮助,因为如果一个池变得供应受限,那么您不会立即终止所有实例,但这根本不会影响启动。
实际上,如果你想要更便宜的成本,你希望数量更少。因为如果你的分配策略是 'cheapest first' 那么你希望每个 AZ 有几个池(因为它只有最便宜的几个池)。如果 AZ 中只有 1 种实例类型可用,则无论如何都会启动该实例类型。因此,覆盖次数 select 是启动时保持可用性的重要部分。