Terraform - aws_cloud_watch_log_metric_filter

Ste*_*erB 6 terraform terraform-provider-aws

有人有尝试在 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"
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行 Terraform apply 或 validate 时,我收到此响应;

错误:解析 cloudwatch.tf 时出错:157:19:预期嵌套对象:LBRACE 得到:ASSIGN

需要明确的是,157:19 与包含 log_group_name 的代码行相关,其中 19 位于 = 符号之前。

不过,我认为这与我的模式有关,如果我删除日志组..并运行我得到的验证;

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

我对 AWS 过滤模式的要求是否过高?

谢谢斯蒂芬

Bra*_*ler 9

尝试转义您的引号。这是语法上的失败。问题不在于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"
  }
}
Run Code Online (Sandbox Code Playgroud)

这看起来没问题。你应该看看tflint。它是 Visual Studio Code 的 Terraform 插件的一部分,可以帮助我找到错误所在。