AWS事件桥Cron时区-在特定的本地时间触发

20
我们已经设置了一个EventBridge,用于触发Lambda。它应该在每天的上午9:30(根据本地时间,对我而言是美国东部标准/夏令时)运行。问题是,EventBridge似乎是按UTC设置日期的。有没有办法使其始终基于特定的时区?例如,无论季节如何,始终在上午9:30运行?

更准确地说,您希望根据季节在不同的时间触发它,因为夏令时是对UTC的季节性调整。 - erik258
@DanielFarrell - 是的,这是另一种说法。主要问题是这是否可能。谢谢! - amd3
3个回答

9

更新时间: 2022年11月

使用EventBridge调度器,您可以按照特定的日期时间和时区安排事件。还支持一次性计划。

介绍Amazon EventBridge Scheduler - AWS博客

原始内容:2021年7月

要么安排另一个事件来调整第一个事件,要么在美国东部标准时间(EST)和美国东部夏令时(EDT)都执行lambda函数,并让lambda函数决定应该运行哪个事件。

在当地时间早上2点和3点分别运行另一个lambda函数,可以调整第一个lambda函数的日光节约时间表。您可以使用lambda语言的实现来决定是否需要调整事件。

您也可以将原始的lambda函数安排在经过夏令时调整和未经过夏令时调整的两个时间点同时运行(即美国东部夏令时对应的UTC时间为14:30,美国东部标准时间对应的UTC时间为13:30)。然后根据日历检查,lambda函数可以决定是否是适当的时间来执行。

我更喜欢第一种选择,因为它清晰地分离了职责。


谢谢,我希望EventBridge本身有一个条件语句,但我同意上面的方法。感谢您抽出时间进行审查。 - amd3
对于那些像我一样查看使用时区进行调度的无服务器配置选项的人来说,补充一下这个答案。 - undefined

5
很遗憾,你不能这样做,因为仅使用 UTC时区
引用:

所有预定事件都使用 UTC时区 ,计划的最小精度为1分钟。

您需要自定义解决方案来实现所需操作。例如,让AWS EventBridge触发lambda函数,该函数基于其将UTC转换为本地时间的结果来评估应触发的其他内容。


谢谢,我担心这一点,但现在手动更新日程表似乎更容易,每年2次。 - amd3
2
新的(截至2022年11月)EventBridge调度程序允许您在特定日期时间以及时区安排事件。还支持一次性计划。 https://aws.amazon.com/blogs/compute/introducing-amazon-eventbridge-scheduler/ - Asker

1

正如在另一个答案中所述,可以使用EventBridge Scheduler实现此功能。 在下面的示例中,我使用CDK在周一至周五的早上6点和8点安排了一个lambda。

// Lambda
const func = new NodejsFunction(this, 'func-id', {
  runtime: Runtime.NODEJS_18_X
});
// Role
const role = new Role(this, 'role-id', {
  managedPolicies: [{ managedPolicyArn: 'arn:aws:iam::aws:policy/service-role/AWSLambdaRole' }],
  assumedBy: new ServicePrincipal('scheduler.amazonaws.com')
});
// EventBridge Schedule
new CfnSchedule(this, 'schedule-id', {
  flexibleTimeWindow: {
    mode: 'OFF',
  },
  scheduleExpression: 'cron(0 6,8 ? * MON-FRI *)',
  scheduleExpressionTimezone: 'Europe/Amsterdam',
  target: {
    arn: func.functionArn,
    roleArn: role.roleArn,
  },
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接