如何通过Terraform修改AWS中已有VPC的默认NACL
解决Terraform修改已有VPC默认NACL的问题
错误原因
你遇到的报错是因为**aws_vpc数据源没有default_network_acl_id或default_network_acl这类导出属性**,Terraform无法从VPC数据源直接获取默认NACL的关联信息。
可行解决方案
方案1:直接指定默认NACL ID
如果已经知晓目标VPC默认NACL的ID,直接硬编码到配置中是最直接的方式:
resource "aws_default_network_acl" "default" { default_network_acl_id = "acl-xxxxxx" # 替换为你的默认NACL实际ID egress { protocol = "tcp" rule_no = 80 action = "deny" cidr_block = "0.0.0.0/0" from_port = 22 to_port = 22 } ingress { protocol = "tcp" rule_no = 90 action = "deny" cidr_block = "0.0.0.0/0" from_port = 3389 to_port = 3389 } }
方案2:通过数据源自动获取默认NACL
如果不想硬编码ID,可使用aws_network_acl数据源,通过default = true过滤条件,自动匹配目标VPC的默认NACL:
data "aws_vpc" "default" { id = "vpc-067415793148e22d1" } data "aws_network_acl" "default" { vpc_id = data.aws_vpc.default.id default = true # 仅匹配VPC的默认NACL } resource "aws_default_network_acl" "default" { default_network_acl_id = data.aws_network_acl.default.id egress { protocol = "tcp" rule_no = 80 action = "deny" cidr_block = "0.0.0.0/0" from_port = 22 to_port = 22 } ingress { protocol = "tcp" rule_no = 90 action = "deny" cidr_block = "0.0.0.0/0" from_port = 3389 to_port = 3389 } }
说明
aws_default_network_acl资源专门用于管理AWS默认创建的NACL(非Terraform创建的也适用),只要正确关联到默认NACL的ID,就能正常修改其规则。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

