2017-06-05 49 views
0

我正在開發一個iOS應用程序,該應用程序將允許用戶更新和更改其圖像在子目錄中的存儲位置,具體取決於其用戶標識。例如:「/1005/avatar_3dseuori.jpg」。將圖像上傳到s3「沒有這樣的密鑰」時出現Cloudfront錯誤

我已經設置CloudFront的分佈存儲在我的S3存儲桶這些圖片,但我得到如下回應:

<Code>NoSuchKey</Code> 
<Message>The specified key does not exist.</Message> 

即使在我的水桶中存在的形象。如果我等待大約5分鐘,那麼我可以使用我的雲端來源查看圖像。這是通常的等待期嗎?

回答

2

CloudFront充當S3起點的前端緩存。

當您從CloudFront請求圖像時,它會檢查它的緩存,如果它不存在於緩存中(並且尚未根據配置的TTL過期),只有這樣纔會請求來自S3原點的圖像桶。

如果您在S3中存在映像之前向CloudFront請求映像,則CloudFront將緩存NoSuchKey結果。這是因爲該對象實際上在S3中還不存在。

將文件上傳到S3後,CloudFront將繼續響應緩存的NoSuchKey值,直到配置的生存時間到期。在你的情況下,這可能是「5分鐘」。在這段時間之後,它會重新請求來自S3的圖像,這次會產生積極的結果。

要避免此問題,請確保您阻止向CloudFront請求不存在的圖像。

+0

很好的解釋。非常感謝你。 – Dayna

+0

正如馬特所暗示的那樣,您可以重新配置CloudFront緩存錯誤的時間(搜索'錯誤緩存最小TTL'),但減少TTL的缺點是更多錯誤的請求可能會觸發原點。 – jarmod

+0

我會說這是[Amazon CloudFront Latency](https://stackoverflow.com/a/35541525/1695906)(我在這裏解釋5分鐘窗口的原因和解決方案)的副本,但是我的[S3 golden dupe hammer ](https://stackoverflow.com/help/badges/6680/amazon-s3)只允許我單方面做到這一點,我不想給我這樣一種印象,即我很小心,並且以我自己的答案。 @MattHouser你反對嗎? –

相關問題