【问题标题】:Scheduled Lambda that is not compatible with CRON与 CRON 不兼容的计划 Lambda
【发布时间】:2021-04-06 09:53:56
【问题描述】:

我的目标是定期运行 AWS Lambda 函数。但是,该计划与 CRON 不兼容,因此 CloudWatch 计划事件规则不是一个选项(据我了解)。

具体来说,我试图让它在第 5 个工作日运行。这需要考虑到周末、节假日和每月不同的自定义计划停机时间。

在不实际使用 CRON 表达式的情况下定期运行 Lambda 函数的推荐方法是什么?

我能想到几种解决方法,我将在下面列出。

  1. 创建在每个工作日运行的 CloudWatch 事件。让它触发一个 Lambda,它将检查它是否不是假期或计划的停机时间。如果它是有效的一天,它会将一个值推送到 SQS 队列。一旦该队列达到队列中的 5 个值,它将清空队列并触发我上面描述的 Lambda。如果 Lambda 失败,它将推送到 DLQ。
  2. 为简单起见,使用与上述完全相同的内容,但每天而不是每个工作日都运行它,并在那里执行相同的检查。

【问题讨论】:

  • 假期和自定义停机时间的规则从何而来?
  • IMO 你的解决方法对我来说听起来不错。您可以通过每天运行您的 lambda 来避免第二个 lambda/SNS 队列,并且只有在满足您的调度标准时才执行此操作。如果您只是将上次执行日期存储在 dynamodb 表之类的某个地方,那么您的 lambda 函数应该具有确定是否应该执行其操作所需的所有信息
  • 我同意,只需使用解决方法 2。

标签: amazon-web-services aws-lambda cron amazon-cloudwatch


【解决方案1】:

我想我在这里要问的一个问题是假期或“非工作”天的列表是否是预编译的?

假设您可以预编译假期列表,编译一组“非工作”天数应该相对简单。从那里您需要存储它最后一次运行的日期(可能是 DynamoDB?)并每天运行该函数。该函数需要检查自上次运行以来是否已经过了五个工作日,如果有,则运行。

我不确定它的用例,但如果您可以选择每天运行它,那会简单得多。如果不是,是否绝对必须每 5 个工作日进行一次?您可以使用基于 cron 的表达式并且每周只执行一次吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 2019-05-26
    • 1970-01-01
    • 2019-02-17
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    相关资源
    最近更新 更多