0

挑战

我想用作为智能缓存的 API 网关构建一个简单快速(< 50ms)的 API。对 API 的请求应该根据它们的密钥从 DynamoDB 中批量获取一些项目。但是,如果在 dynamoDB 中找不到一个或多个项目,我想以某种方式触发 lambda 函数,谁知道如何在 dynamoDB 中填充那些丢失的项目以供以后的请求

我的想法

我这样做的方法是仅使用密钥在 DynamoDB 中创建任何缺失的项目,然后使用 DynamoDB 流调用 lambda 函数,该函数读取记录并用来自另一个外部 API 的值填充它们的空白属性。

问题

然而,我的问题是,据我所知,对于 API 网关的每个请求,我只能向 dynamoDB(BatchGetItem 或有条件的 PutItem)发出一个请求。有什么方法可以实现我想要的。

我真的很想使用 API 网关,因为它需要非常积极地扩展,我宁愿不处理服务器和应用程序的扩展。

备择方案

另一种选择是让客户端代码决定响应中缺少哪些项目,然后发送第二个请求以“排队”那些用于填充的项目,但是我真的希望该逻辑不要在客户端进行并且并且还避免了两次网络往返。

我还研究了 dynamoDB 是否能够为我执行这种“查找或创建”行为——但似乎没有运气:可以触发什么事件来触发 DynamoDB 中的 lambda 函数?

4

1 回答 1

0

如果您的 API Gateway 端点调用 Lambda 函数(而不是做一个无论如何都不是干净 API 的 DynamoDB 代理),那么您可以运行任何您想要的代码。每当 API 网关调用触发 Lambda 函数时,您可以根据需要对 DynamoDB 和其他服务进行任意次数的调用。唯一的限制是您的 Lambda 函数可以运行的时间量。

于 2017-10-25T16:05:05.523 回答