Terraform如何忽略aws_instances数据源返回的无查询结果错误
解决方案
你可以通过AWS Provider提供的allow_empty_results参数控制数据源无结果时的行为,具体操作如下:
- 修改
aws_instances数据源配置,添加allow_empty_results = true配置项,修改后示例如下:
data "aws_instances" "all_instances" { instance_tags = { Monitoring = "MONITOR" } instance_state_names = ["running", "pending", "stopped", "stopping"] # 允许返回空结果,无匹配实例时不会抛出错误 allow_empty_results = true }
- 兼容后续依赖资源的逻辑
修改后无匹配实例时,该数据源返回的ids等属性会是空列表,你需要调整后续依赖该数据源的CloudWatch指标资源逻辑,避免引用空值报错:
- 如果是批量创建指标,使用
for_each时直接传入空集合不会生成对应资源,无需额外调整 - 如果是单条资源依赖该数据源的查询结果,可通过
count参数判断结果长度,无实例时跳过创建:
resource "aws_cloudwatch_metric_alarm" "example" { # 无匹配实例时不创建该告警 count = length(data.aws_instances.all_instances.ids) > 0 ? 1 : 0 # 其余配置项保持不变 ... }
如果需要更精细化的账号级控制,也可以新增一个账号维度的开关变量,通过count参数控制该数据源是否执行查询,特殊账号下直接跳过数据源调用即可。
内容的提问来源于stack exchange,提问作者dovregubben
相关产品推荐
相关产品推荐

