2014-03-30 46 views
11

我发现在某些区域(如us-east-1)中,只有一些可用区域可用于创建子网(并因此可用于VPC实例)。在我的情况下,这些区域是us-east-1c,-1d和-1e,但这些区域因账户而异。Amazon中支持VPC的可用区域

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

这篇文章基本上提出了同样的问题,但接受的答案实际上并没有提供我和那个提问者正在寻找的信息(除非ec2-describe-availability-zones具有一些VPC特定的参数,我不是知道):Amazon VPC Availability

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

UPDATE:通过美国东部-1E美东-1A,但我们只能创建VPC子网:添加基于注释更详细一点...

呼叫我做出ec2-describe-availability-zones总是返回五个值在1c,1d和1e。我们有除1b之外的所有区域运行的实例,其中我甚至无法启动一个常规实例(它似乎正逐渐被淘汰)。自从VPC功能发布之前,此帐户已存在,因此我认为它有点“遗留”帐户。这可能与我允许创建子网和VPC实例的位置之间的差异以及ec2-describe-availability-zones返回时的差异有关。我将向AWS支持发布问题,并将在此处报告任何发现。

+0

@downvoter我可以问为什么downvote?我很好奇为什么这是一个糟糕的问题,并且很乐意接受任何有建设性的反馈来改进它。 – atkretsch

+0

你错误地解释了你在我们东方1发现的东西。这并不是说这些是唯一具有vpc功能的可用区域,而是那些可用区域的标签,可供您使用。如果您的帐户有一个名为“us-east-1c”的可用性区域,则可以将该AZ用于VPC。如果没有,你不能。链接问题中的OP没有意识到并非所有区域都向每个帐户显示3个AZ,或者它们并不总是“a”,“b”和“c”。 DescribeAvailabilityZones做你想做的事。 –

+1

@ Michael-sqlbot:感谢您的洞察力,但ec2-describe-availability-zones返回1a到1e,尽管只有1c-1e是VPC功能的(并且注意,即使1b看起来完全没用)。所以对于这个帐户,似乎所有可用区域(周期)的集合!=启用VPC的可用区域的集合。请参阅我的编辑更多细节。 – atkretsch

回答

9

有点来回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,并有能力“限制”之间的区别VPC-和通过API提供能力强大的AZ是他们的路线图。

1

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

Q.子网可以跨度可用区吗?

否。子网必须位于单个可用区域内。

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

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

+0

谢谢里科。我知道每个子网都位于可用区域 - 我想要的是通过API以编程方式创建子网时可供选择的可用区域列表(我知道通过AWS控制台GUI创建时显示的选项)。根据上面的Michael-sqlbot的评论,这听起来像我的帐户拥有非VPC启用的AZ可能是一种不寻常的情况。我会询问AWS支持以获取更多信息。 – atkretsch

+0

噢,并进一步澄清 - 当您使用无效的AZ名称调用ec2-create-subnet时返回的错误消息包含有效的AZ名称列表。因此,我现在的解决方法是调用ec2-create-subnet,它将故意失败并解析错误消息以获取正确的列表。 – atkretsch