我发现在某些区域(例如 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 列表,我可以解析该输出以获取我正在寻找的信息。但是,这感觉像是一种 hack,如果我不需要的话,我不喜欢依赖错误行为和错误消息的特定格式来处理这类事情。有没有更好的办法?
更新:根据评论添加更多细节......
我对ec2-describe-availability-zones
ALWAYS 的调用返回五个值:us-east-1a 到 us-east-1e,但我们只能在 1c、1d 和 1e 中创建 VPC 子网。我们在除 1b 之外的所有区域中都运行了实例,在这些区域中,我什至无法启动常规实例(它似乎正在逐步淘汰)。这个帐户在 VPC 功能发布之前就已经存在,所以我想它有点像“遗留”帐户。这可能与允许我创建子网和 VPC 实例的位置与 ec2-describe-availability-zones 返回的时间之间的差异有关。我将向 AWS 支持发布一个问题,并将在此处报告任何发现。