如何在 AWS 中的特定时间触发 Lambda 函数?

Fai*_*med 11 cron amazon-web-services aws-lambda

我知道可用于重复运行 Lambda 的 CloudWatch 重复事件..但是有没有办法可以在特定时间触发它而不重复?

小智 13

使用云监视规则 - 可以分配单个非重复日期。

示例 cron:0 10 16 6 ? 2019 分钟 小时 日 月 dayOfWeek 年

例如,这将在格林威治标准时间 2019 年 6 月 16 日星期日 10:00:00 执行一次。

在此处输入图片说明

参考:https : //docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html


Ben*_*aki 11

您可以为其提供一个 cron 表达式或速率。您正在寻找的是 cron 表达式选项,它可以让您说出确切的运行时间。更多信息 - https://docs.aws.amazon.com/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html

如果您想手动运行一次,您可以随时使用页面顶部的“测试”按钮触发它。你真的可以在这里发挥创意,例如,你甚至可以用一个 http 请求触发它,这将允许你将它集成到任何你想要的东西,超级容易(通过 http 请求调用 AWS Lambda 函数


bec*_*nse 6

您还可以使用 AWS Step Functions 来实现此目的。当您想要以编程方式控制事件的执行时间时,它特别有用。也不需要轮询,因为您安排函数在特定时间点执行。

下图显示了它的工作原理:

在此输入图像描述

  1. 步骤函数工作流程由某些事件(例如http请求)触发并提供截止日期
  2. 工作流程启动并立即进入“WaitTillScheduled”状态,该状态仅在截止日期结束时继续。
  3. 下一个状态是“ ActionEvent ”,它会触发您要执行的 Lambda 函数。完成的。

对于那些使用无服务器框架的人来说,步骤函数定义的示例如下所示:

stepFunctions:
  validate: true
  stateMachines:
    scheduler:
      name: exampleScheduler
      definition:
        Comment: "Description of Step Function"
        StartAt: WaitTillScheduled
        States:
          WaitTillScheduled:
            Type: Wait
            TimestampPath: "$.dueDate"
            Next: ActionEvent
          ActionEvent:
            Type: Task
            Resource:
              Fn::GetAtt: [schedulerExecution, Arn]
            End: true
Run Code Online (Sandbox Code Playgroud)

dueDate传递给步骤函数,并且schedulerExecution是在某个时间点执行的 Lambda 函数。

很大程度上归功于 Ryan Dsilva。他写了一篇关于此的文章,详细解释了一切:https://levelup.gitconnected.com/trigger-events-at-a-specific-timestamp-2527f9336128

  • 不知道为什么这没有获得更高的投票 - 这是迄今为止最好的方法,因为 EventBridge 调度程序需要大量 API 操作。再加上现在的“快速”选项,这使得在 5 分钟内安排活动变得非常好、快速且便宜。 (2认同)
  • 此外,精度已降至秒!这是另一个好处。 (2认同)