首页 > 解决方案 > AWS SAM - 调用了测试 lambda,创建了测试 kinesis 事件

问题描述

我正在调查是否可以在我正在处理的应用程序的上下文中使用 AWS SAM。

基本上应用程序的结构是你有这样的东西:

[kinesis event] -> [my lambda] -> [invokes another lambda]

或者

[kinesis event] -> [my lambda] -> [creates a different kinesis event]

或者

[another lambda] => [invokes my lambda] => [invokes yet another lambda]

所以我希望能够编写一些测试,例如:

Given that I invoke myLambda with data ABC,
 then I expect otherLambda to have been invoked with DEF. 

或者

Given that I put event ABC on the kinesis stream,
 then I expect that myLamdba was executed,
 and I expect that it put event DEF on the kinesis stream

虽然我可以看到在本地调用 lambdas 的所有功能,但我看不到任何关于对被调用的其他 lambdas 进行断言等的功能。

这超出了 AWS SAM 的范围吗?

标签: javascripttestingaws-lambdaamazon-kinesisaws-sam

解决方案


不确定这是否会有所帮助,但这是我对这个问题的两便士。如果我完全误解了您的问题,请随时告诉我!

AWS SAM 只是为了帮助您将应用程序导入 AWS,确保它会使本地测试在某些情况下更容易/更难,但想法是一样的。

考虑一下,当您使用 2+ lambdas 相互调用时,它们最终应该是函数,因此您认为它们需要是独立可测试的。我如何看待它,您可以考虑以下几种选择:

  • 您在 lambda 之间放置一个队列,这样当您有一个 Kinesis 事件触发 Lambda A 进行一些处理时,它可以放置一条消息并使用处理后的数据触发 Lambda B。
  • 您可以探索阶跃函数的使用,看看它是否适合您的特定情况。
  • 或者最后,您对问题的中间情况确实有效,如果您查看为 Lambdas 列出的事件源,您可以使用 Kinesis,然后如果愿意的话,只需在那里触发另一个 Kinesis 事件。(根据您的用例,这可能是比队列更好的解决方案

TL;DR:Sam 会做任何其他人已经做过的事情,这是组织你的职能并确保它们不相互依赖的问题。


推荐阅读