캐시 태그로 콘텐츠 무효화
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: 전자 상거래 제품 카탈로그
전자 상거래 사이트가 캐시된 제품 페이지에 제품, 범주 및 브랜드로 태그를 지정합니다.
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"