【发布时间】:2017-03-18 12:20:55
【问题描述】:
我想编排类似于 unix 管道的 Amazon lambda 函数,但每个函数都将其原始负载(和结果)传递给下一个函数:
charge_customer | send_log | email_customer
charge_customer 通过 API 网关调用。
我曾考虑通过 SNS 实现这一目标:做一个
client_fetch('POST', 'url/to/first_func', payload_including_next_funcs)
然后将first_funcs 的结果放到 SNS 上。
但如果没有第一个 lambda 等待所有其他 lambda 完成,这似乎是不可能的。我也可以让第一个 lambda 调用所有其他的然后返回。
有没有办法实现这样的机制?或者我可以避免在单个 lambda 中包含所有代码,并且仍然通过单个 API 网关往返实现它并且没有 lambda 相互等待的另一种方式?
【问题讨论】:
-
从您的函数名称来看,在我看来
send_log和email_customer并不是发出请求的客户端真正关心的操作。在这种情况下,您可以简单地将send_log和email_customer作为“事件”从charge_customer函数内部调用,然后再从它返回。 -
你可以简单地从functionA中异步调用另一个functionB
-
谢谢两位。 @idbehold,我希望避免使用一些亚马逊内部机制使 lambda 成本增加一倍,但也许这是不可能的。
-
@hnvasa,我会检查一下,也许是一个解决方案 - 由于限制,我似乎无法将最终完成/成功/失败返回给客户。
-
如果您只是想调用 lambda 函数而不等待响应,您可以使用“事件”调用类型。
标签: pipe aws-lambda amazon-sns aws-api-gateway