【问题标题】:How to invalidate CloudFront cache of dynamic content when content is updated如何在内容更新时使动态内容的 CloudFront 缓存无效
【发布时间】:2018-09-17 04:59:22
【问题描述】:

我正在使用 AWS Lambda、API Gateway 和 CloudFront 开发 Web API。
CloudFront 目前被用作 API Gateway 某些端点的反向代理,缓存行为完全被禁用。

有几个经常使用的 API,其中的内容很少更新(例如每周一次或每月一次),因此可以缓存以加快响应时间。

但是,我想知道在更新内容时如何使 经常使用但很少更新动态内容的 CloudFront 缓存无效。
我的观察是 CloudFront 保存旧内容的缓存,因为 CloudFront 不会将请求传递到 API 源,直到缓存达到 max-age。

例如:假设我有一个 GET /projects/PROJECT_ID/members API。
项目成员很少更新,但一旦通过PUT /projects/PROJECT_ID/members API 添加/删除成员,缓存应失效以传递项目成员的最新更新内容。

我是否应该在每次更新其内容(调用PUT /projects/ABC/members)后使用invalidation API 使非常特殊的URL(上述示例为/projects/ABC/members)无效?
或者,我应该避免缓存这些动态内容吗?

【问题讨论】:

    标签: caching amazon-cloudfront aws-api-gateway


    【解决方案1】:

    你有两个选择:

    1-每次有人编辑您的成员列表时调用失效 API。 例如,如果有人添加/删除/编辑成员列表(不是获取请求),您应该调用 Cloudfront 中的失效 API 并使路径失效

    /projects/PROJECT_ID/members

    2-控制你的API端的缓存,有时你也可以设置一些资源的头部缓存在Cloudfront中。

    有关 CloudFront 失效 API 的更多信息,请查看以下链接

    https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html

    【讨论】:

    • 谢谢。您能否在上面的示例中添加更多详细信息,可以使用哪些类型的 HTTP 标头来控制动态内容的缓存行为?
    • 您可以使用 max-age 和 Cache-Control 标头,更多详细信息请阅读以下文档docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…
    • 如果我理解正确,CloudFront 不会使缓存失效,直到缓存通过此类 HTTP 标头达到源指定的最大期限。如果可能,我想知道如何通过 HTTP 标头强制 CloudFront 使缓存无效。
    【解决方案2】:

    有多种处理方法:

    1. CloudFront 缓存失效。
      如果您使用 S3 作为源,那么您可以在 lambda 函数上创建一个 S3 事件。如果 S3 发生更改,此 lambda 将自动使 CloudFront 缓存失效。

    2. 使用像 Min. TTL,最大。 TTL 或默认 TTL,用于定义在 CloudFront 调用源之前您希望这些对象缓存多长时间。

    3. 对您的对象使用对象版本控制。因此,CloudFront 每次都会获取最新版本的对象。

    可以参考 CloudFront 文档以获取有关这些的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-20
      • 2023-03-26
      • 2012-02-26
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      相关资源
      最近更新 更多