キャッシュタグによるコンテンツの無効化
Amazon CloudFront はタグ無効化をサポートしています。これにより、URL パスではなくセマンティックタグに基づいてキャッシュされたオブジェクトを無効化できます。これにより、URL 構造を無効化戦略と一致させることなく、キャッシュ無効化を柔軟に制御できます。
タグ無効化の仕組み
-
ディストリビューションを設定する: オリジンがキャッシュタグを返すために使用する HTTP ヘッダー名を指定する
CacheTagConfigをディストリビューションに追加します。 -
オリジンでオブジェクトにタグを付ける: タグでキャッシュするオブジェクトを返す場合は、指定したヘッダーをカンマ区切りのタグ値で 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ヘッダーとして返されます。CacheTagConfigのHeaderNameをx-amz-meta-cache-tagに設定して、これらのタグへの無効化の送信を有効にすることができます。注記
または、オリジンレスポンス Lambda@Edge 関数をキャッシュ動作にアタッチして、キャッシュタグヘッダーを追加することもできます。Lambda@Edge を使用する場合、ヘッダー名は
x-amz-meta-<Key>形式に従う必要はありません。 -
タグによる無効化:
CreateInvalidationAPI に#プレフィックスを付けて使用すると、指定されたタグでキャッシュされたすべてのオブジェクトが無効化されます。aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#product:electronics"これにより、URL パスに関係なく、タグ
product:electronicsを含むすべてのキャッシュされたオブジェクトを無効化します。
タグフォーマット要件
オリジンレスポンスヘッダー値:
-
ヘッダー値のタグはでカンマで区切られます。
-
各タグの前後のスペースは切り捨てられます。
-
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-iddistribution_ID\ --paths "#user1" # Invalidate objects matching any of multiple tags (OR logic) aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#user1" "#product-category:electronics" # Mix path and tag invalidations in one batch aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "/index.html" "#user1" "/images/*" "#product-category:electronics"
無効化ステータスの確認
GetInvalidation を使用してステータスを確認します。レスポンスには、パス項目とタグ項目の両方が含まれます。
aws cloudfront get-invalidation \ --distribution-iddistribution_ID\ --idinvalidation_ID
重要な考慮事項
-
オプトインが必要: タグ無効化は、
CacheTagConfigが設定されているディストリビューションでのみ機能します。この設定がないディストリビューションでは、オリジンからのキャッシュタグヘッダーは無視されます。 -
タグ処理の制限: CloudFront は、キャッシュされたオブジェクトごとに最大 50 個のタグを処理します。オリジンレスポンスに 50 個を超えるタグが含まれている場合、制限を超える追加のタグは保存されません。
-
ヘッダー名の変更: タグ無効化は、現在の
CacheTagConfig設定に対して検索されます。CacheTagConfigのHeaderNameを変更した場合、古いヘッダー名のタグでキャッシュされたオブジェクトに対して発行された無効化は、評価されなくなります。ヘッダー名を変更する必要がある場合は、新しいキャッシュタグヘッダーと古いキャッシュタグヘッダーの両方をオブジェクトとともに返すようにし、ヘッダー名を変更する前に、パス無効化 (/*など) を発行するか、既存のタグを無効化して、古いコンテンツが提供されるのを防ぎます。これが完了したら、オブジェクトへの古いキャッシュタグヘッダーの送信を停止できます。 -
CacheTagConfig の削除: ディストリビューションから
CacheTagConfigを削除すると、CloudFront はオリジンレスポンスからのタグの抽出を停止します。タグ付きの既存のキャッシュされたオブジェクトは、有効期限が切れるか、パスによって無効化されるまで通常どおり提供されます。 -
下位互換性: 既存のパスとワイルドカード無効化は、変更なく引き続き動作します。タグ無効化は追加的です。同じディストリビューションで両方のメソッドを使用できます。
-
ディストリビューションテナント: タグ無効化は、
CreateInvalidationForDistributionTenantAPI を介したディストリビューションテナントでもサポートされています。
ユースケースの例
例 1: e コマース製品カタログ
e コマースサイトは、キャッシュされた製品ページに製品、カテゴリ、ブランドをタグ付けします。
x-amz-meta-cache-tag: category:electronics, brand:acme, product:12345
ACME がブランドを更新する際は、すべての ACME 製品を一度に無効にします。
aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#brand:acme"
例 2: ユーザー生成コンテンツプラットフォーム
プラットフォームは、キャッシュされたコンテンツに所有者のユーザー ID をタグ付けします。
x-amz-meta-cache-tag: user:12345, content-type:image
ユーザーがアカウントを閉鎖した場合、オリジンからコンテンツを削除した後、そのユーザーのすべてのコンテンツを無効化します。
aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#user:12345"
例 3: コンテンツのバージョニング
CMS は、コンテンツにバージョン識別子をタグ付けします。
x-amz-meta-cache-tag: version:v2, template:homepage
新しいバージョンをデプロイするときは、すべての v2 コンテンツを無効化します。
aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#version:v2"