J'ai créé une distribution dans cloudfront en utilisant mes fichiers sur S3. Cela a bien fonctionné et tous mes fichiers étaient disponibles. Mais aujourd'hui, j'ai mis à jour mes fichiers sur S3 et j'ai essayé d'y accéder via Cloudfront, mais cela donnait toujours d'anciens fichiers.
Qu'est-ce que je rate ?
Vous devez invalider vos objets dans le cache de distribution CloudFront. Dans le passé, vous deviez le faire 1 fichier à la fois, maintenant vous pouvez le faire avec des caractères génériques, par exemple /images/*
Comment changer l'âge maximum du Cache-Control via la console AWS S3:
Properties
Metadata
Key
nommé Cache-Control
, puis clique Add more metadata
.Key
sur Cache-Control
définissez Value
sur max-age=0
(où 0 est le nombre de secondes pendant lesquelles vous souhaitez que le fichier reste dans le cache). Vous pouvez remplacer 0 par ce que vous voulez.Le principal avantage de l'utilisation de CloudFront est d'obtenir vos fichiers à partir d'une source (S3 dans votre cas) et de les stocker sur des serveurs Edge pour répondre plus rapidement aux demandes GET. CloudFront ne reviendra pas à la source S3 pour chaque demande http.
Pour que CloudFront serve les derniers fichiers/objets, vous avez plusieurs options:
Vous pouvez utiliser CloudFront pour invalider un ou plusieurs fichiers ou répertoires manuellement ou à l'aide d'un déclencheur. Cette option a été décrite dans d'autres réponses ici. Plus d'informations sur Invalider plusieurs objets dans CloudFront . Cette approche est pratique si vous mettez rarement à jour vos fichiers et que vous ne souhaitez pas affecter les performances des objets mis en cache.
C'est maintenant la solution recommandée. C'est simple:
J'utilise une combinaison de ces deux méthodes pour m'assurer que les mises à jour sont propagées rapidement aux emplacements Edge et éviter de servir des fichiers obsolètes gérés par CloudFront.
AWS recommande toutefois de modifier les noms d'objet en utilisant un identifiant de version dans chaque nom de fichier. Si vous utilisez une commande de build et compilez vos fichiers, cette option est généralement disponible (comme dans la commande de build react npm).
Merci tedder42 et Chris Heald
J'ai pu réduire la durée du cache dans mon objet Origin, c'est-à-dire s3 et livrer les fichiers plus instantanément que ce qu'il était par défaut 24 heures. pour certaines de mes autres distributions, j'ai également mis en avant tous les en-têtes vers Origin dans lesquels cloudfront ne met rien en cache et envoie toutes les demandes à Origin.
merci.
Veuillez vous référer à cette réponse, cela peut vous aider.
Quelle est la différence entre Cache-Control: max-age = 0 et no-cache?
Ajout d'une variable Cache-Control
à 0
dans l'en-tête du fichier sélectionné dans S3
J'ai également eu ce problème et je l'ai résolu en utilisant le contrôle de version (pas le même que le contrôle de version S3). Voici un lien complet vers l'utilisation du contrôle de version avec Cloudfront
Fichiers invalides En résumé:
Lorsque vous téléchargez un ou plusieurs nouveaux fichiers dans votre compartiment S3, modifiez la version et mettez à jour vos liens selon les besoins. D'après la documentation, l'avantage de l'utilisation de la gestion des versions par rapport à l'invalidation (l'autre façon de le faire) est qu'il n'y a pas de frais supplémentaires pour actualiser CloudFront par des changements de version alors qu'il y a invalidation. Si vous avez des centaines de fichiers, cela peut être problématique, mais il est possible qu'en ajoutant une version à votre répertoire racine, ou un objet racine par défaut (le cas échéant), ce ne soit pas un problème. Dans mon cas, j'ai un SPA, tout ce que j'ai à faire est de changer la version de mon objet racine par défaut (index.html en index2.html) et il se met à jour instantanément sur CloudFront.
Je suis juste tombé sur le même problème. Au début, j'ai essayé de mettre à jour le contrôle du cache à 0 et max-age = 0 pour les fichiers de mon compartiment S3 que j'ai mis à jour, mais cela n'a pas fonctionné.
Ce qui a fonctionné était de suivre les étapes de @jpaljasma. Voici les étapes avec quelques captures d'écran.
Accédez d'abord à votre service AWS CloudFront.
Cliquez ensuite sur la distribution CloudFront que vous souhaitez invalider.
Cliquez sur l'onglet invalidations puis cliquez sur "Créer invalidation" qui est entouré en rouge.
Dans le champ de texte "chemin d'objet", vous pouvez lister les fichiers spécifiques, c'est-à-dire /index.html
ou utilisez simplement le caractère générique /*
pour tout invalider. Cela oblige cloudfront à tirer le meilleur parti de tout dans votre compartiment S3.
Une fois que vous avez rempli le champ de texte, cliquez sur "Invalider", après que CloudFront aura fini d'invalider, vous verrez vos modifications la prochaine fois que vous accéderez à la page Web.