연습: 알림용 버킷 구성(SNS 주제 또는 SQS 대기열) - Amazon Simple Storage Service

연습: 알림용 버킷 구성(SNS 주제 또는 SQS 대기열)

Amazon Simple Notification Service(Amazon SNS) 또는 Amazon Simple Queue Service(Amazon SQS)를 통해 Amazon S3 알림을 받을 수 있습니다. 이 연습에서는 Amazon SNS 주제 및 Amazon SQS 대기열을 사용하여 버킷에 알림 구성을 추가합니다.

참고

Amazon Simple Queue Service FIFO(선입선출) 대기열은 Amazon S3 이벤트 알림 대상으로 지원되지 않습니다. Amazon S3 이벤트에 대한 알림을 Amazon SQS FIFO 대기열로 보내려면 Amazon EventBridge를 사용하면 됩니다. 자세한 내용은 Amazon EventBridge 사용 설정 단원을 참조하십시오.

연습 요약

이 연습은 다음을 수행하는 데 도움이 됩니다.

  • Amazon SQS 대기열에 s3:ObjectCreated:* 유형의 이벤트를 게시합니다.

  • Amazon SNS 주제에 s3:ReducedRedundancyLostObject 유형의 이벤트를 게시합니다.

알림 구성에 대한 자세한 내용은 Amazon SQS, Amazon SNS 및 Lambda 사용 단원을 참조하십시오.

콘솔을 사용하면 코드를 생성하지 않고도 이러한 모든 단계를 수행할 수 있습니다. 또한, AWS SDK for Java 및 .NET을 사용하는 코드 예제가 제공되므로 프로그래밍 방식으로 알림 구성을 추가할 수 있습니다.

이 절차에는 다음 단계가 포함됩니다.

  1. Amazon SQS 대기열 생성

    Amazon SQS 콘솔을 사용하여 SQS 대기열을 생성합니다. 프로그래밍 방식으로 Amazon S3이 대기열로 전송하는 모든 메시지에 액세스할 수 있습니다. 그러나 이 시연에서는 콘솔에서 알림 메시지를 확인합니다.

    대기열에 액세스 정책을 연결하여 메시지를 게시할 수 있는 권한을 Amazon S3에 부여합니다.

  2. Amazon SNS 주제 생성

    Amazon SNS 콘솔을 사용하여 SNS 주제를 생성하고 주제를 구독합니다. 그렇게 하면 게시된 모든 이벤트가 사용자에게 전송됩니다. 통신 프로토콜로 이메일을 지정합니다. 주제를 생성하면 Amazon SNS에서 이메일을 전송합니다. 이메일에 포함된 링크를 사용하여 주제 구독을 확인합니다.

    주제에 액세스 정책을 연결하여 메시지를 게시할 수 있는 권한을 Amazon S3에 부여합니다.

  3. 버킷에 알림 구성을 추가합니다.

1단계: Amazon SQS 대기열 생성

