AWS CloudFront 和 S3:如何使新的 S3 内容立即在 CloudFront 中可用?

4
我有一个AWS Simple Storage Service (S3) bucket,已经设置为AWS CloudFront CDN distribution的来源。

当新上传到S3 bucket中的图片(大小<50k)从S3资源请求时,几乎可以立即使用,但是从CloudFront资源请求时需要超过10分钟。

一旦图片在CloudFront中可用,它们会很快加载。问题在于这些图片似乎需要很长时间才能在CloudFront中变得可用。

我将Min、Max和Default的TTL都降低到了0,但没有明显的改变。

  • 这个情况是否正常?

  • 有什么方法可以加快速度吗?

谢谢!


1
无效化对象 - http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html - user933161
@Igor 这怎么适用呢?我所指的“新S3内容”不是“更新”的图像,而是从未存在于存储桶或分发中的全新图像。我的先前理解以及从文章中获得的理解将失效定义为从CloudFront中删除资源,以便可以再次从源中提取。 - LWSChad
1
我倾向于认为这是在AWS CloudFront和S3中,如何使新的S3内容立即在CloudFront中可用的重复问题。如果您的错误缓存TTL没有设置为0,那么这将是您的问题所在。 - Michael - sqlbot
完成了!抱歉出现了重复,我按照 Stack 建议的每个链接都尝试了一遍,但这个链接没有列出来。 - LWSChad
1个回答

0

是的,这是预期的 - 不幸的是你不能做太多事情。

正如@igor所说,你可以对对象进行无效操作。我不确定这是否会加速它,但你可以尝试一下。你可以通过设置从S3到Lambda的事件并调用CloudFront来使该对象失效,或者你可以与你正在进行的上传调用并行调用它 - 使用Lambda解耦更好,但无论如何都可以。

显然,所有传输到S3的文件都必须通过S3可用,当你在上面放置CloudFront层时不要限制存储桶访问。如果你想要更快的“直接到S3”的请求,也可以启用加速传输,但如果你使用CloudFront则没有影响。

我建议进行故障转移调用,内容如下:

function getFromS3()
    serveFileToUser()

function getFromCloudFrontEndpoint()
    if !exists
        getFromS3()
    else
        serveFileToUser()

谢谢!我会尝试类似的东西。 - LWSChad
1
这不是正确的。评论表明问题是关于对象的。在正确的配置下没有理由期望任何延迟。*"始终将CloudFront视为一个事件一致性环境。它必须在全球范围内运行这些文件。"* 不。CloudFront不会将内容推送到任何地方。CloudFront是一个拉取式缓存。当您通过边缘请求对象时,边缘将实时从源拉取内容--除非该内容已经由先前的请求(并且未过期)在该边缘上缓存--并返回它。 - Michael - sqlbot
1
此外,S3传输加速在这里没有影响。从文档中并不明显,但是S3传输加速功能实际上是由S3完成的,对用户来说是不可见的,使用地理DNS将请求在CloudFront基础设施之间路由(但不缓存)。通过其基础设施两次运行请求,CloudFront不会受益。 - Michael - sqlbot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接