Terraform 11.15使用aws_route_tables创建TGW路由出现解析错误问询
错误原因
- 语法兼容性问题:你使用的Terraform 0.11版本不支持
tolist(xxx)[index]这种方括号直接索引列表的写法,该特性是Terraform 0.12及以上版本才支持的,所以解析配置时会抛出符号不匹配的错误。 - 资源数量不匹配:当前
aws_route资源的count值固定为1,就算语法修复后也只能为1个路由表添加路由,无法满足你给所有查询到的路由表批量配置路由的需求。 - 数据源引用错误:
aws_vpc数据源配置了count参数,返回结果是列表类型,你在aws_route_tables中直接引用data.aws_vpc.vpc_id.id会报错,需要指定索引取第一个实例的ID。
修复方案
调整两处配置即可:
- 修正
aws_route_tables数据源的VPC ID引用 - 替换
aws_route的索引写法为0.11支持的element()函数,同时调整count值匹配路由表数量
修复后完整核心配置
variable "environment_group" { description = "Name given to the resource" default = "test" } variable "create_tgw_route" { description = "Toggle to create the transit gateway route within the VPC route table" default = true } variable "tgw_route_cidr" { description = "Specify the destination cidr block for the transit gateway route within the VPC route table" default = "10.0.0.0/8" } variable "transit_gateway_id" { default = "" description = "Temporary variable that should be replaced by a data lookup in due time" } data "aws_vpc" "vpc_id" { count = "${var.create_tgw_route ? 1 : 0}" filter { name = "tag:Name" values = ["vpc-${var.environment_group}"] } } data "aws_route_tables" "rtb" { count = "${var.create_tgw_route ? 1 : 0}" # 修正vpc id引用,加[0]取第一个实例的属性 vpc_id = "${data.aws_vpc.vpc_id[0].id}" filter { name = "tag:Name" values = ["rt-${var.environment_group}-*"] } } resource "aws_route" "rt_tgw" { # count匹配路由表数量,实现批量配置 count = "${var.create_tgw_route ? length(data.aws_route_tables.rtb.ids) : 0}" # 用element函数实现列表索引,兼容0.11语法 route_table_id = "${element(data.aws_route_tables.rtb.ids, count.index)}" destination_cidr_block = "${var.tgw_route_cidr}" transit_gateway_id = "${var.transit_gateway_id}" }
注意事项
配置前请确认var.transit_gateway_id已经赋值为有效的transit gateway ID,为空会导致资源创建失败。
内容的提问来源于stack exchange,提问作者LinuxPingu
相关产品推荐
相关产品推荐

