Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

예제 안내 1: 버킷의 알림 구성(메시지 대상: SNS 주제 및 SQS 대기열)

안내 요약

이 안내에서는 Amazon S3에서 다음을 수행하도록 요청하는 알림 구성을 버킷에 추가합니다.

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

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

알림 구성에 대한 자세한 내용은 Amazon S3 이벤트 알림 구성 단원을 참조하십시오.

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

이 안내에서는 다음을 수행합니다.

  1. Amazon SNS 주제를 만듭니다.

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

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

  2. Amazon SQS 대기열을 생성합니다.

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

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

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

1단계: Amazon SNS 주제 만들기

다음 단계에 따라 Amazon Simple Notification Service(Amazon SNS) 주제를 만들고 구독합니다.

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

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

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

  3. 다음 정책에 따라 주제에 연결된 액세스 정책을 교체합니다. SNS 주제 ARN 및 버킷 이름을 제공하여 정책을 업데이트해야 합니다.

    { "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. 주제 ARN을 기록합니다.

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

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

2단계: Amazon SQS 대기열 만들기

다음 단계에 따라 Amazon Simple Queue Service(Amazon SQS) 대기열을 만들고 구독합니다.

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

  2. 대기열에 연결된 액세스 정책을 다음 정책으로 교체합니다. SQS 콘솔에서 대기열을 선택한 후 [Permissions] 탭에서 [Edit Policy Document (Advanced)]를 클릭합니다.

    { "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. (선택 사항) Amazon SQS 대기열의 서버 측 암호화(SSE)가 활성화되어 있는 경우 연결된 사용자 지정 AWS Key Management Service(AWS KMS) 고객 마스터 키(CMK)에 다음 정책을 추가합니다. Amazon SQS용 기본 AWS 관리형 CMK를 수정할 수 없으므로 사용자 지정 CMK에 정책을 추가해야 합니다. AWS KMS와 함께 Amazon SQS용 SSE를 사용하는 방법에 대한 자세한 내용은 서버 측 암호화(SSE) 및 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. 대기열 ARN을 기록합니다.

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

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

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

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

3단계(옵션 a): 콘솔을 사용하여 버킷에 알림 활성화

Amazon S3 콘솔을 사용하여 Amazon S3에서 다음을 수행하도록 요청하는 알림 구성을 추가합니다.

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

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

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

지침은 S3 버킷에 대한 이벤트 알림을 활성화하고 구성하려면 어떻게 해야 합니까?(출처: Amazon Simple Storage Service 콘솔 사용 설명서)를 참조하십시오.

3단계(옵션 b): .NET용 AWS SDK를 사용하여 버킷에 알림 활성화

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

// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-s3-developer-guide/blob/master/LICENSE-SAMPLECODE.) 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); } } } }

3단계(옵션 c): AWS SDK for Java를 사용하여 버킷에 대한 알림 활성화

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

import java.io.IOException; import java.util.EnumSet; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.BucketNotificationConfiguration; import com.amazonaws.services.s3.model.TopicConfiguration; import com.amazonaws.services.s3.model.QueueConfiguration; import com.amazonaws.services.s3.model.S3Event; import com.amazonaws.services.s3.model.SetBucketNotificationConfigurationRequest; public class EnableNotificationOnABucket { public static void main(String[] args) throws IOException { String bucketName = "*** Bucket name ***"; String clientRegion = "*** Client 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 개발자 안내서 "시작하기" 단원메시지 수신을 참조하십시오.