You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform中如何从aws_vpn_connection获取local_ipv4_network_cidr?

问题

我已在Terraform中创建了站点到站点VPN,配置代码如下:

resource "aws_vpn_connection" "example" {
  customer_gateway_id = # <cgw id>
  transit_gateway_id  = # <tgw id>

  outside_ip_address_type = "PublicIpv4"
  type                    = "ipsec.1"

  local_ipv4_network_cidr  = "192.168.0.0/18"
  remote_ipv4_network_cidr = "10.0.1.0/24"

  static_routes_only = false
}

现在我想在中转网关(TGW)路由表中添加静态路由,配置代码如下:

resource "aws_ec2_transit_gateway_route" "example_route" {
  transit_gateway_route_table_id = # <route table ID>

  destination_cidr_block        = "192.168.0.0/18" # 如何替换为对前一个资源的引用?
  transit_gateway_attachment_id = # <attachment ID>
}

我尝试使用tolist(aws_vpn_connection.example.routes)[0].destination_cidr_block,但该值为空,请问该如何正确获取并引用aws_vpn_connection资源中的local_ipv4_network_cidr?

解决方案

直接引用资源的输入参数

local_ipv4_network_cidr是你在aws_vpn_connection资源中明确配置的输入参数,不需要通过routes属性间接获取,直接引用即可:

resource "aws_ec2_transit_gateway_route" "example_route" {
  transit_gateway_route_table_id = # <route table ID>

  destination_cidr_block        = aws_vpn_connection.example.local_ipv4_network_cidr
  transit_gateway_attachment_id = aws_vpn_connection.example.transit_gateway_attachment_id
}

为什么routes属性为空?

routes属性仅在静态路由模式(即static_routes_only = true)下才会被Terraform填充值。你的配置中static_routes_only = false,意味着使用BGP动态路由,此时routes属性不会生成数据,所以之前的引用方式返回空值。

补充:自动获取TGW附件ID

代码中同时引用了aws_vpn_connection.example.transit_gateway_attachment_id,这个属性可以直接获取VPN连接对应的中转网关附件ID,无需手动填写,能保证配置的关联性和一致性。

内容的提问来源于stack exchange,提问作者Vasily Pozdeev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:45:34