如何在更新内容时使动态内容的CloudFront缓存无效

时间:2018-04-07 07:41:24

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

我正在使用AWS Lambda,API Gateway和CloudFront开发Web API CloudFront当前用作API网关的某些端点的反向代理,根本禁用缓存行为。

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

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

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

我是否应该在每次更新内容(/projects/ABC/members后)时使用invalidation API使特定网址(PUT /projects/ABC/members)失效?{
> 或者,我应该避免缓存这样的动态内容吗?

2 个答案:

答案 0 :(得分:0)

您有两种选择:

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

/项目/ PROJECT_ID /成员

API端的2-Control缓存,您也可以为某些资源设置标头,以便在Cloudfront中缓存。

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

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

答案 1 :(得分:0)

有多种处理方法:

  1. CloudFront缓存无效。
    如果您使用S3作为原点,则可以在lambda函数上创建一个S3事件。如果S3中有更改,此lambda将自动使CloudFront缓存无效。

  2. 使用像Min这样的缓存头。 TTL,最大值TTL或默认TTL,用于定义在CloudFront调用原始对象之前,您希望这些对象在缓存中保留多少时间。

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

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