【问题标题】:API Gateway caching not calling Lambda functionAPI Gateway 缓存不调用 Lambda 函数
【发布时间】:2017-07-26 15:23:21
【问题描述】:

我正在使用 Amazon API Gateway 在调用 API 终端节点时执行 Lambda 函数。在我的 Lambda 函数中,我正在更新一个 DynamoDB 表。

每当我使用 Chrome 开发者工具在禁用缓存的情况下调用 API 时,DynamoDB 表都会更新。

启用缓存后,来自我的 API 的第一个请求会更新表,随后的每个请求都会快得多,但不会更新表。

我假设 CloudFront 正在缓存响应,以便不必每次都调用 Lambda 函数。

有没有办法强制每个请求都执行 Lambda 函数?

【问题讨论】:

  • 缓存的全部意义在于不调用 Lambda 函数。听起来您实际上并不希望启用缓存。
  • @MarkB 我不想缓存,但是当您添加自定义域名时会自动添加 CloudFront。
  • 啊,我看错了你的问题。首先确保您在 API 设置中禁用了缓存。如果您已禁用该功能,则 CloudFront 不会缓存您的 API 响应。听起来您的实际问题是在浏览器中缓存。您的 API 响应中的 cache-control 标头值是什么?
  • 默认情况下它是缓存控制:私有,当我使用 Chrome 开发者工具时它是缓存控制:无缓存。
  • 是的,如果您想阻止浏览器缓存响应,我认为您需要将 API 网关映射模板配置为始终返回 cache-control: no-cache

标签: amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

几个可能的解决方案:

  1. 只有当你想要缓存时才应该使用 CloudFront。在这种情况下,您不需要它;所以直接从浏览器调用 API 端点而不是调用 CF 端点。这也将节省您的云端成本。

  2. 为每个请求添加一个时间戳。

  3. 如果必须使用 CF;您可以非常轻松地配置它,哪些请求应该始终发送到 API 端点(提供动态内容),而哪些请求应该被缓存。

  4. 您可能正在调用 CF 作为 GET 请求;只需将其设为 POST 即可,它永远不会被缓存。理想情况下,当您更新表时,它应该是一个 POST 请求。这应该是一个简单且正确的解决方案。

【讨论】:

  • 我认为CloudFront是默认添加的,因为即使直接调用API似乎也有同样的问题。
  • 问题是我希望使用 GET 请求调用 API,我正在创建一个由 Lambda 提供支持的简单 URL 缩短应用程序,但我必须使用 API Gateway 才能调用它。如果我告诉 GET 请求向我的 API 发送 POST 请求,它会起作用吗?我试过了,到目前为止还没有用,我不确定是不是因为缓存。
  • 我过去做过。只需使用aws.amazon.com/blogs/compute/…
  • 您是否 100% 确定即使缓存选项不那么精细(设置在舞台级别与特定请求之间),POST 也永远不会被缓存? [在 API 网关设置范围内]
  • @Francis GET 请求不应修改数据(理论上 GET 不应修改日志以外的任何内容),仅用于检索数据。
猜你喜欢
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2018-10-28
  • 2021-02-08
  • 2019-06-03
  • 2019-09-30
相关资源
最近更新 更多