0

Je déploie un site Web d'application d'une seule page en déplaçant des éléments vers AWS S3 et en diffusant les fichiers via CloudFront. Selon this answer, il n'est pas possible pour moi de servir des fichiers directement à partir de S3 en utilisant SSL sous mon propre domaine, donc je n'ai pas le choix d'utiliser CloudFront si je veux servir des fichiers de cette manière. Lorsque je redéploie, je génère un nouveau fichier HTML racine, horodaté (qui lui-même lie aux faisceaux JS et CSS mis à jour), le place sur S3 avec tout le reste, puis le transforme en nouvel objet racine par défaut. pour la distribution CloudFront via l'AWS. Cela empêche CloudFront de tout mettre en cache et de masquer les mises à jour.Latence de mise à jour des objets racine AWS CloudFront

Le problème est que, occasionnellement, CloudFront prend beaucoup de temps pour mettre à jour l'objet racine. Au moment où j'écris ceci, je suis en train de tabasser sur rafraichir toutes les 60 secondes en attendant un changement important pour frapper la production. CloudFront affiche l'objet racine correct (le plus récent) via la console Web, mais indique également "Statut: En cours".

Parfois, ce délai est à peine perceptible, et d'autres fois, il est assez long. Aujourd'hui, il approche d'une heure de retard.

Comment puis-je éviter cela? Je suis ouvert aux deux changements apportés à cette méthode de déploiement en utilisant S3 et CloudFront OU en basculant vers une plate-forme alternative mieux connue pour gérer ce cas d'utilisation.

+0

Effectuez une invalidation de cache sur '/' après avoir modifié l'objet racine. La modification de l'objet racine ne supprime pas les anciennes réponses aux demandes de '/' du cache. –

+0

Intéressant Michael, je vais essayer ça. Je vous remercie! –

Répondre

0

Voici comment je l'ai résolu.

Activez les valeurs de mise en cache à 0 seconde dans le cloud. J'ai également remarqué que le document des caches de navigateur est servi.

je devais ajouter des en-têtes HTTP au seau S3 pour servir tous les objets de ne pas cache,

Cache-Control: no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: 0 

Documentation sur l'objet Expiration:

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html

Si vous définissez votre cache à une longue temps et souhaitez supprimer le cache de CloudFront, vous pouvez effectuer l'invalidation sur l'objet racine.

Espérons que ça aide.