为什么AWS EC2 spot请求总是在同一个区域启动实例?

我在几个不同的AWS区域创build了现场请求。 在大多数地区,有一个区域总是低于其他区域,所以如果我在该区域创build低点现货请求,那么创build的所有实例都会在低价区域中出现。 那里不奇怪。

但是,今天我在一个新的地区创build了现场请求。 我创build了20个请求,都以相同的价格。 当时,该地区两地的现货价格大致相同,我的出价高于此价格。 我的一些要求得到满足,他们都在一个区域有实例。 那个区域的价格当然上涨了,它和我的出价相匹配。 由于我的出价是现在的价格,我的一些要求未能实现。 即使其他区域的价格保持在同一水平,并且低于我的出价,也是如此。

为什么我的所有请求都被填入一个区域,即使其他区域有容量可用(价格较低)? 在提出请求时,我没有指定一个区域(也不是一个组)。

编辑:FWIW,我没有使用testing点请求界面。 本月早些时候我尝试了几次,而且对我来说似乎有点错误,所以我仍然使用原始的界面。

在创buildAWS账户时,Amazon会自动在跨区域的每个区域中创build默认的VPC。 它也为您在每个地区创build默认子网; 每个子网跨越一个区域。 (注意复数个“子网”。)子网跨越多个区域是没有办法的。

创build专题请求时,您可以select指定VPC和子网。 如果您希望您的现场请求仅适用于特定区域,请select该区域的默认生成子网。 (这解决了上面的Michael的评论。)这很好,这就是我期望的事情。

但是,您也可以在子网(和隐含区域)上select“不偏好”。 我把“不偏好”理解为“任何子网”。 看起来情况并非如此(但我希望在这里更正),而“无偏好”意味着亚马逊会从默认子网中为您挑选一个子网。 也就是说,他们为你select一个区域(因为区域隐含在他们select的子网中)。 似乎他们select当时的低价区,但当然这并不总是低价区。 一旦这个区域被选中,这个请求的生命周期就会被固定。 (对于一个持久的请求,这是永远的。)

FWIW,另一种可能性是创build一个自动缩放组,并使用现场实例而不是按需组合。 使用自动缩放组,可以让组跨越多个区域。 然而,似乎这个小组总是试图平均地在所有的区域传播请求,不pipe价格如何。 看来,这个组织没有select将请求放在最低价格区域。 但我认为这是另一个问题的话题…

更新 :起初我没有使用自动缩放组,因为它比创build一堆点要求更复杂。 但是,当然,这也是行不通的。 原来的答案是:获得最低价格区域的唯一方法是使用现货车队要求。

我之所以没有这么做,是因为创build起来比较复杂,它要求IAM用户创build的队伍比ec2:* actions有更多的权限,而且界面还是有点不可思议。 请参阅https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html开始。 但是,请注意,这仍然是testing版,文档不是最新的。 权限还需要“iam:GetRole”,“iam:CreateRole”,“iam:AttachRolePolicy”。 (当你尝试创build你的第一个现货队伍时,控制台会提醒你,显然你仍然需要这些权限,即使已经存在正确的angular色了。

回到我原来的问题:创build现货队伍时,select“最低价格”策略(这不是默认的文档说,但它是可用的)。 然后 – 与自动缩放组或点要求一样,您必须“select”区域并将其全部勾选(否则只是再次使用默认区域)。

希望有人认为这有用。