단계에 따라 Amazon Simple Queue Service(Amazon SQS) 대기열을 생성하고 구독합니다.

  1. Amazon SQS 콘솔을 사용하여 대기열을 생성합니다. 자세한 내용은 Amazon Simple Queue Service 개발자 안내서Amazon SQS 시작하기를 참조하십시오.

  2. 대기열에 연결된 액세스 정책을 다음 정책으로 바꿉니다.

    1. Amazon SQS 콘솔의 대기열 목록에서 대기열 이름을 선택합니다.

    2. 액세스 정책 탭에서 편집을 선택합니다.

    3. 대기열에 연결된 액세스 정책을 바꿉니다. 여기에 Amazon SQS ARN, 원본 버킷 이름 및 버킷 소유자 계정 ID를 제공합니다.

      { "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. Save(저장)를 선택합니다.

  3. (선택 사항) AWS Key Management Service(AWS KMS)를 사용하여 Amazon SQS 대기열 또는 Amazon SNS 주제에 서버 측 암호화가 사용되어 있는 경우 연결된 대칭 암호화 고객 관리형 키에 다음 정책을 추가합니다.

    Amazon SQS 또는 Amazon SNS용 AWS 관리형 키는 수정할 수 없으므로 고객 관리형 키에 정책을 추가해야 합니다.

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

    AWS KMS에서 Amazon SQS 및 Amazon SNS용 SSE를 사용하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

    • Amazon Simple Notification Service 개발자 안내서키 관리

    • Amazon Simple Queue Service 개발자 안내서키 관리

  4. 대기열 ARN을 기록합니다.

    생성한 SQS 대기열은 AWS 계정에 있는 또 다른 리소스입니다. 고유한 Amazon 리소스 이름(ARN)을 가집니다. 다음 단계에서 이 ARN을 사용합니다. ARN의 형식은 다음과 같습니다.

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

2단계: Amazon SNS 주제 생성

다음 단계에 따라 Amazon SNS 주제를 생성하고 구독합니다.

  1. Amazon SNS 콘솔을 사용하여 주제를 생성합니다. 자세한 내용은 Amazon Simple Notification Service 개발자 안내서에서 Amazon SNS 주제 생성을 참조하십시오.

  2. 주제를 구독합니다. 이 실습에서는 통신 프로토콜로 전자 메일을 사용합니다. 자세한 내용은 Amazon Simple Notification Service 개발자 안내서에서 Amazon SNS 주제 구독을 참조하십시오.

    주제 구독을 확인하도록 요청하는 전자 메일이 전송되면 구독을 확인합니다.

  3. 주제에 연결된 액세스 정책을 다음 정책으로 교체합니다. 여기에 SNS 주제 ARN, 버킷 이름 및 버킷 소유자의 계정 ID를 제공합니다.

    { "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:*:*:bucket-name" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }
  4. 주제 ARN을 기록합니다.

    생성된 SNS 주제는 AWS 계정의 리소스이며 따라서 고유한 ARN을 가집니다. 다음 단계에서 이 ARN을 사용합니다. ARN의 형식은 다음과 같습니다.

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

3단계: 버킷에 알림 구성 추가

Amazon S3 콘솔 또는 AWS SDK를 사용한 프로그래밍 방식으로 버킷 알림을 사용할 수 있습니다. 다음 옵션 중 하나를 선택하여 버킷에 알림을 구성합니다. 이 섹션에서는 AWS SDK for Java 및 .NET을 사용한 코드 예제를 제공합니다.

옵션 A: 콘솔을 사용하여 버킷에 대한 알림 사용 설정

Amazon S3 콘솔을 사용하여 다음 작업을 Amazon S3에 요청하는 알림 구성을 추가합니다.

  • Amazon SQS 대기열에 모든 객체 생성 이벤트 유형의 이벤트를 게시합니다.

  • Amazon SNS 주제에 RRS 객체 손실 유형의 이벤트를 게시합니다.

알림 구성을 저장하면 Amazon S3이 테스트 메시지를 게시하고 이메일을 통해 이 테스트 메시지가 전송됩니다.

지침은 Amazon S3 콘솔을 사용하여 이벤트 알림 사용 설정 및 구성 단원을 참조하십시오.

옵션 B: AWS SDK를 사용하여 버킷에 대한 알림 사용

.NET

다음 C# 코드 예제는 버킷에 알림 구성을 추가하는 전체 코드를 제공합니다. 이 코드를 업데이트하여 버킷 이름과 SNS 주제 ARN을 제공해야 합니다. 실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Amazon S3 .NET 코드 예제 실행 섹션을 참조하십시오.

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

다음 예제에서는 버킷에 알림 구성을 추가하는 방법을 보여줍니다. 실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Amazon S3 Java 코드 예제 테스트 섹션을 참조하십시오.

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

4단계: 설정 테스트

이제 버킷에 객체를 업로드한 후 Amazon SQS 콘솔에서 이벤트 알림을 확인하여 설정을 테스트할 수 있습니다. 자세한 내용은 Amazon Simple Queue Service 개발자 안내서의 '시작하기' 섹션에서 메시지 수신을 참조하십시오.