配置 CloudWatch Events 以使用 Terraform 将输入发送到 Lambda 函数

Posted

技术标签:

【中文标题】配置 CloudWatch Events 以使用 Terraform 将输入发送到 Lambda 函数【英文标题】:Configure CloudWatch Events to send input to Lambda function with Terraform 【发布时间】:2020-04-10 04:04:03 【问题描述】:

我想。 我使用了以下脚本:

resource "aws_cloudwatch_event_rule" "aa-rule-event" 
  count               = "$var.count"
  name                = "$var.application_name-$element(var.names, count.index)"
  description         = "$element(var.descriptions, count.index)"
  schedule_expression = "$element(var.cron-expressions, count.index)"
  is_enabled          = "$element(var.rule-status-states, count.index)"


resource "aws_cloudwatch_event_target" "aa-rule-target" 
  count     = "$var.count"
  rule      = "$var.application_name-$element(var.names, count.index)"
  target_id = "CloudWatchToLambda"
  arn       = "arn:aws:lambda:$var.aws_region:$var.aws_account_number:function:$var.application_name-$element(var.target-lambda-function, count.index)"

我需要通过此 CloudWatch 事件向目标 Lambda 提供输入。我知道可以配置输入,但是如何在 Terraform 中配置呢?

【问题讨论】:

【参考方案1】:

aws_cloudwatch_event_target 资源采用可选的input parameter,它可以在调用 Lambda 函数时将 JSON blob 传递给与有效负载等效的目标。

resource "aws_cloudwatch_event_rule" "aa-rule-event" 
  count               = "$var.count"
  name                = "$var.application_name-$element(var.names, count.index)"
  description         = "$element(var.descriptions, count.index)"
  schedule_expression = "$element(var.cron-expressions, count.index)"
  is_enabled          = "$element(var.rule-status-states, count.index)"


resource "aws_cloudwatch_event_target" "aa-rule-target" 
  count     = "$var.count"
  rule      = "$var.application_name-$element(var.names, count.index)"
  target_id = "CloudWatchToLambda"
  arn       = "arn:aws:lambda:$var.aws_region:$var.aws_account_number:function:$var.application_name-$element(var.target-lambda-function, count.index)"
  input = <<JSON

  "foo": 
    "bar": [
      1,
      2
    ]
  

JSON

【讨论】:

我试过这个,但似乎无法在 lambda 函数(用 Go 编写)中检索输入值。是在某个地方的上下文中吗? 天哪!我的 func 处理程序签名错误——输入作为处理程序的第二个参数(不在上下文中),但它必须是正确的类型!我最初将 events.SNSEvent 作为类型(更典型),但在这种情况下,我使用的是自定义类型。

以上是关于配置 CloudWatch Events 以使用 Terraform 将输入发送到 Lambda 函数的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式跨不同帐户访问cloudwatch

配置 cloudwatch “空闲”警报

禁用 CloudWatch 以监控 Lambda 函数的日志

扩展 Fargate 服务任务以匹配 CloudWatch 指标

AWS CloudWatch Agent 的配置和使用

过滤 cloudwatch 警报在 SNS 主题上发布的消息以接收电子邮件通知