Amazon web services 我应该如何配置AWS自动缩放组混合_实例_策略,以仅允许具有多个EC2实例_类型的spot_实例?

Amazon web services 我应该如何配置AWS自动缩放组混合_实例_策略,以仅允许具有多个EC2实例_类型的spot_实例?,amazon-web-services,amazon-ec2,terraform,autoscaling,Amazon Web Services,Amazon Ec2,Terraform,Autoscaling,我有一个AWS自动缩放组,它根据特定SQS队列中的消息量生成(或关闭)一台EC2机器。这与预期的一样,但有时会出现以下错误: 启动一个新的EC2实例。状态原因:无法启动Spot 实例。安装容量不足-没有现场容量 与您的请求相匹配的可用。启动EC2实例失败 我认识的一个DevOps家伙告诉我“将spot_实例_池的数量增加到20个,并添加更多的实例_类型” 我做了一些研究,发现了这一点。AWS控制台上显示了相同的编号。每当我遇到这个问题时,我都会部署一个新的脚本来更改EC实例类型,并且可以正常工作

我有一个AWS自动缩放组,它根据特定SQS队列中的消息量生成(或关闭)一台EC2机器。这与预期的一样,但有时会出现以下错误:

启动一个新的EC2实例。状态原因:无法启动Spot 实例。安装容量不足-没有现场容量 与您的请求相匹配的可用。启动EC2实例失败

我认识的一个DevOps家伙告诉我“将spot_实例_池的数量增加到20个,并添加更多的实例_类型”

我做了一些研究,发现了这一点。AWS控制台上显示了相同的编号。每当我遇到这个问题时,我都会部署一个新的脚本来更改EC实例类型,并且可以正常工作,所以这两个建议对我来说都是有效的

问题是,我当前的Terraform脚本没有封闭的
混合实例策略
,我不确定如何将其配置为只保留
现场
实例(因为它们更便宜),而不保留
按需
实例。到目前为止,我提出了:

  mixed_instances_policy = {
    on_demand_percentage_above_base_capacity = 0
    spot_instance_pools                      = 20   
  }
将其他值保留在带有默认值的
mixed_instances_policy
中就足够了

但我不明白如何配置。它是否嵌套在混合实例策略中?我也应该加一个吗?或者可能是启动模板规范

TL;博士


如何将AWS自动缩放组混合实例策略配置为仅允许具有多个EC2实例类型的spot实例?

您需要的是
随需应变\u百分比\u高于\u基本容量=0
行。根据您共享的文档和,我想说它可能在
instances\u发行版中,告诉ASG按需启动0%(也称为100%现货)。在
mixed_instances_policy
中,您需要为正在添加的实例类型添加
覆盖
(权重是可选的。权重是实例类型计数为的所需容量单位数)

此外,spot池的数量对您的用例也没有多大影响。也就是说/如果一切都可用/每个AZ最多推出这么多不同的现货类型。不过,拥有更多的池确实有助于提高可用性,因为如果一个池受到供应限制,那么您就不会同时终止所有实例,但这根本不会影响启动

事实上,如果你想要更便宜的成本,你需要更低的数字。因为如果您的分配策略是“最便宜的优先”,那么您希望每个AZ拥有几个池(因为它是当时唯一最便宜的几个池)。如果AZ中只有一个实例类型可用,它将无论如何启动该实例类型。因此,您选择的覆盖数量是在启动时保持可用性的重要部分