如何在Terraform另一模块中调用data资源获取的aws_ami ID
报错根因
你将AMI查询的data资源及对应的ami输出定义在了gitlab模块中,但父级main.tf给monitoring模块传参时,错误引用了module.monitoring.ami.id,monitoring模块未定义ami输出属性,因此触发属性不存在的报错。
修复方案
核心修改(必做)
修改父级main.tf中monitoring模块的参数引用逻辑,从gitlab模块获取AMI ID,示例如下:
module "monitoring" { # 替换原有错误的引用行 ami_img_id = module.gitlab.ami.id # 其余原有monitoring模块配置保持不变 }
修改后执行terraform plan验证,无报错即可apply生效,配置完成后CloudWatch告警即可匹配到对应维度的指标数据,解决无数据的问题。
可选优化
如果不需要传递完整的AMI对象属性,建议直接在gitlab模块中仅输出AMI ID,减少不必要的属性传递:
- 修改
gitlab模块的outputs.tf:
output "ami_id" { value = data.aws_ami.ami_img.id }
- 对应修改父级
main.tf的monitoring模块参数:
ami_img_id = module.gitlab.ami_id
该方案完全复用了gitlab模块已经查询到的AMI信息,不需要重复定义data资源,符合最优配置要求。
内容的提问来源于stack exchange,提问作者Thanatos-Delta
相关产品推荐
相关产品推荐

