问题 亚马逊中支持VPC的可用区域


我发现在某些地区(例如us-east-1),只有一些可用区可用于创建子网(因此也就是VPC实例)。在我的例子中,区域是us-east-1c,-1d和-1e,但这些区域因帐户而异。

我正在构建一个生成子网和VPC实例的脚本,因此以编程方式找出哪些区域具有VPC能力是很有用的,特别是因为我知道为什么区域集不能改变(或者至少增长)随着时间的推移。

这篇文章提出的问题基本相同,但是接受的答案实际上并没有提供我和提问者正在寻找的信息(除非ec2-describe-availability-zones有一些我不知道的VPC特定参数): 亚马逊VPC可用性

我找到了一个可能的解决方法,即尝试创建一个带有垃圾vpc-id和可用区的子网(ec2-create-subnet -c garbage -i 10.0.0.0/24 -z garbage)。此调用的错误消息包括能够托管子网的AZ列表,我可以解析该输出以查找我正在查找的信息。但是,这感觉就像一个黑客,我不喜欢依赖于错误行为和错误消息的具体格式,如果我不必这样做。有没有更好的办法?

更新:根据评论添加更多细节......

我打电话给 ec2-describe-availability-zones 总是返回五个值:us-east-1a到us-east-1e,但我们只能在1c,1d和1e中创建VPC子网。我们在除1b之外的所有区域都运行实例,其中我甚至无法启动常规实例(它似乎逐渐被淘汰)。此帐户自VPC功能发布之前就已存在,因此我认为它有点像“遗留”帐户。这可能与我允许创建子网和VPC实例之间的差异以及ec2-describe-availability-zones返回时的差异有关。我将向AWS支持发布一个问题,并在此处报告任何调查结果。


6026
2018-03-30 13:20


起源

@downvoter我可以问为什么downvote?我很好奇为什么这是一个糟糕的问题,并乐意接受任何建设性的反馈来改进它。 - atkretsch
你误解了你在我们东方1发现的东西。并不是那些是具有vpc功能的唯一可用区域 - 这些是可用区域的标签,期间。如果您的帐户有一个名为“us-east-1c”的可用区,那么您可以将该AZ用于VPC。如果没有,你就不能。链接问题中的OP不知道并非所有地区都向每个帐户公开3个AZ,或者它们并非总是“a”,“b”和“c”。 DescribeAvailabilityZones可以满足您的需求。 - Michael - sqlbot
@ Michael-sqlbot:谢谢你的见解,但是 ec2-describe-availability-zones 返回1a到1e,即使只有1c-1e是VPC能力的(并且注意,即使1b看起来完全没用)。因此,对于此帐户,似乎所有可用区域(句点)的集合!=启用VPC的可用区域集合。有关详细信息,请参阅我的编辑。 - atkretsch
有趣。而且很奇怪。我会看看我是否有任何可以复制此行为的地方。 - Michael - sqlbot


答案:


经过AWS支持后,我的情况似乎是亚马逊决定不隐藏现有可用区的结果,即使他们被逐步淘汰新实例,因为他们认为这会让人感到困惑。隐藏可能仍有运行实例的AZ。他们建议在我的情况下确定支持VPC的AZ是硬编码还是反复试验 - 令人失望,但可以理解。

因此,我做出故意错误请求并解析错误(见下文)的解决方案似乎是少数邪恶中的较小者。

> ec2-create-subnet -c garbage -i 10.0.0.0/24 -z garbage
Client.InvalidParameterValue: Value (garbage) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-1c, us-east-1d, us-east-1e.

更新:经过对AWS支持的更多跟进后,我能够确认这确实与我的帐户预约VPC有关,并且能够通过API区分“受限制”和支持VPC的AZ他们的路线图。


9
2018-04-02 12:52





我不确定你的意思是创建一个假子网来查看你可以使用的可用区域。 VPC中的每个子网都位于特定的可用区域中。根据文件:

问:子网是否可以跨越可用区?

不可以。子网必须位于单个可用区内。

它在他们的常见问题解答中: http://aws.amazon.com/vpc/faqs/

因此,基本上在创建子网时,您可以确定它应该位于哪个可用区域。


1
2018-03-30 17:47



谢谢Rico。我知道每个子网都在可用区中 - 我想要的是在通过API以编程方式创建子网时可供选择的可用区域列表(我知道在通过AWS控制台GUI创建时会显示选项)。根据Michael-sqlbot上面的评论,听起来我的帐户有非启用VPC的AZ可能是一个不寻常的案例。我将向AWS支持部门询问更多信息。 - atkretsch
哦,并进一步澄清 - 当您使用无效的AZ名称调用ec2-create-subnet时返回的错误消息包含有效的AZ名称列表。因此,我现在的解决方法是调用ec2-create-subnet,故意故障并解析该错误消息以获取正确的列表。 - atkretsch