Pourquoi CloudFront diffuse-t-il du contenu obsolète depuis Amazon S3 ?

Date de la dernière mise à jour : 06/08/2020

J'utilise Amazon CloudFront pour diffuser des objets stockés dans Amazon Simple Storage Service (Amazon S3). J'ai mis à jour mes objets dans S3, mais ma distribution CloudFront diffuse toujours les versions précédentes de ces fichiers. Pourquoi mon contenu Amazon S3 n'est-il pas mis à jour sur CloudFront ? Comment puis-je résoudre ce problème ?

Brève description

Par défaut, CloudFront met en cache une réponse d'Amazon S3 pendant 24 heures (Default TTL [Durée de vie par défaut] de 86 400 secondes). Si votre requête arrive à l'emplacement périphérique qui a diffusé la réponse Amazon S3 dans un délai de 24 heures, CloudFront utilise la réponse mise en cache, même si vous avez mis à jour le contenu dans Amazon S3.

Utilisez l'une des méthodes suivantes pour transmettre le contenu S3 mise à jour depuis CloudFront :

Résolution

Invalidez les objets S3

Vous pouvez invalider un objet S3 pour le supprimer du cache de la distribution CloudFront. Une fois que l'objet est supprimé du cache, la requête suivante récupère l'objet directement d'Amazon S3.

Avant d'exécuter une invalidation, prenez en considération les éléments suivants :

  • Vous pouvez exécuter une invalidation uniquement sur une distribution web. Vous ne pouvez pas invalider une distribution RTMP (Real Time Messaging Protocol).
  • Vous ne pouvez pas invalider certaines versions d'un objet qui utilise des cookies ou des en-têtes pour varier la réponse. CloudFront annule toutes les versions de l'objet dans le cas présent.
  • Le nombre de chemins d'invalidation pour chaque compte AWS est de 1 000 par mois. Pour connaître le prix par chemin d'invalidation plus un nombre supérieur à 1 000 chemins d'invalidation par mois, consultez la section Requêtes d'invalidation dans Tarification Amazon CloudFront.

Lorsque vous créez une invalidation, assurez-vous que les chemins d'objet répondent aux exigences suivantes :

  • Les chemins d'objet doivent être des objets individuels ou les chemins d'accès doit se terminer par le caractère générique (*). Par exemple, vous ne pouvez pas exécuter une invalidation sur un chemin d'accès tel que /images/*.jpeg, car le chemin n'est pas dédié à un objet individuel et ne se termine pas par un caractère générique.
  • Le chemin spécifié doit respecter avec exactitude la casse du chemin de l'objet. Les requêtes d'invalidation sont sensibles à la casse.
  • Pour supprimer des versions spécifiques d'un objet basé sur une chaîne de requête, incluez QueryString dans le chemin d'invalidation.

Les processus d'invalidation d'objet prennent généralement 60 à 300 secondes. Vous pouvez vérifier le statut d'une invalidation en affichant votre distribution depuis la console CloudFront.

Utiliser la gestion des versions des objets

Si vous mettez fréquemment votre contenu à jour, nous vous recommandons d'utiliser la gestion des versions des objets afin de vider le cache de la distribution CloudFront. Pour des réactualisations fréquentes du cache, utiliser la gestion des versions des objets peut s'avérer moins onéreux qu'utiliser des invalidations.

Utilisez l'une de méthodes suivantes pour ajouter la gestion des versions à vos objets :

  • Stockez les nouvelles versions de l'objet à l'origine avec le numéro de version dans le nom de clé. Par exemple, si vous mettez à jour /image_v1.png, vous stockez une nouvelle version de l'objet sous la forme /image_v2.png.
  • Mettez à jour l'objet à l'origine, mais mettez en cache en fonction d'une chaîne de requête avec la version de l'objet. Par exemple, la chaîne de requête est mise à jour de /image.png?ver=1 vers /image.png?ver=2.
    Remarque : vous pouvez toujours demander la version précédente (/image.png?ver=1) tant qu'elle est disponible dans le cache CloudFront.

Prenez en considération les avantages et les inconvénients suivants pour chaque méthode de gestion de versions des objets :

  • Le stockage de nouvelles versions de l'objet à l'origine (Amazon S3) vous permet d'annuler les modifications, car les versions précédentes sont toujours disponibles sous les noms précédents. Toutefois, le stockage de plusieurs versions d'un objet peut augmenter vos coûts de stockage.
  • Mettre à jour l'objet à l'origine, mais tout en mettant en cache en fonction de la chaîne de requête peut réduire vos coûts de stockage. Cependant, pour se préparer aux restaurations, il est recommandé de garder hors ligne les versions d'objet précédentes.

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?