【问题标题】:How can we get a VPC's default route table ID using Get::Attr in AWS CloudFormation?我们如何在 AWS CloudFormation 中使用 Get::Attr 获取 VPC 的默认路由表 ID?
【发布时间】:2019-07-28 04:49:54
【问题描述】:

我已经使用 CloudFormation 模板创建了一个 VPC,与 VPC 一起自动创建了一个默认路由表和 NACL。

现在我想将一些路由添加到使用 VPC 在同一个 CloudFormation 模板中创建的默认路由表中。有什么方法可以在同一个 CloudFormation 模板中获取 VPC 的默认路由表 ID?

一种可能的方法是使用 Get::Attr,但我找不到任何属性,如使用 Get::Attr 的 defaultroutetable。

【问题讨论】:

  • 我猜唯一的方法是创建自己的路由表,修改它并附加到 VPC 中的 (a) 子网。
  • 感谢您的回复,是的,这肯定是一种方式。但是默认情况下,所有子网都附加了默认路由表,如果我们可以修改默认路由表,它将避免我们将每个新子网附加到自定义路由表。
  • 如果您不想这样做,您可以编写Lambda函数来搜索您的VPC的默认路由表并返回它。查看docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…,了解如何使用云形成进行 lambda。

标签: amazon-web-services amazon-cloudformation amazon-vpc vpc


【解决方案1】:

VPC 的默认路由表与 VPC 一起创建。如果您使用 cloud-formation 创建 VPC,那么它会自动创建一个路由表并将其附加到同一个 VPC。 Get::Attr 函数用于获取特定 AWS 资源的属性,但它取决于该 AWS 资源,如果它返回您正在寻找的属性。在这种情况下,您可能正在寻找默认路由表 ID,但 Get::Attr 函数不返回 RouteTableID。 (它可能在未来可用,但目前还没有。)

我建议为每个子网创建路由表,以防路由不同。如果你想使用脚本来做,那么你应该通过使用 AWS CLI 命令创建一个 shell 脚本并找到 VPC 的默认路由表的 ID,然后向它添加路由。

查找路由表ID: aws ec2 describe-route-tables --filters "Name=vpc-id,Values=$vpcs" --query "RouteTables[].RouteTableId[]"

为此路由表创建路由:(示例) aws ec2 create-route --route-table-id --destination-cidr-block 0.0.0.0/0 --gateway-id igw-c0a643a9

【讨论】:

  • 谢谢 datrey.. 这对我有用。我在我的基础设施 shell 脚本中添加了 cli 命令。
【解决方案2】:

嗯,简短的回答是您不能仅通过 AWS CloudFormation 直接从 VPC 获取主路由表 ID,因为 CloudFormation 不提供它们之间的引用。

但是,如果您真的想使用 CloudFormation 执行此操作,您仍然可以通过调用 CloudFormation 模板中的 AWS Lambda 函数来执行此操作。 Lambda 函数可以运行命令以将路由规则附加到主路由表。这是 AWS 在 2019 年的回答,https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-route-table-vpc/

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2014-04-09
    • 2019-07-21
    • 2019-01-21
    • 2020-08-31
    • 2020-06-22
    • 2018-04-18
    • 2020-03-27
    • 2021-06-28
    相关资源
    最近更新 更多