我似乎無法在文檔中看到明顯的答案。Amazon S3是否將失效信號發送至CloudFront?
當我在S3上更新文件並且啓用了CloudFront時,S3是否向CloudFront發送了無效信號?或者我需要在更新文件後自己發送它?
我似乎無法在文檔中看到明顯的答案。Amazon S3是否將失效信號發送至CloudFront?
當我在S3上更新文件並且啓用了CloudFront時,S3是否向CloudFront發送了無效信號?或者我需要在更新文件後自己發送它?
S3不向CloudFront發送任何失效信息。默認情況下,CloudFront將保存信息,最長時間爲緩存控制標頭指定的最長時間,當從原始數據檢索數據時它會設置此標頭(如果感覺像這樣,它可能會先從緩存中刪除項目)。
您可以通過創建無效批次來使緩存條目無效。這會花費你的錢:每個月的第1000個請求是免費的,但除此之外,它每個請求的成本爲0.005美元 - 如果你每天失去1000個文件,每月需要花費150美元(除非你可以使用通配符功能)。您當然可以使用Amazon Lambda函數來觸發此事件,以響應s3事件。
另一種方法是在對象更改時使用不同的路徑(實際上是世代緩存鍵)。同樣,如果希望cloudfront獲取新副本,則可以將查詢參數追加到url並更改該查詢參數(要執行此操作,您需要告訴CloudFront使用查詢字符串參數 - 默認情況下會忽略它們)。
另一種方式,如果你只是不經常(但很大)的變化是簡單地創建一個新的雲端分佈。
據我所知,所有的CDN都是這樣工作的。
這就是爲什麼您通常使用類似foo-x.y.z.ext
的東西來版本資產在CDN上。我不會使用foo.ext?x.y.z
,因爲某些瀏覽器和代理從不緩存?QUERY_STRING
的資產。
一般來說,你可能要檢查了這一點: https://developers.google.com/speed/docs/best-practices/caching
它包含了大量的最佳實踐和進入細節做什麼,它是如何工作。
關於S3和Cloudfront,我並不是非常熟悉緩存失效,但是馮檢基所說的都是正確的。
有些提供程序還允許您直接清除緩存,但由於CDN的性質,這些更改幾乎不會立即發生。另一種方法是設置較小的TTL(過期標題),以便資產更新更頻繁。但我認爲這也擊敗了CDN的目的。
在我們的案例(Edgecast)中,高速緩存失效是可能的(手動過程)且免費,但我們很少這樣做,因爲我們相應地版本化了我們的資產。
我有一種可怕的感覺,情況是如此。看起來他們錯過了一個功能。你能提供一個參考嗎?還是隻是沒有指定?謝謝。 – Joe
將一個新版本上傳到S3意味着您想清除CloudFront中的緩存是一個錯誤的假設。是的,這可能是你正在尋找的行爲,但是AWS會放任你放棄,這就是你想要的。在很多情況下,我會在CloudFront中將內容緩存,並知道它會根據我的設置過期,並會提前更新S3中的內容。就我而言,自動失效與我想要的相反。 –
不假設,但它似乎是一個有用的參數。 – Joe