Amazon Simple Storage Service
Entwicklerhandbuch (API-Version 2006-03-01)

Beispiel Schrittweise Anleitung 1: Konfiguration eines Buckets für Benachrichtigungen (Meldungsziel: SNS-Thema und SQS-Warteschlange)

Schrittweise Anleitung – Übersicht

In dieser schrittweisen Anleitung fügen Sie eine Benachrichtigungskonfiguration für ein Bucket hinzu, der Amazon S3 zu Folgendem auffordert:

  • Veröffentlichung von Ereignissen des Typs s3:ObjectCreated:* zu einer Amazon SQS-Warteschlange.

  • Veröffentlichung von Ereignissen des Typs s3:ReducedRedundancyLostObject in einem Amazon SNS-Thema.

Weitere Informationen zur Benachrichtigungskonfiguration finden Sie unter Konfigurieren von Amazon S3-Ereignisbenachrichtigungen

Alle diese Schritte können Sie auf der Konsole erledigen, ohne Code schreiben zu müssen. Darüber hinaus sind Codebeispiele mit AWS SDKs for Java und .NET enthalten, sodass Sie die Benachrichtigungskonfiguration programmgesteuert hinzufügen können.

In dieser schrittweisen Anleitung erledigen Sie Folgendes:

  1. Ein Amazon SNS-Thema erstellen

    Mit der Amazon SNS-Konsole erstellen Sie ein SNS-Thema und abonnieren dieses, sodass alle darin veröffentlichten Ereignisse an Sie weitergegeben werden. Sie geben die email als Kommunikationsprotokoll an. Nachdem Sie ein Thema erstellt haben, sendet Amazon SNS eine E-Mail. Sie müssen auf den Link in der E-Mail klicken, um das Abonnement des Themas zu bestätigen.

    Sie ordnen dem Thema eine Zugriffsrichtlinie zu, um Amazon S3 die Berechtigung zu erteilen, Meldungen zu veröffentlichen.

  2. Erstellen einer Amazon SQS-Warteschlange.

    Mit der Amazon SQS-Konsole erstellen Sie eine SQS-Warteschlange. Sie können auf alle Meldungen zugreifen, die Amazon S3 programmgesteuert an die Warteschlange sendet. Für diese schrittweise Anleitung überprüfen Sie die Benachrichtigungsmitteilungen in der Konsole.

    Sie ordnen dem Thema eine Zugriffsrichtlinie zu, um Amazon S3 die Berechtigung zu erteilen, Meldungen zu veröffentlichen.

  3. Fügen Sie einem Bucket eine Benachrichtigungskonfiguration hinzu.

Schritt 1: Erstellen eines Amazon SNS-Themas

Gehen Sie wie folgt vor, um ein Amazon Simple Notification Service (Amazon SNS)-Thema zu erstellen und zu abonnieren.

  1. Erstellen Sie mit der Amazon SNS-Konsole ein Thema. Anleitung finden Sie unter Erstellen eines Themas im Entwicklerhandbuch für Amazon Simple Notification Service.

  2. Abonnieren Sie das Thema. Für diese Übung geben Sie email als Kommunikationsprotokoll an. Anleitung finden Sie unter Abonnieren eines Themas im Entwicklerhandbuch für Amazon Simple Notification Service.

    Sie erhalten eine E-Mail, in der Sie aufgefordert werden, das Abonnement des Themas zu bestätigen. Bestätigen Sie das Abonnement.

  3. Ersetzen Sie die dem Thema zugeordnete Zugriffsrichtlinie durch die folgende Richtlinie. Sie müssen die Richtlinie aktualisieren, indem Sie den Amazon Resource Name (ARN) Ihres SNS-Themas und den Bucket-Namen angeben:

    { "Version": "2008-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "AWS":"*" }, "Action": [ "SNS:Publish" ], "Resource": "SNS-topic-ARN", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" } } } ] }
  4. Notieren Sie den ARN des Themas.

    Das von Ihnen erstellte SNS-Thema ist eine weitere Ressource in Ihrem AWS-Konto. Sie hat einen eindeutigen ARN (Amazon-Ressourcenname). Sie benötigen diesen ARN im nächsten Schritt. Der ARN hat das folgende Format:

    arn:aws:sns:aws-region:account-id:topic-name

Schritt 2: Erstellen einer Amazon SQS-Warteschlange

Gehen Sie wie folgt vor, um eine Amazon Simple Queue Service (Amazon SQS)-Warteschlange zu erstellen und zu abonnieren.

  1. Verwendung der Amazon SQS-Konsole zum Erstellen einer Warteschlange. Anleitungen finden Sie unter Erste Schritte mit Amazon SQS im Amazon Simple Queue Service-Entwicklerhandbuch.

  2. Ersetzen Sie die der Warteschlange angefügte Zugriffsrichtlinie durch die folgende Richtlinie (wählen Sie in der SQS-Konsole die Warteschlange aus und klicken Sie auf der Registerkarte Permissions (Berechtigungen) auf Edit Policy Document (Advanced) (Richtliniendokument bearbeiten (erweitert)).

    { "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "AWS":"*" }, "Action": [ "SQS:SendMessage" ], "Resource": "SQS-queue-ARN", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" } } } ] }
  3. (Optional) Wenn die Amazon SQS-Warteschlange die serverseitige Verschlüsselung (SSE) verwendet, fügen Sie die folgende Richtlinie zu dem entsprechenden vom Kunden verwalteten AWS KMS-CMK hinzu. Sie müssen die Richtlinie zu einem kundenverwalteten CMK hinzufügen, da der von AWS verwaltete CMK für Amazon SQS nicht geändert werden kann. Weitere Informationen zur Verwendung von SSE für Amazon SQS mit AWS KMS finden Sie unter Schutz von Daten durch serverseitige Verschlüsselung (SSE) und AWS KMS.

    { "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" } ] }
  4. Notieren Sie den ARN der Warteschlange.

    Die von Ihnen erstellte SQS-Warteschlange ist eine weitere Ressource in Ihrem AWS-Konto. Sie hat einen eindeutigen ARN (Amazon-Ressourcenname). Sie benötigen diesen ARN im nächsten Schritt. Der ARN hat das folgende Format:

    arn:aws:sqs:aws-region:account-id:queue-name

