【问题标题】:Filter to find the non-main route table in AWS VPC with Terraform使用 Terraform 过滤以查找 AWS VPC 中的非主路由表
【发布时间】:2021-03-20 07:57:09
【问题描述】:

必须使用什么特定语法才能使下面的 Terraform aws_route_table 数据源成功返回未指定为 VPC 中主路由表的路由表?

data "aws_route_table" "rt" {
  vpc_id = var.vpcId

  filter {
    name   = "association.main"
    values = [false]
  }

}

VPC 中只有一个非主路由表。因此,如果过滤器语法正确,则过滤main=false 应该识别它。

以上代码当前产生的错误是:

错误:您的查询未返回任何结果。请更改您的搜索条件,然后重试

【问题讨论】:

  • 你的命令是正确的。请仔细检查 VPC 是否确实具有非默认 RT。也许您提供了错误的 VPC id?
  • @Marcin VPC id 正确。此外,我们还可以按标签过滤以获得相同的路由表。因此,除了 VPC ID 正确之外,还可以发现路由表。但我们需要能够过滤非主要内容。
  • RT 是否与任何子网关联? Docs 写:“没有关联 ID 的路由表不会在响应中返回。”并尝试使用aws_route_tables,而不是aws_route_table

标签: amazon-web-services terraform amazon-vpc terraform-provider-aws routetable


【解决方案1】:

我自己做了一些测试,以下是我的一些发现。 aws_route_tables 而不是 aws_route_table 应该用于返回多个 RT:

data "aws_route_tables" "rt" {
  vpc_id = var.vpcId

  filter {
    name   = "association.main"
    values = [false]
  }
}

但是,需要了解的事情很少

  1. 未与任何子网关联的 RT 将不会返回
  2. 如果主路由表与子网相关联,它仍然会被返回。基本上,如果主路由表与子网相关联,它将同时被视为主路由表和非主路由表。

所以基本上,上述过滤器的有用性很大程度上取决于您的 VPC 和 RT 的组织方式。

下面是 AWS CLI,我也用它来仔细检查其中一些发现:

aws ec2 describe-route-tables --filters Name=vpc-id,Values=vpc-0a347b77b8c0109b6 Name=association.main,Values=false 

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2022-07-21
    • 2019-01-21
    • 1970-01-01
    • 2016-03-09
    • 2019-07-21
    • 2021-03-01
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多