地形 - aws_cloud_watch_log_metric_filter

Terraform - aws_cloud_watch_log_metric_filter

有没有人尝试过在 cloudwatch 日志上设置指标过滤器?想知道我是否在 Terraform 中发现了错误?

这就是我想要做的;

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}"  

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

当我 运行 Terraform 应用或验证时,我收到此响应;

错误:在 157:19 处解析 cloudwatch.tf 时出错:需要嵌套对象:LBRACE 得到:ASSIGN

要清楚 157:19 涉及包含 log_group_name 的代码行,其中 19 在 = 符号之前。

但是我认为这与我的模式有关,如果我删除日志组..并且 运行 我得到一个验证;

aws_cloudwatch_log_metric_filter.AWS_Console_Login: : 无效或未知密钥:失败

我对 AWS 过滤器模式的要求是不是太高了?

谢谢 斯蒂芬

尝试转义引号。这是语法错误。问题不是 log_group_name 行。就是上面那个。

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}"  

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

这看起来不错。你应该看看tflint。它是 Visual Studio 代码的 Terraform 插件的一部分,可帮助我找到错误所在。