Ich verwende CloudFront von Amazon, um statische Dateien meiner Webanwendungen bereitzustellen.
Gibt es keine Möglichkeit, einer Cloudfront-Distribution mitzuteilen, dass sie ihre Datei aktualisieren muss, oder auf eine einzelne Datei hinzuweisen, die aktualisiert werden soll?
Amazon empfiehlt, dass Sie Ihre Dateien wie logo_1.gif, logo_2.gif usw. versionieren, um dieses Problem zu umgehen. Dies scheint jedoch eine ziemlich dumme Lösung zu sein. Gibt es absolut keinen anderen Weg?
Antworten:
Gute Nachrichten. Amazon hat endlich eine Invalidierungsfunktion hinzugefügt. Siehe die API-Referenz .
Dies ist eine Beispielanforderung aus der API-Referenz:
quelle
createInvalidation
ich eine API- Anfrage gestellt habe, dauert es ungefähr 5-10 Minuten, bis das Update ungültig wird. Beachten Sie, dass ich diesen Kommentar 4 Jahre nach Ihrem schreibe .Ab dem 19. März erlaubt Amazon jetzt, dass die Cache-TTL von Cloudfront 0 Sekunden beträgt. Daher sollten Sie (theoretisch) niemals veraltete Objekte sehen. Wenn Sie also Ihre Assets in S3 haben, können Sie einfach zu AWS Web Panel => S3 => Eigenschaften bearbeiten => Metadaten wechseln und dann Ihren Wert für "Cache-Control" auf "max-age = 0" setzen.
Dies geht direkt aus der API-Dokumentation hervor :
quelle
Mit der Invalidierungs-API wird sie in wenigen Minuten aktualisiert.
Schauen Sie sich PHP Invalidator an .
quelle
Automatisches Update-Setup in 5 Minuten
Okay Leute. Die derzeit beste Möglichkeit, ein automatisches CloudFront-Update (Ungültigmachung) durchzuführen, besteht darin, eine Lambda-Funktion zu erstellen, die jedes Mal ausgelöst wird, wenn eine Datei in den S3-Bucket hochgeladen wird (eine neue oder neu geschriebene).
Selbst wenn Sie noch nie zuvor Lambda-Funktionen verwendet haben, ist dies ganz einfach. Befolgen Sie einfach meine Schritt-für-Schritt-Anweisungen, und es dauert nur 5 Minuten:
Schritt 1
Gehen Sie zu https://console.aws.amazon.com/lambda/home und klicken Sie auf Lambda-Funktion erstellen
Schritt 2
Klicken Sie auf Leere Funktion (benutzerdefiniert)
Schritt 3
Klicken Sie auf das leere Feld und streichen Sie S3 aus der Kombination
Schritt 4
Wählen Sie Ihren Bucket aus (wie bei der CloudFront-Distribution).
Schritt 5
Setzen Sie einen Ereignistyp auf "Objekt erstellt (alle)".
Schritt 6
Stellen Sie Präfix und Suffix ein oder lassen Sie es leer, wenn Sie nicht wissen, was es ist.
Schritt 7
Überprüfen Sie Trigger aktivieren Checkbox und klicken Sie auf Weiter
Schritt 8
Benennen Sie Ihre Funktion (etwa: YourBucketNameS3ToCloudFrontOnCreateAll )
Schritt 9
Wählen Sie Python 2.7 (oder höher) als Laufzeit aus
Schritt 10
Fügen Sie anstelle des Standard-Python-Codes folgenden Code ein:
Schritt 11
Öffnen Sie https://console.aws.amazon.com/cloudfront/home in einem neuen Browser-Tab und kopieren Sie Ihre CloudFront-Verteilungs-ID, um sie im nächsten Schritt zu verwenden.
Schritt 12
Kehren Sie zur Registerkarte Lambda zurück und fügen Sie Ihre Verteilungs-ID anstelle von _YOUR_DISTRIBUTION_ID_ in den Python-Code ein. Halten Sie umgebende Anführungszeichen.
Schritt 13
Set - Handler : lambda_function.lambda_handler
Schritt 14
Klicken Sie auf die Rolle Combobox und wählen Sie eine benutzerdefinierte Rolle erstellen . Der neue Tab im Browser wird geöffnet.
Schritt 15
Klicken Sie auf Richtliniendokument anzeigen , klicken Sie auf Bearbeiten , klicken Sie auf OK und ersetzen Sie die Rollendefinition durch Folgendes (wie sie ist):
Schritt 16
Klicken Sie auf Zulassen . Dies bringt Sie zu einem Lambda zurück. Überprüfen Sie, ob der soeben erstellte Rollenname in der vorhandenen Rolle ausgewählt ist Combobox " .
Schritt 17
Stellen Sie den Speicher (MB) auf 128 und das Zeitlimit auf 5 Sekunden ein.
Schritt 18
Klicken Sie auf Weiter und dann auf Funktion erstellen
Schritt 19
Du bist startklar! Jedes Mal, wenn Sie eine Datei in S3 hochladen / erneut hochladen, wird sie an allen CloudFront Edge-Speicherorten ausgewertet.
PS - Stellen Sie beim Testen sicher, dass Ihr Browser Bilder aus CloudFront und nicht aus dem lokalen Cache lädt.
PSS - Bitte beachten Sie, dass nur die ersten 1000 Ungültigmachungen von Dateien pro Monat kostenlos sind. Jede Ungültigmachung über das Limit hinaus kostet 0,005 USD. Es können auch zusätzliche Gebühren für die Lambda-Funktion anfallen, diese sind jedoch äußerst günstig.
quelle
Bucket Explorer hat eine Benutzeroberfläche, die dies jetzt ziemlich einfach macht. Hier ist wie:
Klicken Sie mit der rechten Maustaste auf Ihren Eimer. Wählen Sie "Verteilungen verwalten".
Klicken Sie mit der rechten Maustaste auf Ihre Distribution. Wählen Sie "Cloudfront-Ungültigkeitsliste abrufen" und anschließend "Erstellen", um eine neue Ungültigkeitsliste zu erstellen. Wählen Sie die zu ungültig machenden Dateien aus und klicken Sie auf "Ungültig machen". Warten Sie 5-15 Minuten.
quelle
Wenn Sie boto installiert haben (das nicht nur für Python ist, sondern auch eine Reihe nützlicher Befehlszeilenprogramme installiert), bietet es ein Befehlszeilenprogramm, das speziell als
cfadmin
"Cloud Front Admin" bezeichnet wird und die folgenden Funktionen bietet:Sie machen Dinge ungültig, indem Sie Folgendes ausführen:
quelle
Posten Sie einfach, um alle Besucher dieser Seite (erstes Ergebnis bei 'Cloudfront File Refresh') darüber zu informieren, dass es einen benutzerfreundlichen + Zugriff gibt benutzerfreundlicher Online-Invalidator verfügbar ist
Dieser neue Ungültigmacher ist:
Vollständige Offenlegung: Ich habe dies gemacht. Habe Spaß!
quelle
Eine sehr einfache Möglichkeit ist die FOLDER-Versionierung.
Wenn Ihre statischen Dateien beispielsweise Hunderte sind, legen Sie sie einfach alle in einem Ordner ab, der nach Jahr + Versionierung aufgerufen wird.
Zum Beispiel benutze ich einen Ordner namens 2014_v1, in dem ich alle meine statischen Dateien habe ...
Also habe ich in meinem HTML immer den Verweis auf den Ordner eingefügt. (Natürlich habe ich ein PHP-Include, in dem ich den Namen des Ordners festgelegt habe.) Wenn ich also eine Datei ändere, ändert sich tatsächlich alles in meinen PHP-Dateien.
Wenn ich eine vollständige Aktualisierung möchte, benenne ich den Ordner einfach in 2014_v2 in meine Quelle um und ändere ihn innerhalb des PHP-Includes in 2014_v2
Der gesamte HTML-Code ändert sich automatisch und fragt den neuen Pfad, den Cloudfront-MISS-Cache und fordert ihn bei der Quelle an.
Beispiel: SOURCE.mydomain.com ist meine Quelle, cloudfront.mydomain.com ist CNAME für die Cloudfront-Verteilung.
Das PHP hat diese Datei cloudfront.mydomain.com/2014_v1/javascript.js genannt. Wenn ich eine vollständige Aktualisierung möchte, benenne ich den Ordner einfach in "2014_v2" um und ändere das PHP-Include, indem ich den Ordner auf "2014_v2" setze. .
So gibt es keine Verzögerung für die Ungültigmachung und keine Kosten!
Dies ist mein erster Beitrag in stackoverflow, hoffe ich habe es gut gemacht!
quelle
TTL = 1 Stunde einstellen und ersetzen
http://developer.amazonwebservices.com/connect/ann.jspa?annID=655
quelle
In Rubin mit dem Nebelstein
Selbst bei einer Ungültigmachung dauert es noch 5-10 Minuten, bis die Ungültigmachung auf allen Amazon Edge-Servern verarbeitet und aktualisiert wurde
quelle
Die aktuelle AWS CLI unterstützt die Ungültigmachung im Vorschaumodus. Führen Sie in Ihrer Konsole einmal Folgendes aus:
Ich stelle mein Webprojekt mit npm bereit. Ich habe die folgenden Skripte in meinem
package.json
:Mit den oben genannten Skripten können Sie Ihre Site bereitstellen mit:
quelle
--paths /
zu--paths /*
. meins war auch wie deins und es hat die Verteilung nicht ungültig gemacht ...Wenn Sie AWS verwenden, verwenden Sie wahrscheinlich auch das offizielle CLI-Tool (früher oder später). AWS CLI Version 1.9.12 oder höher unterstützt das Ungültigmachen einer Liste von Dateinamen.
Vollständige Offenlegung: Ich habe dies gemacht. Habe Spaß!
quelle
Gehen Sie zu CloudFront.
Klicken Sie auf Ihre ID / Distributionen.
Klicken Sie auf Invalidierungen.
Klicken Sie auf Invalidierung erstellen.
Geben Sie im riesigen Beispielfeld * ein und klicken Sie auf Ungültig machen
Getan
quelle