AWS Lambda。延迟调用

时间:2017-05-26 14:51:03

标签: amazon-web-services aws-lambda amazon-sqs task-queue amazon-cloudwatch

我需要构建"任务调度程序"使用亚马逊工具。我需要执行任务一次的主要问题是延迟很长(可能是几个小时或几个星期)。

我尝试研究如何使用CloudWatch和Lambda函数构建它。据我所知 - 我需要使用单独的规则进行一次超时执行。 但AWS只允许100个规则/帐户。

可能我走错路,这个工具不适合我的任务。

我也试过SQS,但它确实不允许我超时15分钟。最简单的方法 - 使用自己的mircoservice与crone,但我希望它可以在云中完成)

可能有人有同样的问题,可以与我分享有关此实施的想法吗?

4 个答案:

答案 0 :(得分:2)

CloudWatch规则应该有效,您可以将cron表达式用于事件计划。

答案 1 :(得分:2)

我建议您使用disque来延迟消息/重试,并使用apscheduler(python)来安排任务。

您也可以将disque用作群集。

根据您的使用情况,您可以将这两个放入ec2机器中。

如果您需要任何帮助,请告诉我们!

答案 2 :(得分:1)

您可以使用AWS Step Functions Wait State进行此操作。我自己没有使用它,但似乎你可以定义一个状态机,其中lamdba函数的结果可以用来确定等待下一步函数的时间。

或者,我的API https://posthook.io能够在特定时间向定义的端点发出HTTP POST请求。

答案 3 :(得分:0)

正如之前有人指出的那样,您可以使用 AWS step 函数,这是一个示例定义,它将在指定的时间段内延迟 lambda 执行。您可以从云监视事件规则目标或事件桥触发此步骤函数

{
  "Comment": "An example of the Amazon States Language using wait states",
  "StartAt": "wait_using_seconds",
  "States": {
    "wait_using_seconds": {
      "Type": "Wait",
      "Seconds": 450, // time to delay
      "Next": "FinalState"
    },
    "FinalState": {
     "Type": "Task",
      "Resource": "arn:aws:lambda:<region>:<account-name>:function:<function-name>",
      "End": true
    }
  }
}