管理“动态”AWS Lambda工作流程

时间:2017-03-10 19:34:53

标签: amazon-web-services architecture aws-lambda amazon-swf aws-step-functions

假设我有一个名为'TestExecutor'的Lambda函数,该函数接受包含N'Tests'的ARN的参数,这些参数也实现为Lambda函数。

工作流程:

  1. 使用各种“测试”
  2. 的ARN列表调用TestExecutor
  3. TestExecutor同时调用每个Test;每个Lambda都应该返回一个JSON
  4. TestExecutor等待每个测试完成。它整合了所有收到的JSON
  5. Consolidated JSON存储在DynamoDB / S3
  6. 问题陈述 - 以无服务器方式创建此类工作流的最佳方式是什么?

    我考虑过两个AWS服务来管理这个:

    1. AWS步骤功能 - 我的步进功能需要每个可执行的“测试”Lambda的状态。我希望为用户提供灵活性来调用任何Lambda,而无需在我的Step函数中“注册”它。
    2. AWS SWF - 看起来有点矫枉过正。也遇到与上述相同的问题。
    3. 所以现在我能想到的最好的方法就是以简单的方式做到这一点:

      在我的TestExecutor Lambda中,我可以为N个测试创建N个线程,每个线程调用一个特定的Test的Lambda函数。每个线程等待其Test返回JSON。由于所有执行都成功,所有JSON都会合并。 Consolidated JSON存储在DynamoDB中。

      我对这个解决方案不满意 - 从TestExecutor Lambda中的手动管理测试Lambdas的失败和重试将会有点棘手。这是我第一次尝试无服务器,但它似乎是错误的模式。我想从我的工作流程中获得一个很好的自上而下的视图 - 由于TestExecutor和Test Lambdas之间没有正式的链接,因此监视这一点似乎有点混乱和散乱

      也许我可以创建一个SQS队列以及每个测试Lambda。对于提供给TestExecutor的每个ARN,我可以将消息推送到相应的队列。但现在呢?我必须为每个测试创建'Listener'Lambda,每T秒轮询每个队列。然后它将调用实际的测试Lambda。这听起来也很复杂。

      很想听到一些建议!欢呼声。

2 个答案:

答案 0 :(得分:1)

AWS SWF不会遇到同样的问题,因为它不需要注册lambda函数来调用它。 SWF的主要限制是仍然无法将决策过程作为lambda函数运行。因此,您必须在其他地方运行它。如果您已经有一些可以运行它的主机,那么使用AWS Flow Framework实现您的用例非常简单。

答案 1 :(得分:0)

您可以利用AWS SDK在Lambda函数中使用所述ARN生成步进机。

以某种方式需要某种方式来清理,和/或避免重复,否则控制台会很快变得混乱。