【问题标题】:VPC-capable availability zones in AmazonAmazon 中支持 VPC 的可用区
【发布时间】: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 添加更多细节...

我对@9​​87654323@ 的调用总是返回五个值: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


【解决方案1】:

在与 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 之前的日期有关,并且能够通过API 在他们的路线图上。

【讨论】:

    【解决方案2】:

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

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

    没有。子网必须位于单个可用区内。

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

    因此,基本上,当您创建子网时,您可以知道它应该位于哪个可用区。

    【讨论】:

    • 谢谢里科。我知道每个子网都在一个可用区中 - 我想要的是通过 API 以编程方式创建子网时可供选择的可用可用区列表(我知道通过 AWS 控制台 GUI 创建时会显示这些选项)。根据上面 Michael-sqlbot 的评论,听起来我的帐户具有未启用 VPC 的 AZ 可能是一个不寻常的情况。我会向 AWS 支持寻求更多信息。
    • 哦,进一步澄清 - 当您使用无效 AZ 名称调用 ec2-create-subnet 时返回的错误消息包含有效的 AZ 名称列表。所以我现在的解决方法是调用 ec2-create-subnet 故意失败并解析错误消息以获得正确的列表。
    猜你喜欢
    • 2021-08-12
    • 2020-10-11
    • 1970-01-01
    • 2023-04-10
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多