如何使 AWS APIGateway 缓存无效

Em *_* Ae 5 caching amazon-web-services amazon-dynamodb aws-api-gateway

我们有一个服务,其中inserts转化为dynamodb某些价值。为了这个问题,让我们说它的key:value对,即customer_id:customer_email。插入不会经常发生,一旦插入完成,该特定键就不会更新。

我们所做的就是创建它,提供了客户端库customer_id将获取customer_emaildynamodb

鉴于customer_id数据是静态的,我们的想法是将缓存添加到表中,但我们不确定在以下用例中会发生什么

  1. client_1使用我们的库来获取customer_emailcustomer_id = 2
  2. 客户不存在所以api网关返回 not found
  3. APIGateway 将缓存此响应
  4. 对于任何后续调用,将发送此缓存的响应
  5. 现在另一个系统插入customer_id = 2了它的电子邮件 ID。该系统不知道此响应之前是否已缓存。它甚至不知道任何其他系统已获取此特定数据。customer_id当它被插入到 dynamo 中时,我们如何使这个特定的缓存无效

Lee*_*unn 5

您可以将请求发送到 API 端点,并带有Cache-Control: max-age=0将导致其刷新的标头。

这可能会使您的应用程序容易受到攻击,因为坏人可以简单地用大量流量淹没昂贵的端点并破坏您的服务器/数据库。为了防止这种情况,最好使用签名请求

如果它对人们有用,这里是 .NET 代码来创建签名请求

https://gist.github.com/secretorange/905b4811300d7c96c71fa9c6d115ee24


Alb*_*rta 5

我们构建了一个 Lambda,它负责用更新的结果重新填充缓存。这是一个相当手动的过程,可重用的代码很少,但它确实有效。

Lambda 由应用程序本身根据应用程序需求触发。例如,在 CRUD 操作中,在特定资源上成功执行 POST、PATCH 和 DELETE 时会触发 Lambda,以清除一般 GET 请求(即成功GET /books时清除POST /book)。

不幸的是,如果您有一个带有服务器端分页表的视图,您将面临各种各样的问题,因为无效/books是不够的,因为您实际上可能有/books?page=2/books?page=3等等......一场噩梦!

我相信 APIG 应该允许对缓存条目进行更精细的控制,否则许多用例都不会被涵盖。如果他们允许cache group为每个请求选择一个根就足够了,这样我们就可以按组而不是按单个请求管理缓存条目(恕我直言,这也不太常见)。


Vis*_*hal 1

您看过这个https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html吗?有办法使整个缓存或特定缓存条目无效

  • 是的,我做到了,这也有同样的问题。**客户端**可以使缓存失效。现在,客户如何知道他们需要**使案件无效**?这就是我们目前所面临的问题。 (3认同)