12

我发现在某些区域(例如 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-zonesALWAYS 的调用返回五个值:us-east-1a 到 us-east-1e,但我们只能在 1c、1d 和 1e 中创建 VPC 子网。我们在除 1b 之外的所有区域中都运行了实例,在这些区域中,我什至无法启动常规实例(它似乎正在逐步淘汰)。这个帐户在 VPC 功能发布之前就已经存在,所以我想它有点像“遗留”帐户。这可能与允许我创建子网和 VPC 实例的位置与 ec2-describe-availability-zones 返回的时间之间的差异有关。我将向 AWS 支持发布一个问题,并将在此处报告任何发现。

4

2 回答 2

9

在与 AWS 支持来回折腾之后,我的情况似乎是亚马逊决定不“隐藏”现有可用区的结果,即使在它们被新实例淘汰后也是如此,因为他们认为这会混淆隐藏可能仍在运行的实例的可用区。他们对在我的情况下确定支持 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 的能力已启用他们的路线图。

于 2014-04-02T12:52:45.483 回答
1

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

问:子网可以跨可用区吗?

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

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

所以基本上当你创建一个子网时,你可以知道它应该在哪个可用区。

于 2014-03-30T17:47:20.013 回答