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

Invoking a step function synchronously from a lambda function

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

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

Activities are an AWS Step Functions feature that enables you to have a task in your state machine where the work is performed by a worker that can be hosted on Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Container Service (Amazon ECS), mobile devices—basically anywhere.

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

这是一个公认的模式,但有很多活动部分:

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

AWS Express Step Functions 现在支持 synchronous invocations

请记住,Express Step Functions 适用于需要更高事件率和更短持续时间的工作负载。另外,请记住,就像 lambda 一样,您将根据请求的数量和工作流程的持续时间进行计费。