Procedura dettagliata: configurazione di un bucket per le notifiche (argomento o coda) SNS SQS - Amazon Simple Storage Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Procedura dettagliata: configurazione di un bucket per le notifiche (argomento o coda) SNS SQS

Puoi ricevere notifiche Amazon S3 utilizzando Amazon Simple Notification Service (AmazonSNS) o Amazon Simple Queue Service (Amazon). SQS In questa procedura dettagliata, aggiungi una configurazione di notifica al tuo bucket utilizzando un SNS argomento Amazon e una coda Amazon. SQS

Nota

Le code di Amazon Simple Queue Service FIFO (First-In-First-Out) non sono supportate come destinazione di notifica degli eventi di Amazon S3. Per inviare una notifica per un evento Amazon S3 a una SQS FIFO coda Amazon, puoi utilizzare Amazon. EventBridge Per ulteriori informazioni, consulta Attivazione di Amazon EventBridge.

Riepilogo della spiegazione passo per passo

Questa spiegazione passo per passo aiuta a completare le seguenti operazioni:

  • Pubblica eventi del s3:ObjectCreated:* tipo in una SQS coda Amazon.

  • Pubblica eventi del s3:ReducedRedundancyLostObject tipo su un SNS argomento Amazon.

Per informazioni sulla configurazione delle notifiche, consulta Utilizzo di Amazon SQSSNS, Amazon e Lambda.

È possibile eseguire tutte queste fasi utilizzando la console, senza scrivere alcun codice. Inoltre, esempi di codice utilizzati AWS SDKs per Java e. NETvengono inoltre forniti per aiutarti ad aggiungere configurazioni di notifica a livello di codice.

La procedura include le seguenti fasi:

  1. Crea una SQS coda Amazon.

    Utilizzando la SQS console Amazon, crea una SQS coda. È possibile accedere a qualsiasi messaggio che Amazon S3 invia alla coda in modo programmatico. Tuttavia, per questa procedura guidata, i messaggi di notifica si verificano nella console.

    Collega una policy di accesso all'argomento per concedere ad Amazon S3 l'autorizzazione a pubblicare messaggi.

  2. Crea un SNS argomento Amazon.

    Utilizzando la SNS console Amazon, crea un SNS argomento e iscriviti all'argomento. In questo modo, riceverai tutti gli eventi pubblicati. Si specifica l'e-mail come protocollo di comunicazione. Dopo aver creato un argomento, Amazon SNS invia un'e-mail. È necessario utilizzare il collegamento nell'e-mail per confermare la sottoscrizione all'argomento.

    Collega una policy di accesso all'argomento per concedere ad Amazon S3 l'autorizzazione a pubblicare messaggi.

  3. Aggiungere una configurazione delle notifiche a un bucket.

Fase 1: Creare una SQS coda Amazon

Segui i passaggi per creare e iscriverti a una coda Amazon Simple Queue Service (AmazonSQS).

  1. Utilizzando la SQS console Amazon, crea una coda. Per istruzioni, consulta Getting Started with Amazon SQS nella Amazon Simple Queue Service Developer Guide.

  2. Sostituire la policy di accesso allegata alla coda con la policy riportata di seguito.

    1. Nella SQS console Amazon, nell'elenco Queues, scegli il nome della coda.

    2. Nella scheda Policy di accesso, seleziona Modifica.

    3. Sostituire la policy di accesso allegata alla coda. In esso, fornisci il tuo Amazon SQSARN, il nome del bucket di origine e l'ID dell'account proprietario del bucket.

      { "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "SQS-queue-ARN", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }
    4. Seleziona Salva.

  3. (Facoltativo) Se la SQS coda Amazon o l'SNSargomento Amazon è la crittografia lato server abilitata con AWS Key Management Service (AWS KMS), aggiungi la seguente policy alla chiave di crittografia simmetrica associata gestita dal cliente.

    È necessario aggiungere la politica a una chiave gestita dal cliente perché non è possibile modificare la chiave AWS gestita per Amazon SQS o AmazonSNS.

    { "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": "*" } ] }

    Per ulteriori informazioni sull'utilizzo SSE per Amazon SQS e Amazon SNS con AWS KMS, consulta quanto segue:

  4. Nota la coda. ARN

    La SQS coda che hai creato è un'altra risorsa della tua. Account AWS Ha un Amazon Resource Name univoco (ARN). Ne hai bisogno ARN nella fase successiva. ARNÈ del seguente formato:

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

