我使用 Amazon CloudFront 提供儲存在 Amazon Simple Storage Service (Amazon S3) 中的物件。我已更新 Amazon S3 中的物件,但我的 CloudFront 發佈項目仍提供這些檔案的舊版本。
簡短說明
根據預設,CloudFront 會將來自 Amazon S3 的回應快取 24 小時 (預設 TTL 為 86,400 秒)。如果您的請求送達的邊緣節點曾在過去 24 小時內提供 Amazon S3 回應,CloudFront 就會使用快取的回應。即使您已更新 Amazon S3 中的內容,也會發生這種情況。
若要從 CloudFront 推送更新後的 Amazon S3 內容,請使用以下其中一種方法:
解決方法
使 Amazon S3 物件失效
您可以使 Amazon S3 物件失效,將其從 CloudFront 發佈項目的快取中移除。從快取中移除物件後,下一個請求會直接從 Amazon S3 擷取物件。
注意:
- 您無法使使用 Cookie 或標頭來改變回應的特定物件版本失效。在這種情況下,CloudFront 會使該物件的所有版本失效。
- 每個 AWS 帳戶每月可免費使用 1,000 個失效路徑。如需更多資訊,請參閱 Amazon CloudFront 定價。
建立失效操作時,請確定物件路徑符合以下需求:
- 物件路徑必須指向個別物件,或必須以萬用字元 (*) 結尾。例如,您無法針對類似 /images/*.jpeg 的路徑執行失效操作。這是因為該路徑並未指向個別物件,也未以萬用字元結尾。
- 指定路徑的大小寫必須與物件路徑完全相符。失效請求會區分大小寫。
- 若要根據查詢字串移除特定物件版本,請在失效路徑中加入查詢字串參數。
物件失效通常需要 10-100 秒才能完成。若要檢查失效操作的狀態,請在 CloudFront 主控台中檢視您的發佈項目。
使用檔案版本控制
如果您經常更新內容,最佳實務是使用檔案版本控制來清除 CloudFront 發佈項目的快取。如果經常重新整理快取,檔案版本控制的成本可能低於失效操作。
若要使用檔案版本控制,請完成以下步驟:
- 將物件的新版本儲存在原始伺服器上,並在索引鍵名稱中加入版本號碼。例如,如果您更新 /image_v1.png,請將物件的新版本儲存為 /image_v2.png。
- 更新原始伺服器上的物件,但依據包含檔案版本的查詢字串進行快取。例如,查詢字串會從 /image.png?ver=1 更新為 /image.png?ver=2。您可以使用快取政策,指定要將哪些查詢字串納入快取索引鍵與原始伺服器請求。
注意: 只要 CloudFront 快取中仍提供舊版本 (/image.png?ver=1),您仍可請求該版本。
請考量各種檔案版本控制方法的以下優缺點:
- 您可以將物件的新版本儲存在原始伺服器上,以便回復變更,改用仍能透過舊名稱取得的先前版本。不過,如果您儲存物件的多個版本,儲存成本可能會增加。
- 在原始伺服器上更新物件並依據查詢字串進行快取,可降低儲存成本。為因應任何回復需求,最佳實務是離線保留先前的檔案版本。
注意: 指定的版本化檔案名稱或目錄名稱與 S3 版本控制無關。S3 版本控制不會自動更新內容。請確定您正確指定檔案路徑,因為失效請求一旦開始就無法取消。
相關資訊
管理內容保留在快取中的時間 (到期)
查詢字串轉送與快取