Ich habe ein Szenario, in dem wir viele Kunden haben, die auf s3 hochladen.
- Wie erfährt man am besten, dass es eine neue Datei gibt?
- Ist es realistisch/gut, dass ich den Eimer alle paar Sekunden abfrage?
Ich habe ein Szenario, in dem wir viele Kunden haben, die auf s3 hochladen.
UPDATE:
Seit November 2014 unterstützt S3 die folgenden Ereignisbenachrichtigungen:
s3:ObjectCreated:Put
- Ein Objekt wurde durch eine HTTP PUT-Operation erstellt.s3:ObjectCreated:Post
- Ein Objekt wurde durch eine HTTP POST-Operation erstellt.s3:ObjectCreated:Copy
- Ein Objekt wurde durch einen S3-Kopiervorgang erstellt.s3:ObjectCreated:CompleteMultipartUpload
- Ein Objekt wurde durch den Abschluss eines mehrteiligen S3-Uploads erstellt.s3:ObjectCreated:*
- Ein Objekt wurde durch einen der oben aufgeführten Ereignistypen oder durch ein ähnliches, in der Zukunft hinzukommendes Objekterstellungsereignis erstellt.s3:ReducedRedundancyObjectLost
- Ein mit reduzierter Redundanz gespeichertes S3-Objekt ist verloren gegangen.Diese Benachrichtigungen können erfolgen an Amazon SNS , SQS o Lambda . Schauen Sie sich den Blogbeitrag an, der in verlinkt ist Alans Antwort für weitere Informationen über diese neuen Benachrichtigungen.
Ursprüngliche Antwort:
Obwohl Amazon S3 über ein Bucket-Benachrichtigungssystem verfügt, unterstützt es keine Benachrichtigungen für etwas anderes als die s3:ReducedRedundancyLostObject Ereignis (siehe die GET Eimer-Benachrichtigung Abschnitt in ihrer API).
Derzeit besteht die einzige Möglichkeit, nach neuen Objekten zu suchen, darin, den Bucket in einem vorgegebenen Zeitintervall abzufragen oder eine eigene Benachrichtigungslogik in den Upload-Clients zu erstellen (möglicherweise auf der Grundlage von Amazon SNS).
Push-Benachrichtigungen sind jetzt in S3 integriert:
http://aws.amazon.com/blogs/aws/s3-event-notification/
Sie können Benachrichtigungen an SQS oder SNS senden, wenn ein Objekt per PUT oder POST erstellt wird oder ein mehrteiliger Upload abgeschlossen ist.
Die beste Option ist heutzutage die Verwendung des AWS Lambda-Service. Sie können einen Lambda entweder mit node.js, javascript, java oder Python schreiben (wahrscheinlich werden mit der Zeit noch weitere Optionen hinzukommen). Mit dem Lambda-Service können Sie Funktionen schreiben, die auf Ereignisse von S3 reagieren, z. B. das Hochladen von Dateien. Kostengünstig, skalierbar und einfach zu bedienen.
Sie können einen Pub-Sub-Mechanismus relativ einfach mithilfe von SNS, SQS und AWS Lambda implementieren. Bitte sehen Sie sich die folgenden Schritte an. So kann jedes Mal, wenn eine neue Datei zum Bucket hinzugefügt wird, eine Benachrichtigung ausgelöst und daraufhin gehandelt werden (alles ist automatisiert)
Siehe beigefügtes Diagramm, das den grundlegenden Pub-Sub-Mechanismus erklärt
Schritt 1
Konfigurieren Sie einfach die S3-Bucket-Ereignisbenachrichtigung, um ein SNS-Thema zu benachrichtigen. Sie können dies über die S3-Konsole tun (Registerkarte Eigenschaften)
Schritt 2
Erstellen Sie eine SQS-Warteschlange, die auf dieses Thema abonniert ist. So wird jedes Mal, wenn ein Objekt in den S3-Bucket hochgeladen wird, eine Nachricht zur Warteschlange hinzugefügt.
Schritt 3
Erstellen Sie eine AWS Lambda-Funktion zum Lesen von Nachrichten aus der SQS-Warteschlange. AWS Lambda unterstützt SQS-Ereignisse als Auslöser. Daher wird Lambda jedes Mal, wenn eine Nachricht in der SQS-Warteschlange erscheint, ausgelöst und liest die Nachricht. Sobald die Nachricht erfolgreich gelesen wurde, wird sie automatisch aus der Warteschlange gelöscht. Die Nachrichten, die von Lambda nicht verarbeitet werden können (fehlerhafte Nachrichten), werden nicht gelöscht. Diese Nachrichten werden sich also in der Warteschlange stapeln. Um dieses Verhalten zu verhindern, ist die Verwendung einer Dead Letter Queue (DLQ) eine gute Idee.
Fügen Sie in Ihrer Lambda-Funktion die Logik hinzu, die Sie verwenden möchten, wenn Benutzer Dateien in den Bucket hochladen
Hinweis: Die DLQ ist nichts anderes als eine normale Warteschlange.
Schritt 4
Fehlerbehebung und Analyse des Prozesses
Nutzen Sie AWS Cloud Watch, um Details zu protokollieren. Jede Lambda-Funktion erstellt ein Protokoll unter Protokollgruppen. Dies ist ein guter Ort, um zu überprüfen, ob etwas schief gelaufen ist.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.