【发布时间】:2014-05-09 18:46:30
【问题描述】:
我发现在某些区域(例如 us-east-1),只有一些可用区可用于创建子网(因此也就是 VPC 实例)。在我的例子中,区域是 us-east-1c、-1d 和 -1e,但这些区域因帐户而异。
我正在构建一个生成子网和 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 列表,我可以解析该输出以获取我正在寻找的信息。但是,这感觉像是一种 hack,如果我不需要的话,我不喜欢依赖错误行为和错误消息的特定格式来处理这类事情。有没有更好的办法?
更新:基于 cmets 添加更多细节...
我对@987654323@ 的调用总是返回五个值:us-east-1a 到 us-east-1e,但我们只能在 1c、1d 和 1e 中创建 VPC 子网。我们在除 1b 之外的所有区域中运行实例,在其中我什至无法启动常规实例(它似乎正在逐步淘汰)。这个账户在 VPC 功能发布之前就已经存在,所以我想它在某种程度上是一个“遗留”账户。这可能与我被允许创建子网和 VPC 实例的位置与 ec2-describe-availability-zones 返回的时间之间的差异有关。我将向 AWS 支持发布一个问题,并将在此处报告任何发现。
【问题讨论】:
-
@downvoter 我能问一下为什么投反对票吗?我很好奇为什么这是一个糟糕的问题,并且很乐意接受任何建设性的反馈来改进它。
-
您误解了您在 us-east-1 中找到的内容。并不是说这些是唯一具有 vpc 功能的可用区——而是这些是您可用的可用区的标签,期间。如果您的账户有一个名为“us-east-1c”的可用区,那么您可以将该可用区用于 VPC。如果没有,你不能。链接问题中的 OP 不知道并非所有区域都向每个帐户公开 3 个可用区,或者它们并不总是“a”、“b”和“c”。 DescribeAvailabilityZones 可以满足您的需求。
-
@Michael-sqlbot:感谢您的洞察力,但
ec2-describe-availability-zones返回 1a 到 1e,即使只有 1c-1e 支持 VPC(并且,附注,即使 1b 似乎完全无用)。因此,对于此帐户,似乎所有可用区(句点)的集合!= 启用 VPC 的可用区的集合。有关更多详细信息,请参阅我的编辑。 -
有趣。而且很奇怪。我会看看我是否有可以复制这种行为的地方。
-
我可以通过在右上角手动切换区域使其在 AWS 在线控制台中运行。
标签: bash amazon-web-services amazon-ec2 amazon-vpc