如何使AWS APIGateway缓存无效

时间:2018-07-05 15:29:30

标签: amazon-web-services caching amazon-dynamodb aws-api-gateway

我们有一项将inserts转换为dynamodb某些值的服务。出于这个问题,我们假设它的key:value对,即customer_id:customer_email。插入不会经常发生,一旦插入完成,该特定密钥就不会更新。

我们所做的是创建一个客户端库,该客户端库随customer_id一起提供,将从customer_email中提取dynamodb

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

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

3 个答案:

答案 0 :(得分:1)

我们已经构建了一个Lambda,它负责以更新的结果重新填充缓存。这是一个相当手动的过程,几乎没有可重复使用的代码,但是可以正常工作。

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

不幸的是,如果您有一个带有服务器端分页表的View,您将面临各种各样的问题,因为仅使/books无效是不可能的,因为实际上您可能拥有/books?page=2,{{1 }}等等。。。一场噩梦!

我相信APIG应该允许对缓存条目进行更精细的控制,否则就不会涉及许多用例。如果他们允许为每个请求选择根/books?page=3就足够了,这样我们就可以按组而不是按单个请求来管理缓存条目(恕我直言,这种情况也不常见)。

答案 1 :(得分:0)

您看到这个https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html吗? 有一种方法可以使整个缓存或特定的缓存条目无效

答案 2 :(得分:0)

您必须使用Cache-Control: max-age=0标头向api端点发送一个签名的请求

如果对人们有用,请使用以下.NET代码创建请求:

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

相关问题