需要创建仅在特定日期和时间运行一次的 CloudWatch 规则

Need to create a CloudWatch rule that runs only once at a specific date and time

我需要找出 CRON 表达式来触发在指定日期和时间前 运行s 1 小时的 Lambda。 例子: 我从 SNS 通知中获得了具体的日期和时间,比如 2022 年 5 月 20 日下午 4 点 UTC 现在,我需要为 2022 年 5 月 20 日下午 3 点 UTC(即特定日期和时间前 1 小时)创建一个 CRON 表达式,以便在该时间前一小时触发 Lambda。

我已经阅读了 AWS 文档并了解到我需要创建一个 CRON 表达式来执行此操作。我需要帮助来找出执行此操作的表达式并且 运行 仅执行一次。

定义日程表表达式有两种变体。一个是 rate(),juts 告诉它 运行 的频率,另一个是 cron(),这是一个 cron-like 语法。 cron 调用的完整语法如下所示:

cron(Minutes Hours Day-of-month Month Day-of-week Year)

所以在你的例子中你可以使用:

cron(0 15 20 5 ? 2022)

请注意,所有字段都接受 * 作为通配符,但 Day-of-week 字段除外,它使用 ?.

要从 SNS 事件中实际生成它,您可以创建另一个 Lambda 函数来侦听 SNS 事件,读取所需的时间戳,并创建一个新的 EventBridge 规则,并将时间戳转换为 cron 格式,如下所示ScheduleExpression。根据您在 Lambda 中使用的语言,使用适当的 AWS 开发工具包来创建 EventBridge 规则和目标。例如,如果您使用 Python,则可以使用 boto3 put_rule method and then call put_target 将新规则附加到 运行 调度代码的其他 Lambda 函数。

此外,我认为预定事件仅适用于默认 EventBridge,不适用于自定义事件。我知道这曾经是一个限制,他们可能同时改变了它。