amazon-web-services - 在 AWS lambda 中,提取、转换、聚合和写入 DynamoDB 的最佳方法是什么
问题描述
我想获得在以下用例中使用 AWS 服务的第二个选项:
- 客户端调用 lambda 函数并将
Invoice
记录写入 DynamoDB (InvoiceTbl
) - 在 中
Invoice
, 有 一个bills
存储 为 json 属性的 集合[{bill1, bill2, bill3}]
—— 我 想 将 它们 拆分 并 单独 写入BillTbl
,只有 当状态Invoice's
被 标记 为 已支付时 . - 如果
Invoice
是Paid,我还想汇总金额并将其更新为InvoiceTotalTbl
当然,直接的方法是在 lambda 函数中执行它们。但是,我想解耦2 and 3
到另一个过程。我在想:
设计一
- 使用
DynamoDB Stream
onInvoiceTbl
触发另一个 lambda 函数 - 在那个 lambda 函数中,检查
Invoice
状态是否为Paid,然后执行2 and 3
设计二
- 在 lambda 函数中,如果
Invoice
状态为Paid,则将其添加到SQS
- 然后
SQS
会调用一个 lambda 函数来做2 and 3
缺点
SQS
有效负载限制为 256 KB
设计 3
- 利用
Step Function
- 一旦
Invoice
状态转换为已付款,它会做2 and 3
缺点
Step Function
很贵(成本方面)
设计 1在速度方面似乎很好 -2 and 3
可以快速执行而没有太多延迟。但我不喜欢它每次都被触发的想法。只有在状态为Paid2 and 3
时才应该触发,而且恐怕随着时间的推移,成本会很昂贵Invoice
对于我的特定用例,我应该寻找其他更好的设计/aws 服务吗?
谢谢。
解决方案
推荐阅读
- kubernetes - gcsfuse 在 GKE 和/或 python3 boto 中安装存储桶以进行流式写入?
- linux - 逐个搜索目录(以及任何子目录)中的每个文件
- php - 使用 ID 基于 php 参数执行 2 个 DB2 合并
- javascript - 用于多个用户模型的环回护照-facebook
- video-streaming - 为什么H265解码器要等几十帧数据才能开始解码?
- javascript - 避免 Google Maps API(localhost) 的请求问题
- laravel-nova - 如何限制 Trix 字段中上传的 MIME 类型?
- javascript - HTML 元素和画布
- jestjs - 如何在 jest-puppeteer 中运行特定的测试套件
- centos - 错误登录尝试后 Cent OS 断开连接