Terraform:如何在heredoc字符串中正确使用each.value
解决Terraform CloudWatch Event Rule Heredoc中each.value插值错误的问题
问题根源
错误提示已明确指出:each.value是包含1个string属性的对象,但你在Heredoc模板中直接引用整个对象,而Terraform插值需要的是字符串类型值,因此触发错误。
解决方案
你需要明确访问each.value对象中存储MediaLive频道ARN的字符串属性(假设属性名为arn,需根据你的实际代码调整属性名),而非直接引用整个对象。
修改后的代码示例
假设你的for_each集合是包含频道ARN属性的对象Map,调整Heredoc中的插值逻辑:
resource "aws_cloudwatch_event_rule" "medialive_triggers" { for_each = your_for_each_collection # 替换为你实际的for_each集合 name = each.key event_pattern = <<EOF { "source": ["aws.medialive"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["medialive.amazonaws.com"], "eventName": ["StopChannel"], "responseElements": { "arn": [{ "prefix": "${each.value.arn}" // 替换为你对象中存储ARN的属性名 }] } } } EOF }
额外说明
如果你的for_each集合原本应直接存储ARN字符串(而非对象),那可能是你定义for_each时的结构错误。比如可以使用字符串集合:
locals { medialive_channel_arns = toset([ "arn:aws:medialive:us-east-1:123456789012:channel:123", "arn:aws:medialive:us-east-1:123456789012:channel:456" ]) }
这种情况下each.value本身就是字符串,直接用${each.value}即可。但根据你的错误提示,当前each.value是对象,因此必须访问其内部的字符串属性。
内容的提问来源于stack exchange,提问作者Naxxio
相关产品推荐
相关产品推荐

