从Lambda函数同步调用步进函数

时间:2019-05-30 08:36:51

标签: amazon-web-services aws-lambda amazon-sqs aws-step-functions

我有一个由FIFO SQS触发的lambda函数。我只希望功能的一个实例运行。该函数调用状态机,并且该状态机比lambda函数花费更长时间来完成。我希望lambda函数仅在step函数完成执行后才能完成。

3 个答案:

答案 0 :(得分:1)

如果您希望状态机在合理的时间内完成,那么您可以让Lambda(或其他任何开始执行状态机的操作)等待响应。

这是一个可接受的模式,但是有很多活动部分:

  • 设置一个SNS主题;状态机结果将发布到其上
  • 在Lambda初始化期间:
    • 生成随机的“网关ID”
    • 创建SQS队列
    • 订阅SQS队列,按网关ID过滤
  • 当Lambda调用状态机时:
    • 生成随机的“相关ID”
    • 在状态机的输入中同时包括网关ID和相关ID
  • 作为状态机的最后一步,将结果发布到SNS主题。 在响应中包括网关ID和相关ID。
  • 在lambda中,提交状态机执行后:
    • 在SQS队列上等待消息。
    • 为此考虑了一些超时问题。您应该为响应设置超时。因此,您可以在状态机上设置生存时间-如果此Lambda死后其结果将无用。
    • 到达时,请确保其相关ID与您的相关ID相匹配,然后使用该消息中的数据作为您的回复。

答案 1 :(得分:1)

AWS Express步骤功能现在支持synchronous invocations

请记住,快速步骤功能适用于需要较高事件发生率且持续时间较短的工作负载。另外,请记住,就像lambda一样,将根据请求数和工作流的持续时间向您收费。

答案 2 :(得分:0)

AWS Step Functions仅异步调用。状态机最多可以运行1年,因此不可能进行同步调用。根据您的工作流程,您可能会发现Activities有用。

  

活动是一项AWS Step Functions功能,可让您拥有   状态机中由工作人员执行工作的任务   可以托管在Amazon Elastic Compute Cloud(Amazon EC2)上,   亚马逊弹性容器服务(Amazon ECS),移动   设备-基本上在任何地方。