Spiegazione passo per passo: configurare un bucket per le notifiche (argomento SNS o coda 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à.

Spiegazione passo per passo: configurare un bucket per le notifiche (argomento SNS o coda SQS)

Puoi ricevere notifiche Amazon S3 utilizzando Amazon Simple Notification Service (Amazon SNS) o Amazon Simple Queue Service (Amazon SQS). Nella spiegazione passo per passo seguente viene aggiunta una configurazione di notifica al bucket utilizzando un argomento Amazon SNS e una coda Amazon SQS.

Nota

Le code FIFO (First-In-First-Out) di Amazon Simple Queue Service non sono supportate come destinazione delle notifiche degli eventi di Amazon S3. Per inviare una notifica per un evento Amazon S3 a una coda FIFO di Amazon SQS, 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:

  • Pubblicare eventi di tipo s3:ObjectCreated:* in una coda Amazon SQS.

  • Pubblicare eventi di tipo s3:ReducedRedundancyLostObject in un argomento Amazon SNS.

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

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

La procedura include le seguenti fasi:

  1. Creare una coda Amazon SQS.

    Attraverso la console di Amazon SQS, crea una coda SQS. È 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. Creare un argomento Amazon SNS.

    Utilizzando la console di Amazon SNS, crea un argomento SNS 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 coda Amazon SQS

Segui le fasi per creare una coda Amazon Simple Queue Service (Amazon SQS) ed effettuarvi la sottoscrizione.

  1. Utilizzando la console di Amazon SQS, creare una coda. Per istruzioni, consulta la sezione Nozioni di base su Amazon SQS nella Guida per gli sviluppatori di Amazon Simple Queue Service.

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

    1. Nella console di Amazon SQS, nell'elenco Code, seleziona il nome della coda.

    2. Nella scheda Policy di accesso, seleziona Modifica.

    3. Sostituire la policy di accesso allegata alla coda. Fornisci l'ARN di Amazon SQS, il nome del bucket di origine e l'ID dell'account del 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 coda Amazon SQS o l'argomento Amazon SNS è 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.

    Devi aggiungere la policy a una chiave gestita dal cliente perché non è possibile modificare la chiave gestita da AWS per Amazon SQS o Amazon SNS.

    { "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 di SSE per Amazon SQS e Amazon SNS AWS KMS con, consulta quanto segue:

  4. Prendere nota dell'ARN della coda.

    La coda SQS creata è un'altra risorsa nel tuo Account AWS. Dispone di un Amazon Resource Name (ARN) univoco. Il presente ARN è necessario nella fase successiva. Il nome ARN presenta il formato seguente:

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

Fase 2: creare un argomento Amazon SNS

Completa la procedura per creare e sottoscrivere un argomento Amazon SNS.

  1. Utilizzando la console di Amazon SNS, crea un argomento. Per le istruzioni, consulta la sezione Creazione di un argomento Amazon SNS 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 le istruzioni, consulta la sezione Sottoscrizione a un argomento di Amazon SNS 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. Fornisci l'ARN dell'argomento SNS, 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. Prendere nota dell'ARN dell'argomento.

    L'argomento SNS che hai creato è un'altra tua Account AWS risorsa e ha un ARN unico. L'ARN è necessario nella fase successiva. L'ARN ha il formato seguente:

    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 AWS SDKs for Java e.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:

  • Pubblicare gli eventi di tipo Tutti gli eventi di creazione dell'oggetto nella coda Amazon SQS.

  • Pubblica gli eventi di tipo Oggetto perso in RRS sul tuo argomento Amazon SNS.

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 AWS SDKs

.NET

L'esempio di codice C# riportato di seguito include il codice completo che aggiunge una configurazione delle notifiche in un bucket. Occorre aggiornare il codice e fornire il nome del bucket e l'ARN dell'argomento SNS. Per informazioni sulla configurazione e l'esecuzione degli esempi di codice, consulta Getting Started with the AWS SDK for .NET nella AWS SDK for .NET Developer Guide.

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 è possibile testare la configurazione caricando un oggetto nel bucket e verificando la notifica di eventi nella console di 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.