Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Arbeiten Sie mit S3-Ereignisbenachrichtigungen
Um Ihnen bei der Überwachung der Aktivitäten in Ihren Buckets zu helfen, kann Amazon S3 Benachrichtigungen senden, wenn bestimmte Ereignisse eintreten. Das Amazon S3 S3-Benutzerhandbuch enthält Informationen zu den Benachrichtigungen, die ein Bucket versenden kann.
Mit dem für Java können Sie einen Bucket einrichten, um Ereignisse an vier mögliche Ziele SDK zu senden:
-
Amazon Simple Notification Service-Themen
-
Amazon Simple Queue Service Warteschlangen als Ziele
-
AWS Lambda Funktionen
-
Amazon EventBridge
Wenn Sie einen Bucket einrichten, an den Ereignisse gesendet werden sollen EventBridge, haben Sie die Möglichkeit, eine EventBridge Regel zu konfigurieren, um dasselbe Ereignis an mehrere Ziele weiterzuleiten. Wenn Sie Ihren Bucket so konfigurieren, dass er direkt an eines der ersten drei Ziele sendet, kann für jedes Ereignis nur ein Zieltyp angegeben werden.
Im nächsten Abschnitt erfahren Sie, wie Sie einen Bucket mithilfe von SDK for Java konfigurieren, um S3-Ereignisbenachrichtigungen auf zwei Arten zu senden: direkt an eine SQS Amazon-Warteschlange und an EventBridge.
Der letzte Abschnitt zeigt Ihnen, wie Sie die S3-Ereignisbenachrichtigungen verwendenAPI, um objektorientiert mit Benachrichtigungen zu arbeiten.
Konfigurieren Sie einen Bucket so, dass er direkt an ein Ziel gesendet wird
Im folgenden Beispiel wird ein Bucket so konfiguriert, dass Benachrichtigungen gesendet werden, wenn in einem Bucket Ereignisse zur Objekterstellung oder Objektkennzeichnung auftreten.
static void processS3Events(String bucketName, String queueArn) { // Configure the bucket to send Object Created and Object Tagging notifications to an existing SQS queue. s3Client.putBucketNotificationConfiguration(b -> b .notificationConfiguration(ncb -> ncb .queueConfigurations(qcb -> qcb .events(Event.S3_OBJECT_CREATED, Event.S3_OBJECT_TAGGING) .queueArn(queueArn))) .bucket(bucketName) ); }
Der oben gezeigte Code richtet eine Warteschlange für den Empfang von zwei Arten von Ereignissen ein. Praktischerweise können Sie mit queueConfigurations
dieser Methode bei Bedarf mehrere Warteschlangenziele festlegen. Außerdem können Sie in der notificationConfiguration
Methode zusätzliche Ziele festlegen, z. B. ein oder mehrere SNS Amazon-Themen oder eine oder mehrere Lambda-Funktionen. Das folgende Snippet zeigt ein Beispiel mit zwei Warteschlangen und drei Arten von Zielen.
s3Client.putBucketNotificationConfiguration(b -> b .notificationConfiguration(ncb -> ncb .queueConfigurations(qcb -> qcb .events(Event.S3_OBJECT_CREATED, Event.S3_OBJECT_TAGGING) .queueArn(queueArn), qcb2 -> qcb2.
<...>
) .topicConfigurations(tcb -> tcb.<...>
) .lambdaFunctionConfigurations(lfcb -> lfcb.<...>
)) .bucket(bucketName) );
Das GitHub Codebeispiel-Repository enthält das vollständige Beispiel
Konfigurieren Sie einen Bucket, an den gesendet werden soll EventBridge
Im folgenden Beispiel wird ein Bucket konfiguriert, an den Benachrichtigungen gesendet werden sollen EventBridge.
public static String setBucketNotificationToEventBridge(String bucketName) { // Enable bucket to emit S3 Event notifications to EventBridge. s3Client.putBucketNotificationConfiguration(b -> b .bucket(bucketName) .notificationConfiguration(b1 -> b1 .eventBridgeConfiguration(SdkBuilder::build)) .build());
Wenn Sie einen Bucket konfigurieren, an den Ereignisse gesendet werden sollen EventBridge, geben Sie einfach das EventBridge Ziel an, nicht die Art der Ereignisse oder das endgültige Ziel, an das gesendet EventBridge werden soll. Sie konfigurieren die ultimativen Ziele und Ereignistypen mithilfe SDK des EventBridge Java-Clients.
Der folgende Code zeigt, wie Sie die Konfiguration so konfigurieren EventBridge , dass objektgenerierte Ereignisse einem Thema und einer Warteschlange zugewiesen werden.
public static String configureEventBridge(String topicArn, String queueArn) { try { // Create an EventBridge rule to route Object Created notifications. PutRuleRequest putRuleRequest = PutRuleRequest.builder() .name(RULE_NAME) .eventPattern(""" { "source": ["aws.s3"], "detail-type": ["Object Created"], "detail": { "bucket": { "name": ["%s"] } } } """.formatted(bucketName)) .build(); // Add the rule to the default event bus. PutRuleResponse putRuleResponse = eventBridgeClient.putRule(putRuleRequest) .whenComplete((r, t) -> { if (t != null) { logger.error("Error creating event bus rule: " + t.getMessage(), t); throw new RuntimeException(t.getCause().getMessage(), t); } logger.info("Event bus rule creation request sent successfully. ARN is: {}", r.ruleArn()); }).join(); // Add the existing SNS topic and SQS queue as targets to the rule. eventBridgeClient.putTargets(b -> b .eventBusName("default") .rule(RULE_NAME) .targets(List.of ( Target.builder() .arn(queueArn) .id("Queue") .build(), Target.builder() .arn(topicArn) .id("Topic") .build()) ) ).join(); return putRuleResponse.ruleArn(); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return null; }
Um EventBridge in Ihrem Java-Code damit zu arbeiten, fügen Sie Ihrer pom.xml
Maven-Datei eine Abhängigkeit vom eventbridge
Artefakt hinzu.
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>eventbridge</artifactId> </dependency>
Das GitHub Repository mit den Codebeispielen enthält das vollständige Beispiel zum
Verwenden Sie die S3-EreignisbenachrichtigungenAPI, um Ereignisse zu verarbeiten
Nachdem ein Ziel S3-Benachrichtigungsereignisse empfangen hat, können Sie diese mithilfe der S3-Ereignisbenachrichtigungen objektorientiert verarbeiten. API Sie können die S3-Ereignisbenachrichtigungen verwendenAPI, um mit Ereignisbenachrichtigungen zu arbeiten, die direkt an ein Ziel gesendet werden (wie im ersten Beispiel gezeigt), aber nicht mit weitergeleiteten Benachrichtigungen. EventBridge S3-Ereignisbenachrichtigungen, die von Buckets gesendet werden, um eine andere Struktur zu EventBridge enthalten, die die S3-Ereignisbenachrichtigungen derzeit API nicht verarbeiten können.
Abhängigkeit hinzufügen
Die S3-Ereignisbenachrichtigungen API wurden mit Version 2.25.11 von SDK für Java 2.x veröffentlicht.
Um die S3-Ereignisbenachrichtigungen zu verwendenAPI, fügen Sie Ihrem Maven das erforderliche Abhängigkeitselement hinzu, pom.xml
wie im folgenden Ausschnitt gezeigt.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.X.X1
</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3-event-notifications</artifactId>
</dependency>
</dependencies>
1 Letzte Version.
Benutze die S3EventNotification
Klasse
Erstellen Sie eine S3EventNotification
Instanz aus einer JSON Zeichenfolge
Um eine JSON Zeichenfolge in ein S3EventNotification
Objekt zu konvertieren, verwenden Sie die statischen Methoden der S3EventNotification
Klasse, wie im folgenden Beispiel gezeigt.
import software.amazon.awssdk.eventnotifications.s3.model.S3EventNotification import software.amazon.awssdk.eventnotifications.s3.model.S3EventNotificationRecord import software.amazon.awssdk.services.sqs.model.Message; public class S3EventNotificationExample { ... void receiveMessage(Message message) { // Message received from SQSClient. String sqsEventBody = message.body(); S3EventNotification s3EventNotification = S3EventNotification.fromJson(sqsEventBody); // Use getRecords() to access all the records in the notification. List<S3EventNotificationRecord> records = s3EventNotification.getRecords(); S3EventNotificationRecord record = records.stream().findFirst(); // Use getters on the record to access individual attributes. String awsRegion = record.getAwsRegion(); String eventName = record.getEventName(); String eventSource = record.getEventSource(); } }
In diesem Beispiel konvertiert die fromJson
Methode die JSON Zeichenfolge in ein S3EventNotification
Objekt. Fehlende Felder in der JSON Zeichenfolge führen zu null
Werten in den entsprechenden Java-Objektfeldern und alle zusätzlichen Felder in der JSON werden ignoriert.
APIsWeitere Informationen zu einer Ereignisbenachrichtigung finden Sie in der API Referenz fürS3EventNotificationRecord
.
Konvertiert eine S3EventNotification
Instanz in eine JSON Zeichenfolge
Verwenden Sie die Methode toJson
(ortoJsonPretty
), um ein S3EventNotification
Objekt in eine JSON Zeichenfolge zu konvertieren, wie im folgenden Beispiel gezeigt.
import software.amazon.awssdk.eventnotifications.s3.model.S3EventNotification public class S3EventNotificationExample { ... void toJsonString(S3EventNotification event) { String json = event.toJson(); String jsonPretty = event.toJsonPretty(); System.out.println("JSON: " + json); System.out.println("Pretty JSON: " + jsonPretty); } }
Felder fürGlacierEventData
, ReplicationEventData
IntelligentTieringEventData
, und LifecycleEventData
sind von der Liste ausgenommen, JSON falls sie es sindnull
. Andere null
Felder werden als null
serialisiert.
Im Folgenden wird eine Beispielausgabe der toJsonPretty
Methode für ein S3-Objekt-Tagging-Ereignis gezeigt.
{ "Records" : [ { "eventVersion" : "2.3", "eventSource" : "aws:s3", "awsRegion" : "us-east-1", "eventTime" : "2024-07-19T20:09:18.551Z", "eventName" : "ObjectTagging:Put", "userIdentity" : { "principalId" : "AWS:XXXXXXXXXXX" }, "requestParameters" : { "sourceIPAddress" : "XXX.XX.XX.XX" }, "responseElements" : { "x-amz-request-id" : "XXXXXXXXXXXX", "x-amz-id-2" : "XXXXXXXXXXXXX" }, "s3" : { "s3SchemaVersion" : "1.0", "configurationId" : "XXXXXXXXXXXXX", "bucket" : { "name" : "DOC-EXAMPLE-BUCKET", "ownerIdentity" : { "principalId" : "XXXXXXXXXXX" }, "arn" : "arn:aws:s3:::XXXXXXXXXX" }, "object" : { "key" : "akey", "size" : null, "eTag" : "XXXXXXXXXX", "versionId" : null, "sequencer" : null } } } ] }
Ein vollständiges Beispiel