【问题标题】:Troubleshoot DynamoDB to Elastic Search排查 DynamoDB 到 Elastic Search 的问题
【发布时间】:2021-09-03 03:47:41
【问题描述】:
假设我在 DynamoDB 上有一个数据库,我目前正在使用流和 lambda 函数将该数据发送到 Elasticsearch。
事情是这样的,假设数据已成功保存在 DynamoDB 上,有没有办法让我 100% 确定数据也已保存在 Elasticsearch 上?
考虑到我有一个函数可以在 DDB 上保存该数据,有没有办法让我在返回状态代码答案之前与 DDB 触发的 lambda 函数进行通信,这样我就可以在返回之前收到确认?
我想这样做是为了同时从我的函数和 lambda 函数返回 ok。
【问题讨论】:
标签:
node.js
amazon-web-services
elasticsearch
aws-lambda
amazon-dynamodb
【解决方案1】:
这看起来不是解决此问题的正确方法。我们通常将 DynamoDB Streams + Lambda 用于本质上是异步的操作,并且当我们不必将此 Lambda 执行的状态传达给客户端时。
所以我建议以下两种最接近您想要实现的方法-
-
使操作完全同步。即,在同一个调用中执行 DynamoDB 插入和 ElasticSearch 插入(没有任何 Ddb Stream 和 Lambda 触发器)。这将确保您将两次写入的正确状态返回给客户端。此外,如果 ES 插入失败,您可以选择恢复 Ddb 写入,然后将完整状态返回为失败。
-
第一种方法显然增加了函数的延迟。所以你可以继续你原来的方法,但要让客户知道。它将按如下方式工作 -
- 客户端调用您的 API。
- API 将记录插入 Ddb 并返回给客户端。
- 客户端收到状态并向用户显示一条消息,表明他们的请求正在处理中。
- 然后客户端开始通过另一个 API 轮询 ES 插入的状态。
- 同时,Ddb流触发ES insert Lambda fn,完成ES写入。
- 客户端上的轮询器获知成功插入 ES 并向用户显示最终成功消息。