2012-10-08 15 views
9

Ich kann nicht scheinen, eine offensichtliche Antwort in der Dokumentation zu sehen.Sendet Amazon S3 Ungültigmachungssignale an CloudFront?

Wenn ich eine Datei auf S3 aktualisiere und CloudFront aktiviert ist, sendet S3 ein Ungültigkeitssignal an CloudFront? Oder muss ich es nach der Aktualisierung der Datei selbst senden?

Antwort

17

S3 sendet keine Ungültigkeitsinformationen an CloudFront. Standardmäßig speichert CloudFront Informationen bis zu der maximalen Zeit, die von den Cache Control-Headern angegeben wird, die beim Abrufen der Daten vom Ursprung festgelegt wurden (möglicherweise werden Elemente aus dem Cache früher entfernt, wenn es sich anfühlt).

Sie können Cache-Einträge ungültig machen, indem Sie einen Invalidierungs-Batch erstellen. Dies kostet Sie Geld: Die ersten 1000 Anfragen pro Monat sind kostenlos, aber darüber hinaus kostet es 0,005 pro Anfrage - wenn Sie 1000 Dateien pro Tag ungültig machen würden, würden Sie 150 pro Monat kosten (es sei denn, Sie können die Platzhalterfunktion nutzen). Sie können dies natürlich als Reaktion auf ein s3-Ereignis mit einer Amazon Lambda-Funktion auslösen.

Ein anderer Ansatz besteht darin, einen anderen Pfad zu verwenden, wenn sich das Objekt ändert (in Wirklichkeit ein generativer Cache-Schlüssel). In ähnlicher Weise könnten Sie einen Abfrageparameter an die URL anhängen und diesen Abfrageparameter ändern, wenn Cloudfront eine neue Kopie abrufen soll (dazu müssen Sie CloudFront mitteilen, dass sie Abfragezeichenfolgenparameter verwenden soll - standardmäßig ignoriert sie diese).

Eine weitere Möglichkeit, wenn Sie nur selten (aber große) Änderungen vornehmen, besteht darin, einfach eine neue Cloudfront-Verteilung zu erstellen.

+0

Ich hatte ein schreckliches Gefühl, das war der Fall. Es scheint, als hätten sie ein Feature verpasst. Kannst du eine Referenz dafür angeben oder ist es einfach nicht spezifiziert? Vielen Dank. – Joe

+0

Es wäre eine fehlerhafte Annahme, dass das Hochladen einer neuen Version auf S3 bedeutet, dass Sie den Cache in CloudFront löschen möchten. Ja, das mag das Verhalten sein, nach dem Sie suchen, aber es wäre vermessen von AWS, _assume_, dass dies das ist, was Sie wollen. In vielen Fällen cache ich Inhalte in CloudFront mit der Gewissheit, dass sie gemäß meinen Einstellungen ablaufen werden, und aktualisiere Inhalte in S3 im Voraus. In meinem Fall ist automatische Entwertung das Gegenteil von dem, was ich will. –

+0

Nicht vorausgesetzt, aber es scheint wie ein nützlicher Parameter zu haben. – Joe

3

Soweit ich weiß, funktionieren alle CDNs so.

Deshalb verwenden Sie in der Regel etwas wie foo-x.y.z.ext, um Assets auf einem CDN zu versionieren. Ich würde foo.ext?x.y.z nicht verwenden, weil es etwas über bestimmte Browser und Proxies gab, die nie Assets mit einem ?QUERY_STRING zwischenspeichern.

Im Allgemeinen können Sie dies überprüfen: https://developers.google.com/speed/docs/best-practices/caching

Es viele Best Practices enthält und geht ins Detail, was zu tun ist und wie es funktioniert.

In Bezug auf S3 und Cloudfront, bin ich nicht sehr vertraut mit der Cache-Invalidierung, aber was Frederick Cheung erwähnt ist alles korrekt.

Einige Provider erlauben Ihnen auch, den Cache direkt zu löschen, aber aufgrund der Natur eines CDN sind diese Änderungen fast nie sofort. Eine andere Methode besteht darin, eine kleinere TTL (Verfallsüberschriften) festzulegen, damit Assets häufiger aktualisiert werden. Aber ich denke, dass das den Zweck eines CDN ebenfalls besiegt.

In unserem Fall (Edgecast) ist Cache-Invalidierung möglich (ein manueller Prozess) und kostenlos, aber wir tun dies selten, weil wir unsere Assets entsprechend versionieren.

+0

Danke für die Antwort. Ich kenne sowohl S3 als auch CloudFront (und andere), ich fragte nach der spezifischen Integration zwischen diesen beiden Amazon Produkten. – Joe

+0

OK, ich habe das nicht speziell verstanden. Also ja - meine Empfehlung wäre, immer noch Assets zu versionieren und 'Cache-Control'-Header auf dem Objekt zu setzen. – Till

+0

Danke, es sieht so aus, als müsste ich einfach herumarbeiten. Ich denke immer noch, dass es ein essenzielles und einfach zu implementierendes Feature ist, das sie verpasst haben. – Joe