Terraform中如何从VPC模块传递vpc_id至aws_vpc_endpoint资源
从Terraform AWS VPC模块获取VPC ID并传递给VPC Endpoint
问题场景
使用terraform-aws-modules/vpc/aws模块(版本5.0.0)创建VPC后,在创建aws_vpc_endpoint资源时,错误尝试通过module.vpc.azs.id获取VPC ID,触发如下报错:
│ Error: Unsupported attribute │ │ on main.tf line 116, in resource "aws_vpc_endpoint" "s3": │ 116: for_each = toset(module.vpc.azs.id) │ ├──────────────── │ │ module.vpc.azs is list of string with 2 elements │ │ This value does not have any attributes.
错误原因
module.vpc.azs是存储可用区名称的字符串列表,本身没有id属性,直接访问azs.id属于无效操作。- 对VPC端点的逻辑理解有误:VPC端点是绑定整个VPC的资源,不需要按可用区循环创建,一个VPC对应一个S3端点即可。
正确解决方案
terraform-aws-modules/vpc/aws模块默认会输出创建的VPC的ID,直接引用module.vpc.vpc_id即可,无需使用for_each或count:
resource "aws_vpc_endpoint" "s3" { vpc_id = module.vpc.vpc_id service_name = "com.amazonaws.us-east-1.s3" }
补充说明
如果需要为该VPC配置多个不同类型的端点(如S3、DynamoDB等),只需单独创建对应的aws_vpc_endpoint资源,每个资源都直接引用module.vpc.vpc_id即可。
内容的提问来源于stack exchange,提问作者scene
相关产品推荐
相关产品推荐

