4

有没有人尝试在 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 过滤器模式的要求是否过高?

谢谢斯蒂芬

4

1 回答 1

6

尝试转义你的引号。这是语法上的失败。问题不在于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 Code 的 Terraform 插件的一部分,它帮助我找出错误所在。

于 2018-05-24T13:05:18.303 回答