【问题标题】:Create a cloudwatch event rule target to a lambda function with different inputs in Terraform在 Terraform 中为具有不同输入的 lambda 函数创建 cloudwatch 事件规则目标
【发布时间】:2021-04-25 16:24:49
【问题描述】:

我创建了一个 CloudWatch 事件规则来触发 lambda 函数按计划运行。但是,我希望规则使用 2 个不同的输入值运行。

例如:input1 是: {"namequery": "top-10-ip", "s3bucket": "stg-log", "query": "SELECT client_ip from ip_tables limit 10"}

而 input2 是:{"namequery": "countError", "s3bucket": "stg-log", "query": "SELECT error from error_logs"}

我的预期结果是这样的图像: expected result

我的 Terraform 代码:​​

resource "aws_cloudwatch_event_rule" "athena_sender" {
  name                = "${var.app_name}-${var.env_name}-lambda-athena-sender"
  description         = "${var.app_name}-${var.env_name} athena sender"
  schedule_expression = var.options_athena_sender["schedule_expression"]
}

resource "aws_cloudwatch_event_target" "athena_sender1" {
  rule      = aws_cloudwatch_event_rule.athena_sender.name
  target_id = aws_lambda_function.athena_sender_function.id
  arn       = aws_lambda_function.athena_sender_function.arn
  input     = <<JSON
    {
      "namequery": "${var.options_athena_sender["namequery1"]}",
      "s3bucket": "${aws_s3_bucket.s3_logs.bucket}",
      "query": "${var.options_athena_sender["query1"]}"
    }
  JSON
}

resource "aws_cloudwatch_event_target" "athena_sender2" {
  rule      = aws_cloudwatch_event_rule.athena_sender.name
  target_id = aws_lambda_function.athena_sender_function.id
  arn       = aws_lambda_function.athena_sender_function.arn
  input     = <<JSON
    {
      "namequery": "${var.options_athena_sender["namequery2"]}",
      "s3bucket": "${aws_s3_bucket.s3_logs.bucket}",
      "query": "${var.options_athena_sender["query2"]}"
    }
  JSON

  depends_on = [aws_cloudwatch_event_target.athena_sender1]  // delay creation of the second athena sender CW event to prevent ConcurrentModificationException
}

但是,听起来 Terraform 无法识别差异,它只创建了 1 个目标。

希望有人能帮助我,非常感谢!

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    这可能是因为您在两种情况下都使用相同的target_id

    target_id = aws_lambda_function.athena_sender_function.id
    

    请将其更改为针对不同规则使用不同的 id,例如:

    target_id = "${aws_lambda_function.athena_sender_function.id}1"
    

    target_id = "${aws_lambda_function.athena_sender_function.id}2"
    

    【讨论】:

    • 同意这可能是原因,因为我相信 AWS API 使用规则和目标 ID 组合来实现唯一性。
    • @TrinhThiHaiYen 没问题。很高兴它解决了:-)
    猜你喜欢
    • 2019-10-15
    • 1970-01-01
    • 2019-10-24
    • 2020-07-22
    • 2021-03-21
    • 1970-01-01
    • 2017-11-01
    • 2020-11-02
    • 2021-01-02
    相关资源
    最近更新 更多