Wie wollen Sie invalidate-cache index.html bei einer statischen Website gehostet auf S3 mit cloudfront?
So, ich habe gehostet meinem angular-app auf s3 mit cloudfront dist. Ich mache Datei-revision-ing (mit grunt filerev), um sicherzustellen, dass ich habe nie wieder veraltete Inhalte. Aber, wie sollte ich die version index.html Datei. Seine erforderlich, da alle anderen Dateien verwiesen wird, im inneren index.html.
Ich so konfiguriert haben, dass mein Eimer verwendet werden, als eine statische Website. So ist es nur nimmt die index.html wenn ich mich auf die Eimer in der url.
Cloudfront sagt, dass Sie sollten min TTL auf 0, so wäre es immer Treffer Herkunft, zu dienen dem Inhalt. Aber, ich brauche das nicht, da bin ich dabei-Datei Revision von alle meine Dateien (außer index.html). Ich kann nutzen cdn-caching für diese Dateien.
Sie sagen auch, dass, um zu entkräften, ein einzelnes Objekt ist, legen Sie die max-age-Header auf 0. Ich habe versucht, das hinzufügen folgenden meiner index.html
<meta http-equiv="Cache-Control" content="public, must-revalidate, proxy-revalidate, max-age=0"/>
Aber dies bedeutet nicht unbedingt, sobald Sie den upload auf s3. Muss ich explizit festlegen, Header auf s3 mit s3cmd oder dashboard? Und brauche ich, um dies zu tun, jedes mal, wenn index.html ändert und ich es hochladen?
Ich bin mir bewusst, dass ich könnte die Unwirksamkeit einer einzelnen Datei über cmd, aber es ist ein wiederholender Prozess, und Es wäre toll, wenn es kümmern sich nur durch die Bereitstellung von auf s3.
- Verwandte: Wie purge CloudFront cache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl die akzeptierte Antwort ist richtig, wenn Sie mit s3cmd, war ich über die AWS CLI, also das, was ich Tat, war die folgenden 2 Befehle:
Ersten, um die tatsächliche Bereitstellung der code:
aws s3 sync ./s3://bucket-name-here/--delete
Erstellen Sie dann eine Ungültigkeitserklärung auf CloudFront:
aws cloudfront create-invalidation --distribution-id <distribution-id> --paths /index.html
aws cloudfront create-invalidation --distribution-id ${CLOUDFRONT_ID} --paths '/index.html'
. jede andere Idee?objects path /index.html /service-worker.js
. ich bin die Bereitstellung von app reagieren mit service worker aktiviert--paths /*
, log zeigt diesobject paths /lib /tmp /srv /root /media /opt /mnt /etc /usr /dev /var /sbin /proc /bin /run /sys /home /boot /lib64
--paths "/*"
Beantwortung meiner eigenen Frage. Ich bereitstellen von meine Website S3 mit
s3cmd
- Werkzeug und es gibt eine option, die Sie bieten könnte, zu entkräften CloudFront cache für alle Dateien geändert (diff zwischen Ihredist
Ordner und S3-bucket). Dies invalidiert cache für alle Dateien geändert, einschließlich index-Datei. Es dauert in der Regel etwa 15-20 Minuten, um die neue änderungen auf die Produktion.Hier ist der Befehl
Hinweis: unter macOS installieren möchten, können Sie dieses tool über:
brew install s3cmd
.Hoffe, das hilft.
[your-distribution-folder]/*
? Ist das das gleiche wie die CloudFront-Verteilungen-ID?**Domain-Namen**? Oder ARN? Dies sind die Felder, die ich sehe (i.imgur.com/8IEEYmS.jpg), aber ich habe versucht ein paar und es gibt mir immerERROR: Parameter problem: Invalid source: 'WHATEVER_I_TRIED' is not an existing file or directory
(unter Windows, falls das von Bedeutung ist)./*
erforderlich? Nicht so zu verstehen, dass alles, was in der Verteilung / Eimer wird für ungültig erklärt?Können Sie automatisieren einen Prozess mit Lambda. Es erlaubt Ihnen, eine Funktion erstellen, die bestimmte Aktionen durchführen (Objekt-Invalidierung in deinem Fall) in Reaktion auf bestimmte Ereignisse (neue Datei in S3).
Mehr Informationen finden Sie hier:
https://aws.amazon.com/documentation/lambda/
Beim lokalen sync-Verzeichnis mit dem s3, können Sie dies tun:
Der erste Befehl ist nur ein normaler sync, der zweite Befehl aktivieren Sie S3, um die Rückkehr cache-control für alle Dateien außer
index.html
undrobots.txt
.Dann Ihren SPA können Sie vollständig in den Cache geladen (außer
index.html
).Wenn Sie
s3cmd sync
und nutzen Sie die--cf-invalidate
option, Sie können auch angeben--cf-invalidate-default-index
je nach Ihrem setup.Aus der man-page:
Diese werden sicher auch erlöschen Ihrer index-Dokument, wahrscheinlich index.html, das wird sonst übersprungen werden, unabhängig davon, ob aktualisiert oder nicht über die sync.