You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:01:30