我们可以在 CloudWatch 事件规则中组合事件模式和调度任务吗?

Can we combine event pattern and scheduling exp in CloudWatch Event rule

提问人:ibrahim jamil 提问时间:9/27/2023 最后编辑:ibrahim jamil 更新时间:10/4/2023 访问量:91

问:

我想使用自定义event_pattern,每当事件规则触发我的 lambda 时,在我的 lambda 中使用 但问题是我在某处听说我们不能同时将事件模式和调度结合起来 这是我的 Terraform 代码

resource "aws_cloudwatch_event_rule" "event_lambda_trigger" {
  name        = "event_lambda_trigger"
  description = "Trigger Lambda function daily for cloud watch event"
  schedule_expression = "cron(*/5 * * * ? *)" # This schedules the event to run daily at midnight UTC
  event_pattern = jsonencode({
    source = ["aws.events"],
    detail = {
      eventName: ["my-custom-event"],
    },
  })
}

这是我的 Go lambda 处理程序

func handler(event events.CloudWatchEvent) (string, error) {
  // Handle CloudWatch Event (event logs) here
  // Access event.Detail and other properties as needed
  fmt.Printf(string(event.Detail))
  return fmt.Sprint("event", string(event.Source)), nil
}

我也想以 Details 的形式获取事件模式,因为我们可以使用 detail 来获取

我尝试了事件模式和调度来使用组合,但事件触发器,事件模式具有 {} 空的 json 对象,但我正在详细传递它 terraform 块。

更新:根据 aws 文档,我们不能将调度与事件模式一起使用,因此在这种情况下,我在 aws_cloudwatch_event_target 中使用了输入参数,但仍然没有在 lambda 中获取数据,这是已解决问题的链接: 链接

amazon-web-services go terraform terraform-provider-aws aws-cloudwatch-log-insights

评论

0赞 Chris Doyle 9/27/2023
这没有任何意义。事件由资源中的更改实时触发。事件模式可帮助您筛选这些实时请求。因此,使用 Event oattern,每次有匹配的事件时都会触发您的 lambda。计划表达式用于定期触发某些内容。它不是事件驱动的。它只会在设定的时间触发 lambda。
0赞 ibrahim jamil 9/27/2023
在我们的例子中,我们希望调度多个事件,因此根据该事件,我们希望将其映射到我们的 lambda 中,并将与之相关的任务推送到 MQ 中。我们只需要在特定时间将事件传递给 lambda,这就是我想要实现链接的参考
0赞 Chris Doyle 9/27/2023
这不是事件桥的工作方式。来自 aws 文档。这是其中之一。我仍然没有得到你的用例。是否要收集与特定模式匹配的所有事件,但仅使用计划同时处理所有这些事件?A rule can run in response to an event, or at certain time intervals
0赞 ibrahim jamil 9/27/2023
是的,我知道 AWS 文档案例,这就是为什么我现在将输入传递到aws_cloudwatch_event_target中的原因,我分享的上一个链接提到,如果我们也想发送一些带有计划事件的数据,但问题是 terraform infra 设置正确,但没有在 lambda 处理程序中获得该输入
1赞 ibrahim jamil 9/27/2023
问题已解决: 基本上,我在 go lambda 中使用了以前的 AwsLogEvent 类型,而我应该使用 interface{} 类型,因为我在 terraform 中将输入覆盖到 aws_cloudwatch_event_target 中。现在我在控制台日志中获取该输入。

答: 暂无答案