Force CloudFront-Verteilung / Dateiupdate
Ich bin mit Amazon CloudFront zu dienen statische Dateien meiner web-apps.
Gibt es keine Möglichkeit zu sagen, eine cloudfront-Verteilung, die es braucht, um es zu aktualisieren die Datei, oder zeigen Sie aus einer einzigen Datei, die aktualisiert werden soll?
Amazon empfehlen, dass Sie die version Ihrer Dateien logo_1.gif, logo_2.gif und so als workaround für dieses problem, aber das scheint wie eine dumme Lösung. Gibt es absolut keine andere Möglichkeit?
InformationsquelleAutor der Frage Martin | 2009-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gute Nachricht. Amazon schließlich Hinzugefügt ein Aufhebungs-Funktion. Finden Sie in der API-Referenz.
Dies ist ein Beispiel-Anfrage aus der API-Referenz:
InformationsquelleAutor der Antwort James Lawruk
März 19, Amazon Cloudfront ermöglicht nun die cache-TTL auf 0 Sekunden, also können Sie (theoretisch) nie sehen sollten veraltete Objekte. Also, wenn Sie Ihr Vermögen in S3, Sie könnte gehen Sie einfach zur AWS-Web-Panel => S3 => Eigenschaften Bearbeiten => Metadaten, dann setzen Sie Ihre "Cache-Control" den Wert "max-age=0".
Dies ist direkt aus der API-Dokumentation:
InformationsquelleAutor der Antwort John K. Chow
Mit dem Aufhebungs-API, ist es nicht aktualisiert, in ein paar Minuten.
Check-out PHP Invalidator.
InformationsquelleAutor der Antwort anjanesh
Bucket Explorer hat eine Benutzeroberfläche, macht dies ziemlich einfach jetzt. Hier ist, wie:
Rechts klicken Sie auf Ihre Eimer. Wählen Sie "Verwalten-Distributionen."
Rechts klicken Sie auf Ihre Verteilung. Wählen Sie "Get Cloudfront Aufhebungs-Liste"
Dann wählen Sie "Create" zum erstellen einer neuen Aufhebungs-Liste.
Wählen Sie die Dateien ungültig zu machen, und klicken Sie auf "Entkräften." Warten Sie 5-15 Minuten.
InformationsquelleAutor der Antwort Leopd
Automatisierte update-setup-in 5 Minuten
OK, Jungs. Die beste Möglichkeit für jetzt, führen Sie die automatische CloudFront-update (Aufhebungs -) ist die Erstellung einer Lambda-Funktion, die ausgelöst wird, jedes mal, wenn eine Datei hochgeladen wird S3-bucket (ein neues oder neu geschrieben).
Selbst wenn Sie noch nie verwendet lambda-Funktionen vor, es ist wirklich einfach-nur Folgen Sie meinem Schritt-für-Schritt-Anleitung und es dauert nur 5 Minuten:
Schritt 1
Gehen https://console.aws.amazon.com/lambda/home und klicken Sie auf Erstellen Sie eine lambda-Funktion
Schritt 2
Klicken Sie auf Blank-Funktion (custom)
Schritt 3
Klicken Sie auf leeren (gestrichelte) Feld und wählen Sie S3 von combo
Schritt 4
Wählen Sie Ihr Eimer (wie für die CloudFront-Verteilung)
Schritt 5
Legen Sie eine Ereignistyp " - Objekt Erstellt (Alle)"
Schritt 6
Set Präfix und Suffix oder lassen Sie es leer, wenn Sie nicht wissen, was es ist.
Schritt 7
Überprüfen Aktivieren trigger checkbox und klicken Sie auf Nächsten
Schritt 8
Namen, Ihrer Funktion (so etwas wie: YourBucketNameS3ToCloudFrontOnCreateall)
Schritt 9
Wählen Sie Python 2.7 (oder später) als Laufzeit
Schritt 10
Fügen Sie den folgenden code anstelle des Standard-python-code:
Schritt 11
Öffnen https://console.aws.amazon.com/cloudfront/home in einem neuen browser-tab und kopieren Sie Ihre CloudFront-Verteilung-ID für die Verwendung im nächsten Schritt.
Schritt 12
Zurück zu lambda-Registerkarte und fügen Sie Ihren Vertrieb-id statt _YOUR_DISTRIBUTION_ID_ in der Python-code. Halten Sie umgebenden Anführungszeichen.
Schritt 13
Set handler: lambda_function.lambda_handler
Schritt 14
Klicken Sie auf die Rolle combobox und wählen Sie Erstellen Sie eine benutzerdefinierte Rolle. Neuen tab im browser geöffnet werden.
Schritt 15
Klicken Sie auf view policy-Dokumentklicken Sie auf Bearbeitenklicken Sie auf OK und ersetzen Rollendefinition mit folgenden (wie ist):
Schritt 16
Klicken Sie auf ermöglichen. Sie kehren zurück zu lambda. Überprüfen, dass die Rolle der Namen, die Sie soeben erstellt haben, wird ausgewählt in den Vorhandene Rolle combobox.
Schritt 17
Set Speicher (MB) 128 und Timeout zu 5 Sek.
Schritt 18
Klicken Sie auf Nächstenklicken Sie dann auf Erstellen Funktion
Schritt 19
Sie sind gut zu gehen! Nun, jedes mal, wenn Sie den upload/reupload eine Datei zu S3, es wird ausgewertet, in allen CloudFront-Edge-Standorten.
PS - Wenn Sie testen, stellen Sie sicher, dass Ihr browser das laden von Bildern von CloudFront, nicht aus dem lokalen cache.
PSS - Bitte beachten Sie, dass nur die ersten 1000 Dateien Aufhebungs-pro Monat sind kostenlos, jede Nichtigkeit über limit kostet $0.005 USD. Auch zusätzliche Kosten für die Lambda-Funktion gelten kann, aber es ist extrem Billig.
InformationsquelleAutor der Antwort Kainax
Wenn Sie boto installiert (das ist nicht nur für python, sondern installiert auch eine Reihe von nützlichen Kommandozeilen-utilities), es bietet ein command line util speziell genannt
cfadmin
oder "cloud front admin" bietet die folgenden Funktionen:Du invaliate Dinge mit:
InformationsquelleAutor der Antwort samuraisam
Nur die Entsendung zu informieren, die jeder Besucher dieser Seite (erstes Ergebnis auf 'Cloudfront-Datei Aktualisieren')
dass es ein einfach-zu-Verwendung+Zugriff online invalidator verfügbar swook.net
Diese neue invalidator ist:
Vollständige Offenlegung: ich habe dieses. Spaß haben!
InformationsquelleAutor der Antwort swook
einen sehr einfachen Weg, es zu tun ist ORDNER der Versionsverwaltung.
Also, wenn Sie Ihre statische Dateien sind Hunderte, zum Beispiel, setzen Sie einfach alle in einen Ordner namens von Jahr+Versionierung.
zum Beispiel habe ich einen Ordner namens 2014_v1, wo im inneren habe ich alle meine statischen Dateien...
So, in meinem HTML-lege ich immer den Verweis auf den Ordner. ( natürlich habe ich ein PHP-include-wo habe ich den Namen des Ordners. ), Indem Sie in 1 Datei, die es tatsächlich in allen meinen PHP-Dateien..
Wenn ich will einen kompletten refresh, habe ich einfach den Ordner umbenennen zu 2014_v2 in meiner Hand, und ändern Sie innerhalb des php-include zu 2014_v2
alle HTML automatisch zu ändern und bitten Sie den neuen Pfad, cloudfront cache-MISS und fordern Sie es auf die Quelle.
Beispiel:
SOURCE.mydomain.com ist meine Quelle,
cloudfront.mydomain.com ist CNAME auf cloudfront-Verteilung.
Also die PHP aufgerufen, diese Datei
cloudfront.mydomain.com/2014_v1/javascript.js
und wenn ich möchte, dass eine vollständige Aktualisierung, einfach ich Ordner umbenennen in der Quelle "2014_v2" und ich ändere die PHP enthalten, durch die Einstellung der Ordner "2014_v2".
Wie diese, gibt es keine Verzögerung für Abwertung und KEINE KOSTEN !
Dies ist mein Erster Beitrag in stackoverflow, hoffe ich habe es gut !
InformationsquelleAutor der Antwort MarcoP
Set TTL=1 Stunde und ersetzen
http://developer.amazonwebservices.com/connect/ann.jspa?annID=655
InformationsquelleAutor der Antwort Hml
In ruby, mit dem Nebel gem
sogar auf Invalidierung, dauert es noch 5-10 Minuten für die Nichtigkeit zu verarbeiten und zu aktualisieren, die auf allen amazon-edge-Server
InformationsquelleAutor der Antwort raycchan
aktuellen AWS-CLI-Unterstützung Ungültigkeitserklärung im Modus Vorschau. Führen Sie das folgende in der Konsole mal:
Ich bereitstellen von meinem web-Projekt mit npm. Ich habe die folgenden Skripte in meinem
package.json
:Dass die Skripte, die oben im Ort können Sie die Bereitstellung Ihrer Website mit:
InformationsquelleAutor der Antwort Dmitry
Wenn Sie AWS verwenden, werden Sie wahrscheinlich auch die offizielle CLI-tool (früher oder später). AWS CLI-version 1.9.12 oder höher unterstützt ungültig, eine Liste von Dateinamen.
Vollständige Offenlegung: ich habe dieses. Spaß haben!
InformationsquelleAutor der Antwort RayLuo