객체 키 이름 필터링으로 이벤트 알림 구성
객체 키 이름 필터링으로 이벤트 알림 구성
Amazon S3 이벤트 알림을 구성할 때 Amazon S3가 알림을 보내게 할 지원되는 Amazon S3 이벤트 유형을 지정해야 해요. S3 버킷에서 지정하지 않은 이벤트 유형이 발생하면 Amazon S3는 알림을 보내지 않아요. 객체 키 이름의 접두사와 접미사로 알림이 필터링되도록 구성할 수 있어요.
출처: Configuring event notifications using object key name filtering
본문
예를 들어 ".jpg" 파일 이름 확장자를 가진 이미지 파일이 버킷에 추가될 때만 알림을 보내도록 구성할 수 있어요. 또는 접두사가 "images/"인 객체가 버킷에 추가될 때 Amazon SNS 주제로 알림을 전달하고, 같은 버킷에서 "logs/" 접두사를 가진 객체의 알림은 AWS Lambda 함수로 전달하는 구성을 가질 수도 있어요.
필터에서 접두사나 접미사로 와일드카드 문자("*")를 사용할 수 없어요. 접두사나 접미사에 공백이 포함되면 "+" 문자로 바꿔야 해요. 접두사나 접미사 값에 다른 특수 문자를 사용하면 URL 인코딩(퍼센트 인코딩) 형식으로 입력해야 해요. 이벤트 알림의 접두사나 접미사에서 URL 인코딩 형식으로 변환해야 하는 특수 문자 전체 목록은 안전한 문자(Safe characters)를 참고하세요.
Amazon S3 콘솔에서 객체 키 이름 필터링을 사용하는 알림 구성을 설정할 수 있어요. AWS SDK를 통한 Amazon S3 API나 REST API를 직접 사용해서도 할 수 있어요. 콘솔 UI로 버킷에 알림 구성을 설정하는 방법은 Amazon S3 콘솔로 이벤트 알림 활성화 및 구성을 참고하세요.
Amazon S3는 Amazon SQS, Amazon SNS, Lambda 사용에 설명된 대로 알림 구성을 버킷에 연결된 알림 하위 리소스에 XML로 저장해요. 객체 키 이름의 접두사나 접미사로 알림이 필터링되는 규칙을 정의하려면 Filter XML 구조를 사용해요. Filter XML 구조에 대한 정보는 Amazon Simple Storage Service API Reference의 PUT Bucket notification을 참고하세요.
Filter를 사용하는 알림 구성은 겹치는 접두사, 겹치는 접미사, 또는 접두사와 접미사의 겹침이 있는 필터링 규칙을 정의할 수 없어요. 다음 섹션에는 객체 키 이름 필터링이 있는 유효한 알림 구성 예제가 있어요. 접두사와 접미사의 겹침 때문에 유효하지 않은 알림 구성 예제도 포함돼 있어요.
객체 키 이름 필터링이 있는 유효한 알림 구성 예제
다음 알림 구성은 Amazon S3가 s3:ObjectCreated:Put 유형의 이벤트를 게시할 Amazon SQS 대기열을 식별하는 대기열 구성을 담아요. 이벤트는 접두사가 images/이고 jpg 접미사를 가진 객체가 버킷에 PUT될 때마다 게시돼요.
<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value> images/ </Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value> jpg </Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:s3notificationqueue</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
</NotificationConfiguration>
다음 알림 구성은 겹치지 않는 접두사 여러 개를 가져요. 이 구성은 images/ 폴더의 PUT 요청에 대한 알림은 queue-A로, logs/ 폴더의 PUT 요청에 대한 알림은 queue-B로 간다고 정의해요.
<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images/</Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
<QueueConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>logs/</Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
</NotificationConfiguration>
다음 알림 구성은 겹치지 않는 접미사 여러 개를 가져요. 이 구성은 버킷에 새로 추가된 모든 .jpg 이미지가 Lambda cloud-function-A로 처리되고, 새로 추가된 모든 .png 이미지가 cloud-function-B로 처리된다고 정의해요. .png와 .jpg 접미사는 마지막 글자가 같아도 겹치지 않아요. 어떤 문자열이 두 접미사로 모두 끝날 수 있으면 두 접미사는 겹치는 것으로 간주돼요. 어떤 문자열도 .png와 .jpg 둘 다로 끝날 수 없으므로, 예제 구성의 접미사는 겹치는 접미사가 아니에요.
<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>.jpg</Value>
</FilterRule>
</S3Key>
</Filter>
<CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
<CloudFunctionConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>.png</Value>
</FilterRule>
</S3Key>
</Filter>
<CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
</NotificationConfiguration>
Filter를 사용하는 알림 구성은 같은 이벤트 유형에 대해 겹치는 접두사가 있는 필터링 규칙을 정의할 수 없어요. 겹치는 접두사가 겹치지 않는 접미사와 함께 사용될 때만 가능해요. 다음 예제 구성은 공통 접두사를 가지고 있지만 겹치지 않는 접미사를 가진 객체가 서로 다른 대상으로 전달될 수 있는 방법을 보여줘요.
<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>.jpg</Value>
</FilterRule>
</S3Key>
</Filter>
<CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
<CloudFunctionConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>.png</Value>
</FilterRule>
</S3Key>
</Filter>
<CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
</NotificationConfiguration>
접두사와 접미사 겹침이 있어 유효하지 않은 알림 구성 예제
대부분의 경우 Filter를 사용하는 알림 구성은 같은 이벤트 유형에 대해 겹치는 접두사, 겹치는 접미사, 또는 접두사와 접미사의 겹치는 조합이 있는 필터링 규칙을 정의할 수 없어요. 접미사가 겹치지 않는 한 겹치는 접두사를 가질 수 있어요. 예제는 객체 키 이름 필터링으로 이벤트 알림 구성을 참고하세요.
다른 이벤트 유형과 함께 겹치는 객체 키 이름 필터를 사용할 수 있어요. 예를 들어 ObjectCreated:Put 이벤트 유형에 접두사 image/를 사용하고 ObjectRemoved:* 이벤트 유형에도 접두사 image/를 사용하는 알림 구성을 만들 수 있어요.
Amazon S3 콘솔이나 API를 사용할 때 같은 이벤트 유형에 대해 유효하지 않은 겹치는 이름 필터가 있는 알림 구성을 저장하려고 하면 오류가 나요. 이 섹션은 겹치는 이름 필터 때문에 유효하지 않은 알림 구성 예제를 보여줘요.
기존 알림 구성 규칙은 다른 모든 접두사와 각각 일치하는 기본 접두사, 다른 모든 접미사와 각각 일치하는 기본 접미사를 가진다고 가정해요. 다음 알림 구성은 겹치는 접두사가 있기 때문에 유효하지 않아요. 구체적으로, 루트 접두사는 다른 어떤 접두사와도 겹쳐요. 예제에서 접두사 대신 접미사를 사용해도 마찬가지예요. 루트 접미사는 다른 어떤 접미사와도 겹쳐요.
<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic>
<Event>s3:ObjectCreated:*</Event>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration>
다음 알림 구성은 겹치는 접미사가 있기 때문에 유효하지 않아요. 어떤 문자열이 두 접미사로 모두 끝날 수 있으면 두 접미사는 겹치는 것으로 간주돼요. 어떤 문자열은 jpg와 pg로 끝날 수 있어요. 따라서 접미사가 겹쳐요. 접두사도 마찬가지예요. 어떤 문자열이 두 접두사로 모두 시작할 수 있으면 두 접두사는 겹치는 것으로 간주돼요.
<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
<Event>s3:ObjectCreated:Put</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>pg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration>
다음 알림 구성은 겹치는 접두사와 접미사가 있기 때문에 유효하지 않아요.
<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
<Event>s3:ObjectCreated:Put</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration>