0

Ich stelle eine einseitige Anwendungswebsite bereit, indem Assets an AWS S3 übertragen und die Dateien über CloudFront bereitgestellt werden. Gemäß this answer ist es mir nicht möglich, Dateien direkt von S3 aus zu verwenden, die SSL unter meiner eigenen Domäne verwenden. Daher kann ich CloudFront nicht verwenden, wenn ich Dateien auf diese Weise bereitstellen möchte.AWS CloudFront-Root-Objekt Update-Latenz

Wenn ich reploy, ich erzeuge eine neue Zeitstempel, root HTML-Datei (die selbst zu den aktualisierten JS und CSS-Bundles verlinkt), schieben Sie es zusammen mit allem anderen auf S3 und dann diese neue Datei das neue Standard-Root-Objekt für die CloudFront-Verteilung über AWS. Dies verhindert, dass CloudFront alles zwischenspeichert und die Updates versteckt.

Das Problem ist, dass CloudFront gelegentlich eine lange Zeit benötigt, um das Root-Objekt zu aktualisieren. Während ich dies schreibe, übergebe ich alle 60 Sekunden die Aktualisierung und warte auf eine wichtige Änderung, um die Produktion zu treffen. CloudFront zeigt das korrekte (neueste) Root-Objekt über die Webkonsole, aber es zeigt auch "Status: In Bearbeitung".

Manchmal ist diese Verzögerung kaum bemerkbar und manchmal ist sie ziemlich lang. Heute nähert es sich einer Stunde Verspätung.

Wie kann ich dies vermeiden? Ich bin offen für beide Änderungen an dieser Bereitstellungsmethode, indem ich S3 und CloudFront OR verwende und auf eine alternative Plattform umschalte, die dafür bekannt ist, diesen Anwendungsfall besser zu bewältigen.

+0

Führen Sie nach dem Ändern des Stammobjekts eine Cache-Invalidierung auf '/' durch. Durch das Ändern des Root-Objekts werden keine alten Antworten auf Anforderungen für '/' aus dem Cache entfernt. –

+0

Interessant Michael, ich werde das ausprobieren. Vielen Dank! –

Antwort

0

So habe ich es gelöst.

Aktivieren Sie Caching-Werte auf 0 Sekunden in der Cloud-Front. Ich habe auch festgestellt, Browser-Caches-Dokument serviert.

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

Wenn Sie Ihre Cache auf eine lange: jedes Objekt nicht in den Cache zu dienen,

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

Dokumentation auf Objekt Expiration

Ich hatte http-Header S3 Eimer hinzufügen Zeit und möchten den Cache aus CloudFront entfernen, können Sie die Invalidierung für das Root-Objekt durchführen.

Ich hoffe, es hilft.