如何导入Terraform VPC模块中声明的子网?
Terraform导入VPC模块公网子网失败的解决方法
问题场景
使用terraform-aws-modules/vpc/aws 3.14.4版本定义VPC配置如下:
module "vpc_XYZ" { source = "terraform-aws-modules/vpc/aws" version = "3.14.4" name = "xxx" cidr = "yyy" azs = [....] public_subnets = ["CIDR","CIDR"] }
已成功通过命令terraform import module.vpc_XYZ.aws_vpc.this[0] vpc-0e70*****导入VPC资源,但执行terraform import 'module.vpc_XYZ.aws_subnet.public[0]' subnet-*******导入公网子网时,报错:Error: Import to non-existent module。
原因
你使用的资源路径module.vpc_XYZ.aws_subnet.public[0]不符合该版本模块的内部资源命名规则,3.14.4版本的公网子网资源实际标识符为aws_subnet.public_subnets,而非aws_subnet.public,导致Terraform无法定位到对应资源。
解决步骤
- 先查询模块内子网资源的正确标识符,执行命令:
terraform state list | grep module.vpc_XYZ | grep subnet
- 根据输出的正确路径执行导入,例如输出包含
module.vpc_XYZ.aws_subnet.public_subnets[0],则导入命令为:
terraform import module.vpc_XYZ.aws_subnet.public_subnets[0] subnet-*******
- 若有多个公网子网,依次修改索引值(
[0]、[1]等),导入对应的子网ID即可。
内容的提问来源于stack exchange,提问作者lemahdois
相关产品推荐
相关产品推荐

