Je viens de configurer un site Web statique sur Amazon S3. J'utilise également le service CDN Cloudfront.
Selon Amazon, il existe 2 méthodes disponibles pour vider le cache Cloudfront: l'invalidation et le contrôle de version. Ma question concerne ce dernier.
Prenons l'exemple suivant:
Je crée un lien vers un fichier image ( image.jpg
) depuis mon fichier index.html
. Je décide alors de remplacer l'image. Je télécharge une deuxième image avec le nom de fichier: image_2.jpg
et change le lien dans mon fichier index.html
.
Les modifications prendront-elles automatiquement effet ou une action supplémentaire est-elle nécessaire?
Qu'est-ce qui déclenche les modifications nécessaires si les fichiers modifiés et nouvellement téléchargés se trouvent dans le bucket et non dans le cache?
3 Réponses :
Votre configuration cloudfront a un cache TTL, qui vous indique quand le fichier sera mis à jour, quel que soit le moment où la source change.
Si vous avez besoin d'une mise à jour immédiate, utilisez la fonction d'invalidation de votre fichier index.html
Ok, mais je pensais que le contrôle de version était une alternative à l'invalidation, sinon cela ne fait aucune différence que vous utilisiez le contrôle de version ou que vous téléchargiez simplement un nouveau fichier sans aucune référence de version dans le nom de fichier.
la gestion des versions ou les dossiers ont un sens lorsque vous référencez votre ressource cloudfront ailleurs, où vous pouvez spécifier la version.
La gestion des versions dans CloudFront n'est rien de plus que l'ajout (ou le préfixage) d'une version dans le nom de l'objet ou du «dossier» dans lequel les objets sont stockés.
v1
et utilisez une URL telle que
https://xxx.cloudfront.net/v1/image.png
https://xxx.cloudfront.net/image_v1.png
La deuxième option est souvent un peu plus de travail mais alors vous n'avez pas besoin de télécharger de nouveaux fichiers qui ne nécessitent pas d'être mis à jour (= moins cher dans le contexte du stockage). La première solution est souvent plus claire et nécessite moins de travail.
L'utilisation de CloudFront Versioning nécessite plus de stockage S3, mais est souvent moins chère que la création de nombreuses invalidations.
L'autre façon d'invalider le cache est de créer des invalidations (cela peut être coûteux). Si vous n'avez pas vraiment besoin d'invalidations mais que vous avez simplement besoin d'actualisations plus rapides du cache (24h par défaut), vous pouvez mettre à jour les paramètres TTL d'origine (niveau d'origine) ou définir la durée du cache pour un objet individuel (niveau objet).
J'interviendrai au cas où quelqu'un d'autre viendrait chercher ce que j'ai fait. Vous pouvez configurer Cloudfront avec le contrôle de version S3 activé et référencer des versions S3 spécifiques si vous savez de quelle version vous avez besoin. Je l'ai mis derrière une URL Cloudfront prédéfinie et j'ai fini avec ceci dans le SDK Java:
S3Properties s3Properties... // Custom properties pulled from a config file String cloudfrontUrl = "https://" + s3Properties.getCloudfrontDomain() + "/" + documentS3Key + "?versionId=" + documentS3VersionId; URL cloudfrontSignedUrl = new URL(CloudFrontUrlSigner.getSignedURLWithCannedPolicy( cloudfrontUrl, s3Properties.getCloudfrontKeypairId(), SignerUtils.loadPrivateKey(s3Properties.getCloudfrontKeyfilePath()), getPresignedUrlExpiration()));