代码之家  ›  专栏  ›  技术社区  ›  Vingtoft

AWS lambda:在函数a之后10分钟执行函数b

  •  3
  • Vingtoft  · 技术社区  · 6 年前

    我正在为一个时间敏感的应用程序开发一个无服务器后端。

    是否可以执行lambda函数 B lambda函数后xx分钟 A 是吗?

    我在找一个干净的无服务器解决方案。使用 setTimeout 或者类似的方法太多了,无法被接受。

    例子: 执行lambda函数10分钟后,使用sns发送通知。

    4 回复  |  直到 6 年前
        1
  •  2
  •   Sergey Kovalev    6 年前

    最简单的方法是使用延迟交付的SQS。

    1. lambda-a将消息添加到一个sqs队列,并将传递延迟设置为10分钟。您可以设置0到15分钟之间的任何延迟。还可以使用SQS延迟队列延迟添加到队列中的所有消息。 https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html

    2. 10分钟后,SQS消息变为可见,并且SQS触发lambda-b。

    3. lambda-b接收Amazon SQS事件,并使用接收句柄从队列中删除消息。下面是一个例子 https://docs.aws.amazon.com/lambda/latest/dg/eventsources.html#eventsources-sqs 以下内容:

    .

     "Records": [
        {
            "messageId": "c80e8021-a70a-42c7-a470-796e1186f753",
            "receiptHandle": "AQEBJQ+/u6NsnT5t8Q/VbVxgdUl4TMKZ5FqhksRdIQvLBhwNvADoBxYSOVeCBXdnS9P+erlTtwEALHsnBXynkfPLH3BOUqmgzP25U8kl8eHzq6RAlzrSOfTO8ox9dcp6GLmW33YjO3zkq5VRYyQlJgLCiAZUpY2D4UQcE5D1Vm8RoKfbE+xtVaOctYeINjaQJ1u3mWx9T7tork3uAlOe1uyFjCWU5aPX/1OHhWCGi2EPPZj6vchNqDOJC/Y2k1gkivqCjz1CZl6FlZ7UVPOx3AMoszPuOYZ+Nuqpx2uCE2MHTtMHD8PVjlsWirt56oUr6JPp9aRGo6bitPIOmi4dX0FmuMKD6u/JnuZCp+AXtJVTmSHS8IXt/twsKU7A+fiMK01NtD5msNgVPoe9JbFtlGwvTQ==",
            "body": "{\"foo\":\"bar\"}",
            "attributes": {
                "ApproximateReceiveCount": "3",
                "SentTimestamp": "1529104986221",
                "SenderId": "594035263019",
                "ApproximateFirstReceiveTimestamp": "1529104986230"
            },
            "messageAttributes": {},
            "md5OfBody": "9bb58f26192e4ba00f01e2e7b136bbd8",
            "eventSource": "aws:sqs",
            "eventSourceARN": "arn:aws:sqs:us-west-2:594035263019:NOTFIFOQUEUE",
            "awsRegion": "us-west-2"
        }
    ]
    
        2
  •  1
  •   Arafat Nalkhande    6 年前

    是的,你可以用 SQS Delay Queues 触发lambda b。

    步骤如下

    创建消息延迟设置为10分钟的SQS队列 将lambda b触发器设置为上述sqs 现在,在lambda函数a执行之后,在sqs上放置一条消息

    现在,由于在SQS上设置了延迟,消息将在10分钟后可用,一旦可用,它将触发lambda b。

        3
  •  1
  •   Nick    6 年前

    你可能会得到你想要的 message timers in SQS .

    函数A应该将消息发布到一个延迟10分钟的队列中,函数B应该订阅该队列。

        4
  •  1
  •   Ronyis    6 年前

    我认为最简单的方法是使用AWS步骤函数。 你也可以-

    1. 配置由功能A、等待状态、功能B组成的步进机。
    2. 从函数A调用一个步骤机,它将由一个等待状态和函数B组成(如果您希望从函数A开始有一个延迟)。