Schritt 3: Hinzufügen einer Benachrichtigungskonfiguration zu Ihrem Bucket

Sie können Bucket-Benachrichtigungen entweder über die Amazon S3-Konsole oder programmgesteuert über AWS SDKs aktivieren. Wählen Sie eine der Optionen für die Konfiguration von Benachrichtigungen über Ihren Bucket. Dieser Abschnitt zeigt Beispiele für die Verwendung des AWS SDKs for Java und .NET.

Schritt 3 (Option a): Aktivierung von Benachrichtigungen über einen Bucket unter Verwendung der Konsole

Fügen Sie mithilfe der Amazon S3-Konsole eine Benachrichtigungskonfiguration hinzu, die Amazon S3 zu Folgendem auffordert:

  • Veröffentlichung von Ereignissen des Typs s3:ObjectCreated:* zu Ihrer Amazon SQS-Warteschlange

  • Veröffentlichung von Ereignissen des Typs s3:ReducedRedundancyLostObject zu Ihrem Amazon SNS-Thema

Nachdem Sie die Benachrichtigungskonfiguration gespeichert haben, veröffentlicht Amazon S3 eine Testmeldung, die Sie per E-Mail erhalten.

Anleitungen finden Sie unter Wie kann ich Ereignisbenachrichtigungen für einen S3-Bucket aktivieren und konfigurieren? im Konsolenbenutzerhandbuch für Amazon Simple Storage Service.

Schritt 3 (Option b): Aktivierung von Benachrichtigungen über einen Bucket unter Verwendung des AWS SDK for .NET

Das folgende C#-Codebeispiel zeigt ein vollständiges Listing, das einem Bucket eine Benachrichtigungskonfiguration hinzufügt. Sie müssen den Code aktualisieren und Ihren Bucket-Namen und den ARN des SNS-Themas angeben. Weitere Informationen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Ausführen der Amazon S3 .NET-Codebeispiele.

using Amazon.S3; using Amazon.S3.Model; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class EnableNotificationsTest { private const string bucketName = "*** bucket name ***"; private const string snsTopic = "*** SNS topic ARN ***"; private const string sqsQueue = "*** SQS topic ARN ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); EnableNotificationAsync().Wait(); } static async Task EnableNotificationAsync() { try { PutBucketNotificationRequest request = new PutBucketNotificationRequest { BucketName = bucketName }; TopicConfiguration c = new TopicConfiguration { Events = new List<EventType> { EventType.ObjectCreatedCopy }, Topic = snsTopic }; request.TopicConfigurations = new List<TopicConfiguration>(); request.TopicConfigurations.Add(c); request.QueueConfigurations = new List<QueueConfiguration>(); request.QueueConfigurations.Add(new QueueConfiguration() { Events = new List<EventType> { EventType.ObjectCreatedPut }, Queue = sqsQueue }); PutBucketNotificationResponse response = await client.PutBucketNotificationAsync(request); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' ", e.Message); } catch (Exception e) { Console.WriteLine("Unknown error encountered on server. Message:'{0}' ", e.Message); } } } }

Schritt 3 (Option c): Aktivierung von Benachrichtigungen über einen Bucket unter Verwendung des AWS SDK for Java

Die folgende Beispiel veranschaulicht, wie Sie einem Bucket eine Benachrichtigungskonfiguration hinzufügen. Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Testen der Amazon S3-Java-Codebeispiele.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.io.IOException; import java.util.EnumSet; public class EnableNotificationOnABucket { public static void main(String[] args) throws IOException { String bucketName = "*** Bucket name ***"; Regions clientRegion = Regions.DEFAULT_REGION; String snsTopicARN = "*** SNS Topic ARN ***"; String sqsQueueARN = "*** SQS Queue ARN ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); BucketNotificationConfiguration notificationConfiguration = new BucketNotificationConfiguration(); // Add an SNS topic notification. notificationConfiguration.addConfiguration("snsTopicConfig", new TopicConfiguration(snsTopicARN, EnumSet.of(S3Event.ObjectCreated))); // Add an SQS queue notification. notificationConfiguration.addConfiguration("sqsQueueConfig", new QueueConfiguration(sqsQueueARN, EnumSet.of(S3Event.ObjectCreated))); // Create the notification configuration request and set the bucket notification configuration. SetBucketNotificationConfigurationRequest request = new SetBucketNotificationConfigurationRequest( bucketName, notificationConfiguration); s3Client.setBucketNotificationConfiguration(request); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }

Schritt 4: Testen der Einrichtung

Jetzt können Sie die Einrichtung testen, indem Sie ein Objekt in Ihren Bucket hochladen und die Ereignisbenachrichtigung in der Amazon SQS-Konsole überprüfen. Anleitungen finden Sie unter Empfangen einer Nachricht im Amazon Simple Queue Service-Entwicklerhandbuch, Abschnitt „Erste Schritte”..