我发现在某些地区(例如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支持发布一个问题,并在此处报告任何调查结果。