我正在构建一个生成子网和VPC实例的脚本,所以有必要在程序上找出哪些区域是具有VPC功能的,特别是因为我知道为什么这些区域不能改变(或至少增长)随着时间的推移.
这篇文章基本上提出了同样的问题,但是接受的答案实际上并不提供我和asker正在寻找的信息(除非ec2-describe-availability-zones有一些VPC特定的参数,我不知道) Amazon VPC Availability
我已经找出了一个可能的解决方法,即尝试创建一个具有垃圾vpc-id和可用性区域(ec2-create-subnet -c garbage -i 10.0.0.0/24-z垃圾)的子网.此呼叫的错误消息包括可以托管子网的AZ列表,我可以解析该信息的输出.然而,这感觉就像一个黑客,我不喜欢依靠错误行为和这种事情的错误消息的具体格式,如果我不必.有没有更好的办法?
更新:根据注释添加一些更多的细节…
对ec2描述可用性区域的呼叫始终返回五个值:us-east-1a到us-east-1e,但是我们只能在1c,1d和1e中创建VPC子网.我们有除1b之外的所有区域运行的实例,我甚至无法启动一个常规实例(似乎正在逐步淘汰).这个帐户自VPC功能发布之前就已经存在了,所以这个帐号有点像我想象的“遗留”帐户.这可能与我被允许创建子网和VPC实例之间的差异以及ec2-describe-availability-zones返回时有什么关系.我将向AWS支持发布一个问题,并在此报告任何调查结果.
所以,我的解决方案是故意的错误请求和解析错误(见下文)似乎是少数几个罪恶中的一小部分.
> 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的AZs的能力是在他们的路线图.