2015-07-17 9 views
5

Ich möchte folgende Ereignis-/Benachrichtigungskonfiguration in einem AWS S3-Bucket einrichten: Nach dem Empfang einer Datei (s3: ObjectCreated: *) sollen zwei Ziele ausgelöst werden:AWS S3: Mehrere Ziele über S3 auslösen Benachrichtigung über Dateiempfang

  • SQS: die Datei für eine Aufbewahrungszeit für ein paar Tage
  • Lambda für detaillierte Nachbearbeitung zur Warteschlange einig schnelle sofortigen Metriken Verarbeitung

Wenn ich die Konfiguration Setup versuchen zu tun, über die AWS-Konsole bekomme ich die folgende Fehlermeldung:

Configurations overlap. Configurations on the same bucket cannot share a common event type. : s3:ObjectCreated:*, s3:ObjectCreated:* 

Ich habe versucht, die Konfiguration über AWS SDK (Java) als Vorschlag der Bedienungsanleitung einzurichten, aber ähnliches Ergebnis:

Caught an AmazonServiceException, which means your request made it to Amazon S3, but was rejected with an error response for some reason. 
Error Message: Configurations overlap. Configurations on the same bucket cannot share a common event type. (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: A0E8738522EA218F) 
HTTP Status Code: 400 
AWS Error Code: InvalidArgument 
Error Type:  Client 
Request ID:  A0E8738522EA218F 
Error XML<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>InvalidArgument</Code><Message>Configurations overlap. Configurations on the same bucket cannot share a common event type.</Message><ArgumentName>Event</ArgumentName><ArgumentValue>s3:ObjectCreated:*, s3:ObjectCreated:*</ArgumentValue><RequestId>A0E8738522EA218F</RequestId><HostId>p4qYoIXi38u3Jl3p0xpI7TFWgs0ZxsqK89oDTTy8D/tbw39NnaIT99jIvHIxt4XliRFxqNWl32M=</HostId></Error> 

Antwort

3

Ich schlage vor, Sie S3 Notifications zu SNS Topic veröffentlichen sollte, und haben Ihre Lambda function und SQS Queue dieser SNS Topic abonnieren.

Diese Architektur sollte Ihnen helfen, das zu erreichen, wonach Sie suchen.

+1

Rechts, SNS löste das Problem. Ich habe dem SNS-Thema die Berechtigung "SNS: Veröffentlichen" hinzugefügt und meine SQS-Warteschlange und meine Lambda-Funktion als Abonnenten des SNS-Themes konfiguriert. In der Lambda-Funktion kann ich das S3Object entpacken, das bckt, Pfad usw. enthält, und dann die Datei von S3 herunterladen und verarbeiten. –

4

beste Lösung wahrscheinlich wird um eine SNS-Benachrichtigung auszulösen, wenn die Dateien in S3 hochgeladen werden, und dann die "Fanout" -Funktionen von SNS zu verwenden, um mehrere simultane SQS-Nachrichten zu senden, die dann unabhängig empfangen und bearbeitet werden können.

Wenn Sie "Schritt 2" nur dann und nur dann verarbeiten möchten, wenn "Schritt 1" verarbeitet wird, können Sie eine einzige SQS-Nachricht für "Schritt 1" und dann nur für den erfolgreichen Abschluss von " Schritt 1 ', die letzte Handlung von' Schritt 1 'ist das Senden eines zweiten sqs-Ereignisses für' Schritt 2 'zur weiteren Verarbeitung.