0

我通過將資產推送到AWS S3並通過CloudFront提供文件來部署單頁應用程序網站。根據this answer,我不可能在自己的域下使用SSL直接從S3提供文件,所以如果我想以這種方式提供文件,我沒有選擇使用CloudFront的選擇。AWS CloudFront根對象更新延遲

當我重新部署時,我生成一個新的有時間戳的根HTML文件(它本身鏈接到更新的JS和CSS包),將它與其他所有內容一起推送到S3,然後使該新文件成爲新的默認根對象用於通過AWS的CloudFront分配。這可以防止CloudFront緩存所有內容並隱藏更新。

問題是,有時CloudFront需要很長時間來更新根對象。在我寫這篇文章的時候,我每隔60秒就會刷新一次,等待重要的改變來實現產量。 CloudFront通過Web控制檯顯示正確(最新)的根對象,但它也顯示「狀態:進行中」。

有時,這種延遲幾乎沒有引人注意,而其他時間則相當長。今天它接近一個小時的延遲。

我該如何避免這種情況?我願意對使用S3和CloudFront的這種部署方法進行更改,或者切換到已知可更好地處理此用例的替代平臺。

+0

更改根對象後,在'/'上執行緩存失效。更改根對象不會刪除緩存中對'/'的舊請求。 –

+0

有趣的邁克爾,我會試試看。謝謝! –

回答

0

這就是我解決它的方法。

在雲端啓用緩存值爲0秒。 我也注意到瀏覽器緩存文檔服務。

我不得不HTTP頭的對象到期添加到S3存儲服務於每一個對象不緩存,

Cache-Control: no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: 0 

文檔:

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html

如果緩存設置爲長時間並想從CloudFront中刪除緩存,則可以對根對象執行無效操作。

希望它有幫助。