【问题标题】:Terraform doesn't add log group name on cloudwatch event targetTerraform 不会在 cloudwatch 事件目标上添加日志组名称
【发布时间】:2019-12-06 08:01:08
【问题描述】:

我在Cloudwatch 中创建一个规则,并在Terraform 中附加一个log group 作为其目标。

resource "aws_cloudwatch_event_target" "trigger_glue_job_lambda" {
  rule = "${aws_cloudwatch_event_rule.crawler.name}"
  target_id = "SendToLambda"
  arn = "${aws_lambda_function.trigger_glue_job.arn}"
}

resource "aws_cloudwatch_event_target" "log_glue_crawler_result" {
  rule = "${aws_cloudwatch_event_rule.crawler.name}"
  target_id = "LogCrawler"
  arn = "${aws_cloudwatch_log_group.grue_crawler_log_group.arn}"
}

resource "aws_cloudwatch_log_group" "grue_crawler_log_group" {
  name = "crawler_log"
  tags = {
    Application = "reddit_movies"
  }
}

您看到上面的配置包括一个log group资源定义和两个event target,一个用于日志组,另一个用于触发lambda。以下是此配置在 aws cloudwatch 规则控制台中的屏幕截图。

您看到屏幕截图底部的目标正确显示了 lambda,但它没有显示我创建的日志组的名称。相反,它会为日志组名称显示 *。我想知道我的配置有什么问题。

【问题讨论】:

    标签: amazon-web-services terraform amazon-cloudwatch


    【解决方案1】:

    在检查 cloudwatch 日志组的arn 属性的值后,由于某种原因,它以arn:aws:logs:eu-west-1:12345678912:log-group:crawler_log:*这种格式在末尾附加了一个星号
    像这样更改您的代码以删除最后 2 个字符:

    resource "aws_cloudwatch_event_target" "log_glue_crawler_result" {
      rule = "${aws_cloudwatch_event_rule.crawler.name}"  
      target_id = "LogCrawler"
      arn = "${substr(aws_cloudwatch_log_group.grue_crawler_log_group.arn,0,length(aws_cloudwatch_log_group.grue_crawler_log_group.arn) - 2)}"
    }
    

    【讨论】:

    • 是 terraform 的错误吗?
    • 您是如何检查arn 属性的?
    • 很好发现@WalidK。只是添加一些信息:添加尾随字符的不是 terraform,而是 AWS 本身。如果您描述日志组的 ARN,则它的末尾已经有 :*。问题是为什么 aws_cloudwatch_event_target 没有考虑到这一点:/
    猜你喜欢
    • 2018-07-29
    • 2020-05-13
    • 2017-08-09
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多