메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 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. Using Amazon SNS console create a topic. For instructions, see Create a Topic in the Amazon Simple Notification Service 개발자 안내서.

  2. Subscribe to the topic. For this exercise, use email as the communications protocol. For instructions, see Subscribe to a Topic in the Amazon Simple Notification Service 개발자 안내서.

    You will get email requesting you to confirm your subscription to the topic. Confirm the subscription.

  3. Replace the access policy attached to the topic by the following policy. You must update the policy by providing the your SNS topic ARN and bucket name.:

    Copy
    { "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. Note the topic ARN.

    The SNS topic you created is another resource in your AWS account, and it has a unique Amazon Resource Name (ARN). You will need this ARN in the next step. The ARN will be of the following format:

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

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

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

  1. Using the Amazon SQS console, create a queue. For instructions, see Getting Started with Amazon SQS in the Amazon Simple Queue Service 개발자 안내서.

  2. Replace the access policy attached to the queue with the following policy (in the SQS console, you select the queue, and in the Permissions tab, click Edit Policy Document (Advanced).

    Copy
    { "Version": "2008-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. Note the queue ARN

    The SQS queue you created is another resource in your AWS account, and it has a unique Amazon Resource Name (ARN). You will need this ARN in the next step. The ARN will be of the following format:

    Copy
    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 코드 예시 실행 단원을 참조하십시오.

Copy
using System; using System.Collections.Generic; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.docsamples { class EnableNotifications { static string bucketName = "***bucket name***"; static string snsTopic = "***SNS topic ARN***"; static string sqsQueue = "***SQS queue ARN***"; static string putEventType = "s3:ObjectCreated:Put"; static string rrsObjectLostType = "s3:ObjectCreated:Copy"; public static void Main(string[] args) { using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) { Console.WriteLine("Enabling Notification on a bucket"); EnableNotification(client); } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } static void EnableNotification(IAmazonS3 client) { try { List<Amazon.S3.Model.TopicConfiguration> topicConfigurations = new List<TopicConfiguration>(); topicConfigurations.Add(new TopicConfiguration() { Event = rrsObjectLostType, Topic = snsTopic }); List<Amazon.S3.Model.QueueConfiguration> queueConfigurations = new List<QueueConfiguration>(); queueConfigurations.Add(new QueueConfiguration() { Events = new List<string> { putEventType }, Queue = sqsQueue }); PutBucketNotificationRequest request = new PutBucketNotificationRequest { BucketName = bucketName, TopicConfigurations = topicConfigurations, QueueConfigurations = queueConfigurations }; PutBucketNotificationResponse response = client.PutBucketNotification(request); } catch (AmazonS3Exception amazonS3Exception) { if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) { Console.WriteLine("Check the provided AWS Credentials."); Console.WriteLine( "To sign up for service, go to http://aws.amazon.com/s3"); } else { Console.WriteLine( "Error occurred. Message:'{0}' when enabling notifications.", amazonS3Exception.Message); } } } } }

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

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

Copy
import java.io.IOException; import java.util.Collection; import java.util.EnumSet; import java.util.LinkedList; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.AmazonS3Exception; 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 NotificationConfigurationOnABucket { private static String bucketName = "*** bucket name ***"; private static String snsTopicARN = "*** SNS Topic ARN ***"; private static String sqsQueueARN = "*** SQS Queue ARN ***"; public static void main(String[] args) throws IOException { AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider()); try { System.out.println("Setting notification configuration on a bucket.\n"); BucketNotificationConfiguration notificationConfiguration = new BucketNotificationConfiguration(); notificationConfiguration.addConfiguration( "snsTopicConfig", new TopicConfiguration(snsTopicARN, EnumSet .of(S3Event.ReducedRedundancyLostObject))); notificationConfiguration.addConfiguration( "sqsQueueConfig", new QueueConfiguration(sqsQueueARN, EnumSet .of(S3Event.ObjectCreated))); SetBucketNotificationConfigurationRequest request = new SetBucketNotificationConfigurationRequest(bucketName, notificationConfiguration); s3client.setBucketNotificationConfiguration(request); } catch (AmazonS3Exception ase) { System.out.println("Caught an AmazonServiceException, which " + "means your request made it " + "to Amazon S3, but was rejected with an error response" + " for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); System.out.println("Error XML" + ase.getErrorResponseXml()); } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which " + "means the client encountered " + "an internal error while trying to " + "communicate with S3, " + "such as not being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } } }

4단계: 설정 테스트

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