javascript - 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 的范围吗?
解决方案
不确定这是否会有所帮助,但这是我对这个问题的两便士。如果我完全误解了您的问题,请随时告诉我!
AWS SAM 只是为了帮助您将应用程序导入 AWS,确保它会使本地测试在某些情况下更容易/更难,但想法是一样的。
考虑一下,当您使用 2+ lambdas 相互调用时,它们最终应该是函数,因此您认为它们需要是独立可测试的。我如何看待它,您可以考虑以下几种选择:
- 您在 lambda 之间放置一个队列,这样当您有一个 Kinesis 事件触发 Lambda A 进行一些处理时,它可以放置一条消息并使用处理后的数据触发 Lambda B。
- 您可以探索阶跃函数的使用,看看它是否适合您的特定情况。
- 或者最后,您对问题的中间情况确实有效,如果您查看为 Lambdas 列出的事件源,您可以使用 Kinesis,然后如果愿意的话,只需在那里触发另一个 Kinesis 事件。(根据您的用例,这可能是比队列更好的解决方案)
TL;DR:Sam 会做任何其他人已经做过的事情,这是组织你的职能并确保它们不相互依赖的问题。
推荐阅读
- python - Teradata 和 sqlachemy 连接
- java - 如何使用多个条件从集合列表中过滤
- arrays - for循环后数组为空
- ios - 如何根据类类型返回对象?
- google-maps - 更改相机位置时颤动谷歌地图不渲染
- html - 如何通过按钮从 html 生成 jpg?
- c - 导出 .h 定义在 .S 文件中
- slack - 允许用户在已安装的 slack 应用程序中自定义设置
- api - 如何从 Google Apps 脚本将搜索参数加载到 Leankit Post 请求
- ruby-on-rails - 在 rails 中使用 limit 和 offset 以及 updated_at 和 find_each - 这会导致问题吗?