【问题标题】:How to run a severless lambda function every 10 minutes at 00, 10, 20, 30, 40, 50如何在 00、10、20、30、40、50 每 10 分钟运行一次无服务器 lambda 函数
【发布时间】:2021-05-07 11:48:39
【问题描述】:

我有一个使用 nodejs 编写的无服务器框架作为 lambda 部署在 AWS 上的函数。我已经安排了一个活动,让这个函数/cron 作业每 10 分钟运行一次。

我希望这个 cron 作业每 10 分钟运行一次。我假设它会在每小时 00,10,20,30,40,50 分钟标记处运行。

但事实并非如此,它似乎从部署时开始每 10 分钟运行一次,例如,如果我在 10:05 部署应用程序,它将在 10:15、10 运行: 25、10:35、10:45、10:55、11:05。当然是每 10 分钟一次,但不是我想要的。

有没有办法让我的 lambda 函数在 00、10、20、30、40、50 时每 10 分钟执行一次?

serverless.ts / serverless.yml

functions: {
    main: {
        handler: "handler.main",
        events: [{
            schedule: "rate(10 minutes)",
        }],
    },
},

谢谢

【问题讨论】:

    标签: amazon-web-services aws-lambda cron serverless-framework serverless


    【解决方案1】:

    您需要将 Cloudwatch 规则纳入其中。

    这里有来自 AWS 的好教程:https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html

    基本上有必要的操作:

    1. 创建 CloudWatch 事件规则
    2. lambda:InvokeFunction 权限和principal events.amazonaws.com 添加到您的lambda
    3. 将目标置于您的事件规则中。目标是您的 Lamba 将被启动。

    如果您想使用无服务器框架运行它,您可以使用调度提供程序。

    functions:
      crawl:
        handler: crawl
        events:
          - schedule: rate(2 hours)
          - schedule: cron(0 12 * * ? *)
    

    https://www.serverless.com/framework/docs/providers/aws/events/schedule/

    更新:如何运行特定时间

    如果你想在特定时间运行你的任务,你可以使用这个表达式:

    cron(0,10,20,30,40,50 * * * ? *)
    

    关于 Schedule 表达式的更多信息在这里:https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions

    【讨论】:

    • 是的,这是我迄今为止使用无服务器框架所做的事情,我问了一个比这更具体的问题,关于如何设置 cron 以运行特定时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2017-01-05
    • 2021-06-14
    • 2019-11-06
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多