我正在开发一个iOS应用程序,它允许用户更新和更改他们的头像,其中图像存储在子目录中的S3中,具体取决于他们的用户ID。例如:" /1005/avatar_3dseuori.jpg"。
我已设置cloudfront来分发存储在我的S3存储桶中的这些图像,但是我得到以下响应:
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
即使图像存在于我的存储桶中。如果我等待~5分钟,我就可以使用我的云端来源查看图像了。这是通常的等待期吗?
答案 0 :(得分:2)
CloudFront充当S3源的前端缓存。
当你从CloudFront请求图像时,它会检查它的缓存,如果缓存中不存在(并且根据配置的TTL没有过期),那么它才会从S3源存储桶请求图像
如果您在S3中存在图像之前从CloudFront请求图像,则CloudFront将缓存NoSuchKey
结果。这是因为该对象实际上还不存在于S3中。
将文件上传到S3后,CloudFront将继续使用缓存的NoSuchKey
值进行响应,直到配置的生存时间到期为止。在你的情况下,这可能是“5分钟”。在那段时间之后,它会从S3重新请求图像,这次是肯定的结果。
要避免此问题,请确保阻止对不存在的图像的CloudFront请求。