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

Terraform配置aws_cloudwatch_log_metric_filter遇语法错误求助

问题排查与修复方案

你遇到的Terraform解析错误和后续的"invalid or unknown key"错误,核心问题出在CloudWatch日志过滤器表达式的语法上,同时还有Terraform字符串转义的细节需要调整,具体修复如下:

1. 修复过滤器表达式的语法错误

CloudWatch日志的JSON格式过滤器要求字符串值必须用双引号包裹,你原来的表达式里$.eventName = ConsoleLogin中的ConsoleLogin没有加引号,这是不符合语法要求的。正确的逻辑应该是匹配eventName等于字符串"ConsoleLogin",且errorMessage等于"Failed authentication"。

2. 修正Terraform中的字符串转义

在Terraform的双引号包裹的字符串中,内部的双引号需要用\"来转义,否则Terraform会把内部引号当作字符串的结束标记,导致解析混乱。

3. 完整的修正后代码

把这两处问题修复后,你的resource配置应该是这样的:

resource "aws_cloudwatch_log_metric_filter" "AWS_Console_Login" {
  name           = "${var.aws_account_id}_Console_Login_Failure"
  pattern        = "{ ($.eventName = \"ConsoleLogin\") && ($.errorMessage = \"Failed authentication\") }"
  log_group_name = var.aws_cloudtrail_name # Terraform 0.12+推荐直接引用变量,也可以保留原插值语法

  metric_transformation {
    name      = "${var.aws_account_id}_Console_Login_Failure"
    namespace = "AccountMonitoring${var.aws_account_id}"
    value     = "1"
  }
}

补充说明

  • 你第一次遇到的nested object expected: LBRACE got: ASSIGN错误,其实是pattern的语法错误导致Terraform无法正确解析整个配置块,错误提示指向log_group_name行属于误报,根源在pattern的写法上。
  • 移除log_group_name后出现的"invalid or unknown key: Failed"错误,同样是因为pattern的语法错误,让Terraform错误地将表达式中的部分内容解析为配置块的键值对,从而抛出异常。

内容的提问来源于stack exchange,提问作者StevieHyperB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:03:22