Passaggio 2: creare un SNS argomento Amazon

Segui i passaggi per creare e iscriverti a un SNS argomento Amazon.

  1. Utilizzando la SNS console Amazon, crea un argomento. Per istruzioni, consulta Creazione di un SNS argomento Amazon nella Guida per gli sviluppatori di Amazon Simple Notification Service.

  2. Effettuare la sottoscrizione all'argomento. Per questo esercizio, utilizzare l'e-mail come protocollo di comunicazione. Per istruzioni, consulta Abbonamento a un SNS argomento Amazon nella Guida per gli sviluppatori di Amazon Simple Notification Service.

    Si riceverà un'e-mail in cui è richiesto di confermare la sottoscrizione all'argomento. Confermare la sottoscrizione.

  3. Sostituire la policy di accesso collegata all'argomento con la policy riportata di seguito. In esso, fornisci l'SNSargomentoARN, il nome del bucket e l'ID dell'account del proprietario del bucket.

    { "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "Example SNS topic policy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "SNS-topic-ARN", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:amzn-s3-demo-bucket" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }
  4. Nota l'argomento. ARN

    L'SNSargomento che hai creato è un'altra tua Account AWS risorsa e ha una caratteristica unicaARN. Ne avrai bisogno ARN nella fase successiva. ARNSarà del seguente formato:

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

Fase 3: aggiungere una configurazione delle notifiche al bucket

Puoi abilitare le notifiche bucket utilizzando la console Amazon S3 o a livello di codice utilizzando. AWS SDKs Scegliere una delle opzioni per configurare le notifiche nel bucket. Questa sezione fornisce esempi di codice che utilizzano for Java e AWS SDKs. NET.

Opzione A: abilitare le notifiche in un bucket utilizzando la console

Utilizzando la console di Amazon S3, aggiungi una configurazione di notifica che richiede ad Amazon S3 di:

  • Pubblica gli eventi del tipo All object create events nella tua SQS coda Amazon.

  • Pubblica gli eventi dell'oggetto in RRS formato perduto sul tuo SNS argomento Amazon.

Una volta salvata la configurazione delle notifiche, Amazon S3 pubblica un messaggio di testo che viene inviato tramite e-mail.

Per istruzioni, consulta Attivazione e configurazione delle notifiche di eventi tramite la console di Amazon S3.

Opzione B: abilita le notifiche su un bucket utilizzando il AWS SDKs

.NET

L'esempio di codice C# riportato di seguito include il codice completo che aggiunge una configurazione delle notifiche in un bucket. È necessario aggiornare il codice e fornire il nome e SNS l'argomento del bucket. ARN Per informazioni sulla configurazione e l'esecuzione degli esempi di codice, consulta Getting Started with the AWS SDK for. NETnella AWS SDKforma. NETGuida per gli sviluppatori.

using Amazon; 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); } } } }
Java

Nell'esempio seguente viene mostrato come aggiungere una configurazione delle notifiche a un bucket. Per istruzioni su come creare e testare un esempio funzionante, consulta Getting Started nella AWS SDK for Java Developer Guide.

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(); } } }

Fase 4: eseguire il test della configurazione

Ora puoi testare la configurazione caricando un oggetto nel tuo bucket e verificando la notifica dell'evento nella console Amazon. SQS Per istruzioni, consulta la sezione Ricezione di un messaggio nella sezione "Nozioni di base" della Guida per gli sviluppatori di Amazon Simple Queue Service.