為什麼 CloudFront 會從 Amazon S3 提供過時的內容?

1 分的閱讀內容
0

我正在使用 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 的路徑上執行失效,因為路徑不適用個別物件,且結尾不是萬用字元。
  • 指定的路徑必須完全符合物件路徑的大小寫。失效請求會區分大小寫。
  • 要根據查詢字串移除物件的特定版本,請在失效路徑中加入 QueryString

完成物件失效通常需要 10 到 100 秒的時間。您可以從 CloudFront 主控台檢視您的分佈,以檢查失效狀態。

使用物件版本控制

如果您經常更新內容,最佳實務是使用物件控制本功能以清除 CloudFront 分佈的快取。針對頻繁的快取重新整理,請使用物件版本控制的成本可能會比使用失效低。

使用下列其中一種方式,新增物件版本控制:

  • 將新版本物件儲存在原始位置,並在索引鍵名稱上新增版本號碼。例如,如果您更新 /image_v1.png,則會將新版本物件儲存為 /image_v2.png
  • 在原始位置更新物件,但根據物件版本的查詢字串快取。例如,將查詢字串從 /image.png?ver=1 更新為 /image.png?ver=2。您可以使用快取政策,以指定快取索引鍵和原始位置請求中包含的查詢字串。
    注意:您仍然可以請求之前的版本 (/image.png?ver=1),同時仍可以在 CloudFront 快取使用。

考慮物件版本控制每種方法的優點和缺點:

  • 在原始位置 (Amazon S3) 儲存物件的新版本,可以讓您還原之前版本的變更,而這些變更仍然使用之前的名稱。不過,儲存多種版本的物件可能會增加儲存成本。
  • 在原始位置更新物件,但根據查詢字串快取可以降低儲存成本。不過,要準備任何回復,最佳實務是離線保留之前的物件版本。

**注意:**指定版本控制的檔案名稱或目錄名稱與 Amazon S3 物件版本控制無關。使用 Amazon S3 版本控制功能不會自動更新內容。您必須謹慎指定檔案路徑,因為啟動之後,您就無法取消失效請求。

相關資訊

管理內容在快取中停留的時間長度 (到期)

查詢字串轉送和快取

AWS 官方
AWS 官方已更新 1 年前