View a markdown version of this page

Invalidación del contenido mediante etiquetas de caché - Amazon CloudFront

Invalidación del contenido mediante etiquetas de caché

Amazon CloudFront admite invalidaciones de etiquetas, lo que permite invalidar los objetos en caché en función de etiquetas semánticas en lugar de en rutas de URL. Esto proporciona un control flexible sobre la invalidación de la caché sin necesidad de que la estructura de URL se ajuste a la estrategia de invalidación.

Cómo funciona la invalidación de etiquetas

  1. Configure la distribución: agregue CacheTagConfig a la distribución especificando el nombre del encabezado HTTP que el origen utiliza para devolver las etiquetas de caché.

  2. Etiquete los objetos en el origen: cuando devuelva un objeto que desee almacenar en caché con etiquetas, configure el origen para incluir el encabezado especificado en las respuestas HTTP con valores de etiqueta separados por comas.

    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
    nota

    Para los orígenes de S3, puede adjuntar etiquetas de caché a los objetos de S3 como metadatos. Puede agregar una entrada de metadatos con una clave de su elección (ejemplo: cache-tag) y una lista de etiquetas separadas por comas como valor (ejemplo: product:electronics, category:tv, brand:example).

    S3 muestra los metadatos de los objetos como encabezados de respuesta con el prefijo x-amz-meta-<Key>, por lo que se devolverá una clave de cache-tag de metadatos como encabezado x-amz-meta-cache-tag. Puede establecer HeaderName en CacheTagConfig para x-amz-meta-cache-tag para permitir el envío de invalidaciones a estas etiquetas.

    nota

    Como alternativa, puede adjuntar una función Lambda@Edge de respuesta de origen al comportamiento de la caché para agregar encabezados de etiquetas de caché. Si utiliza Lambda@Edge, no es necesario que el nombre del encabezado siga el formato x-amz-meta-<Key>.

  3. Invalide por etiqueta: utilice la API CreateInvalidation con el prefijo # para invalidar todos los objetos almacenados en caché con la etiqueta especificada.

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

    Esto invalida TODOS los objetos en caché que contienen la etiqueta product:electronics, independientemente de la ruta URL.

Requisitos de formato de etiquetas

Valor del encabezado de respuesta de origen:

  • Las etiquetas están separadas por comas en el valor del encabezado.

  • Los espacios iniciales y finales alrededor de cada etiqueta están recortados.

  • tag1,tag2,tag3 y tag1, tag2, tag3 son válidas y equivalentes.

Valores de etiqueta individuales:

  • Caracteres visibles en ASCII (33-126)

  • Sin caracteres de control, espacios ni comas

  • Sin distinción de mayúsculas y minúsculas

  • Máximo 256 caracteres por etiqueta

  • Máximo 50 etiquetas por objeto (se omiten las etiquetas adicionales)

Configuración de una distribución para las invalidaciones de etiquetas

Para habilitar las invalidaciones de etiquetas, agregue CacheTagConfig a la configuración de distribución:

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" }'

Creación de invalidaciones de etiquetas

Utilice el prefijo # en el parámetro --paths para especificar etiquetas:

# 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"

Comprobación del estado de invalidación

Use GetInvalidation para comprobar el estado. La respuesta incluye los elementos de ruta y etiqueta:

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

Consideraciones importantes

  • Se requiere la suscripción: la invalidación de etiquetas solo funciona en las distribuciones que tiene configurado CacheTagConfig. Las distribuciones sin esta configuración ignoran los encabezados de las etiquetas de caché del origen.

  • Límites de procesamiento de etiquetas: CloudFront procesa hasta 50 etiquetas por objeto almacenado en caché. Si una respuesta de origen contiene más de 50 etiquetas, las etiquetas adicionales que superen el límite no se almacenan.

  • Cambio del nombre del encabezado: las invalidaciones de etiquetas se comparan con la configuración actual CacheTagConfig. Si cambia HeaderName en CacheTagConfig, no se evaluarán las invalidaciones emitidas a los objetos almacenados en caché con etiquetas en el nombre del encabezado anterior. Si necesita cambiar el nombre del encabezado, comience a devolver los encabezados de las etiquetas de caché nuevas y antiguas con los objetos y, a continuación, invalide la ruta (por ejemplo, /*) o invalide las etiquetas existentes antes de cambiar el nombre del encabezado para evitar incluir contenido obsoleto. Una vez hecho esto, puede dejar de enviar el encabezado de las antiguas etiquetas de caché con los objetos.

  • Eliminación de CacheTagConfig: al eliminar CacheTagConfig de una distribución, CloudFront deja de extraer etiquetas de las respuestas de origen. Los objetos en caché existentes con etiquetas se distribuyen normalmente hasta que caduquen o la ruta los invalide.

  • Compatibilidad con versiones anteriores: las invalidaciones de ruta y comodín existentes siguen funcionando sin cambios. Las invalidaciones de etiquetas son acumulativas: puede utilizar ambos métodos en la misma distribución.

  • Arrendatarios de distribución: los arrendatarios de distribución también admiten la invalidación de etiquetas a través de la API CreateInvalidationForDistributionTenant.

Ejemplos de casos de uso

Ejemplo 1: catálogo de productos de comercio electrónico

Un sitio de comercio electrónico etiqueta las páginas de productos almacenadas en caché con el producto, la categoría y la marca:

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

Cuando ACME actualice su marca, invalide todos los productos de ACME a la vez:

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

Ejemplo 2: Plataforma de contenido generada por los usuarios

Una plataforma etiqueta el contenido almacenado en caché con el ID de usuario del propietario:

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

Cuando un usuario cierre su cuenta, invalide todo su contenido una vez que lo haya eliminado del origen:

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

Ejemplo 3: Control de versiones de contenido

Un CMS etiqueta el contenido con identificadores de versión:

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

Al implementar una nueva versión, invalide todo el contenido de v2:

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