View a markdown version of this page

透過快取標籤使內容失效 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

透過快取標籤使內容失效

Amazon CloudFront 支援標籤失效,可讓您根據語意標籤而非 URL 路徑使快取的物件失效。這可讓您靈活控制快取失效,而不需要 URL 結構與您的失效策略相符。

標籤失效的運作方式

  1. 設定分佈:將 CacheTagConfig新增至分佈,指定原始伺服器用來傳回快取標籤的 HTTP 標頭名稱。

  2. 原始伺服器的標籤物件:當傳回您要使用標籤快取的物件時,請將原始伺服器設定為在具有逗號分隔標籤值的 HTTP 回應中包含指定的標頭。

    HTTP/1.1 200 OK Content-Type: text/html x-amz-meta-cache-tag: product:electronics, category:tv, brand:example Cache-Control: max-age=3600
    注意

    對於 S3 原始伺服器,您可以將快取標籤連接至 S3 物件做為中繼資料。您可以使用您選擇的索引鍵 (例如: cache-tag) 來新增中繼資料項目,並以逗號分隔的標籤清單做為值 (例如:product:electronics, category:tv, brand:example)。

    S3 會將物件中繼資料視為字首為 的回應標頭 x-amz-meta-<Key>,因此 的中繼資料金鑰cache-tag會傳回為x-amz-meta-cache-tag標頭。您可以在 HeaderNameCacheTagConfig將 設定為 x-amz-meta-cache-tag,以啟用傳送失效至這些標籤。

    注意

    或者,您可以將原始伺服器回應 Lambda@Edge 函數連接至快取行為,以新增快取標籤標頭。如果使用 Lambda@Edge,標頭名稱不需要遵循 x-amz-meta-<Key> 格式。

  3. 依標籤失效:使用具有 #字首的 CreateInvalidation API,使具有指定標籤快取的所有物件失效。

    aws cloudfront create-invalidation \ --distribution-id distribution_ID \ --paths "#product:electronics"

    這會使包含標籤 的所有快取物件失效 product:electronics,無論其 URL 路徑為何。

標籤格式要求

原始伺服器回應標頭值:

  • 標籤在標頭值中以逗號分隔。

  • 每個標籤前後的空格都會修剪。

  • tag1,tag2,tag3 和 皆tag1, tag2, tag3有效且同等。

個別標籤值:

  • ASCII 可見字元 (33–126)

  • 沒有控制字元、空格或逗號

  • 不區分大小寫

  • 每個標籤最多 256 個字元

  • 每個物件最多 50 個標籤 (忽略其他標籤)

設定標籤失效的分佈

若要啟用標籤失效,請將 CacheTagConfig 新增至您的分佈組態:

aws cloudfront create-distribution \ --distribution-config '{ "CallerReference": "my-distribution", "CacheTagConfig": { "HeaderName": "x-amz-meta-cache-tag" }, "DefaultCacheBehavior": { "TargetOriginId": "myOrigin", "ViewerProtocolPolicy": "redirect-to-https", "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6" }, "Origins": { ... }, "Enabled": true, "Comment": "Distribution with tag support" }'

建立標籤失效

使用 --paths 參數中的 # 字首來指定標籤:

# Invalidate all objects tagged with "user1" aws cloudfront create-invalidation \ --distribution-id distribution_ID \ --paths "#user1" # Invalidate objects matching any of multiple tags (OR logic) aws cloudfront create-invalidation \ --distribution-id distribution_ID \ --paths "#user1" "#product-category:electronics" # Mix path and tag invalidations in one batch aws cloudfront create-invalidation \ --distribution-id distribution_ID \ --paths "/index.html" "#user1" "/images/*" "#product-category:electronics"

檢查失效狀態

使用 GetInvalidation 檢查狀態。回應包含路徑和標籤項目:

aws cloudfront get-invalidation \ --distribution-id distribution_ID \ --id invalidation_ID

重要考量

  • 需要選擇加入:標籤失效僅適用於已CacheTagConfig設定的分佈。沒有此組態的分佈會忽略來自原始伺服器的快取標籤標頭。

  • 標籤處理限制:CloudFront 最多處理每個快取物件 50 個標籤。如果原始伺服器回應包含超過 50 個標籤,則不會儲存超出限制的其他標籤。

  • 變更標頭名稱:會根據目前的CacheTagConfig組態查詢標籤失效。如果您在 HeaderName中變更 CacheTagConfig,則對以舊標頭名稱下的標籤快取的物件發出的失效將不再進行評估。如果您需要變更標頭名稱,請開始在物件中同時傳回新的和舊的快取標籤標頭,然後發出路徑失效 (例如,/*) 或使現有標籤失效,再變更標頭名稱以避免提供過時的內容。完成後,您就可以停止傳送舊的快取標籤標頭與物件。

  • 移除 CacheTagConfig:當您 CacheTagConfig從分佈中移除 時,CloudFront 會停止從原始伺服器回應擷取標籤。具有標籤的現有快取物件會正常提供,直到它們過期或因路徑而失效為止。

  • 回溯相容性:現有的路徑和萬用字元失效會繼續保持不變。標籤失效是累加的 - 您可以在相同的分佈上使用這兩種方法。

  • 分發租用戶:透過 CreateInvalidationForDistributionTenant API 分發租用戶也支援標籤失效。

使用案例範例

範例 1:電子商務產品目錄

電子商務網站標籤使用產品、類別和品牌快取產品頁面:

x-amz-meta-cache-tag: category:electronics, brand:acme, product:12345

當 ACME 更新其品牌時, 會立即使所有 ACME 產品失效:

aws cloudfront create-invalidation \ --distribution-id distribution_ID \ --paths "#brand:acme"

範例 2:使用者產生的內容平台

平台使用擁有者的使用者 ID 標記快取的內容:

x-amz-meta-cache-tag: user:12345, content-type:image

當使用者關閉其帳戶時,請在從原始伺服器移除其所有內容後將其失效:

aws cloudfront create-invalidation \ --distribution-id distribution_ID \ --paths "#user:12345"

範例 3:內容版本控制

CMS 會使用版本識別符來標記內容:

x-amz-meta-cache-tag: version:v2, template:homepage

部署新版本時,使所有 v2 內容失效:

aws cloudfront create-invalidation \ --distribution-id distribution_ID \ --paths "#version:v2"