

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

# 透過快取標籤使內容失效
<a name="invalidation-by-tags"></a>

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

## 標籤失效的運作方式
<a name="invalidation-by-tags-how-it-works"></a>

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

1. **原始伺服器的標籤物件**：當傳回您要使用標籤快取的物件時，請將原始伺服器設定為在具有逗號分隔標籤值的 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`標頭。您可以在 ` HeaderName`中`CacheTagConfig`將 設定為 ` x-amz-meta-cache-tag`，以啟用傳送失效至這些標籤。
**注意**  
或者，您可以將原始伺服器回應 Lambda@Edge 函數連接至快取行為，以新增快取標籤標頭。如果使用 Lambda@Edge，標頭名稱不需要遵循 `x-amz-meta-<Key>` 格式。

1. **依標籤失效**：使用具有 `#`字首的 ` CreateInvalidation` API，使具有指定標籤快取的所有物件失效。

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

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

## 標籤格式要求
<a name="invalidation-by-tags-format"></a>

 **原始伺服器回應標頭值：**
+ 標籤在標頭值中以逗號分隔。
+ 每個標籤前後的空格都會修剪。
+ `tag1,tag2,tag3` 和 皆`tag1, tag2, tag3`有效且同等。

 **個別標籤值：**
+ ASCII 可見字元 (33–126)
+ 沒有控制字元、空格或逗號
+ 不區分大小寫
+ 每個標籤最多 256 個字元
+ 每個物件最多 50 個標籤 （忽略其他標籤）

## 設定標籤失效的分佈
<a name="invalidation-by-tags-configuring"></a>

若要啟用標籤失效，請將 `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"
  }'
```

## 建立標籤失效
<a name="invalidation-by-tags-creating"></a>

使用 `--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"
```

## 檢查失效狀態
<a name="invalidation-by-tags-checking-status"></a>

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

```
aws cloudfront get-invalidation \
  --distribution-id {{distribution_ID}} \
  --id {{invalidation_ID}}
```

## 重要考量
<a name="invalidation-by-tags-considerations"></a>
+ **需要選擇加入**：標籤失效僅適用於已`CacheTagConfig`設定的分佈。沒有此組態的分佈會忽略來自原始伺服器的快取標籤標頭。
+ **標籤處理限制**：CloudFront 最多處理每個快取物件 50 個標籤。如果原始伺服器回應包含超過 50 個標籤，則不會儲存超出限制的其他標籤。
+ **變更標頭名稱**：會根據目前的`CacheTagConfig`組態查詢標籤失效。如果您在 `HeaderName`中變更 `CacheTagConfig`，則對以舊標頭名稱下的標籤快取的物件發出的失效將不再進行評估。如果您需要變更標頭名稱，請開始在物件中同時傳回新的和舊的快取標籤標頭，然後發出路徑失效 （例如，`/*`) 或使現有標籤失效，再變更標頭名稱以避免提供過時的內容。完成後，您就可以停止傳送舊的快取標籤標頭與物件。
+ **移除 CacheTagConfig**：當您` CacheTagConfig`從分佈中移除 時，CloudFront 會停止從原始伺服器回應擷取標籤。具有標籤的現有快取物件會正常提供，直到它們過期或因路徑而失效為止。
+ **回溯相容性**：現有的路徑和萬用字元失效會繼續保持不變。標籤失效是累加的 - 您可以在相同的分佈上使用這兩種方法。
+ **分發租用戶**：透過 ` CreateInvalidationForDistributionTenant` API 分發租用戶也支援標籤失效。

## 使用案例範例
<a name="invalidation-by-tags-examples"></a>

### 範例 1：電子商務產品目錄
<a name="invalidation-by-tags-example-ecommerce"></a>

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

```
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：使用者產生的內容平台
<a name="invalidation-by-tags-example-ugc"></a>

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

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

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

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

### 範例 3：內容版本控制
<a name="invalidation-by-tags-example-versioning"></a>

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

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

部署新版本時，使所有 v2 內容失效：

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