如何消除Terraform中aws_route_table定义的弃用警告?
如何消除Terraform中aws_route_table定义的弃用警告?
兄弟,我之前也碰到过这个一模一样的糟心问题!其实核心矛盾在于旧版本的AWS Terraform Provider对route块内字段的处理有点拧巴:一方面标记instance_id这类字段为弃用,另一方面又要求它们必须存在,导致你留空字符串触发警告、删掉又报错。
给你两个靠谱的解决办法,按情况选就行:
方法一:简化Route块,只保留必要字段
如果你的AWS Provider版本不算特别旧,直接删掉所有你用不到的字段就行,只留实际需要的参数。比如你的示例可以改成这样:
resource "aws_route_table" "rtb_public" { vpc_id = aws_vpc.app_vpc.id route = [ { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.app_igw.id } ] tags = { Name = "${var.vpc_name}-rtb-public" } }
这样既不会触发弃用警告,也不会因为字段缺失报错——新版本的Provider会自动忽略那些未声明的可选字段。
方法二:用null替代空字符串(适配旧版Provider)
如果上面的方法报错,说明你用的AWS Provider版本还要求这些字段必须存在,那把所有不用的弃用字段设为null而不是空字符串就行:
resource "aws_route_table" "rtb_public" { vpc_id = aws_vpc.app_vpc.id route = [ { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.app_igw.id egress_only_gateway_id = null instance_id = null ipv6_cidr_block = null nat_gateway_id = null network_interface_id = null transit_gateway_id = null vpc_peering_connection_id = null carrier_gateway_id = null core_network_arn = null destination_prefix_list_id = null local_gateway_id = null vpc_endpoint_id = null } ] tags = { Name = "${var.vpc_name}-rtb-public" } }
Terraform对null值的处理是忽略该字段(只要Provider支持可选),不会把它当成有效值传入,自然就不会触发弃用警告了。
长期建议
最好还是把你的AWS Terraform Provider升级到较新的版本,新版本里已经把这些字段改成了真正的可选参数,你完全可以自由省略不用的字段,再也不会碰到这种矛盾的情况。
备注:内容来源于stack exchange,提问作者Chris.B
相关产品推荐
相关产品推荐

