개요
시간마다 S3에 적재되는 데이터를 지속적으로 처리하고자 한다.
이를 위해 S3 이벤트 알림 옵션을 사용하여 SQS에 데이터를 전달하는 방식으로 구성하려고 한다.
구성 방법을 정리해둔다.
SQS 생성
사용할 SQS를 생성한다.
1. AWS Console > SQS > 대기열 생성 클릭
2. SQS 설정
유형 : 사용 목적에 맞게 Standard 또는 FIFO를 선택한다. 여기서는 Standard로 사용한다.
Name : SQS의 이름이다.
구성 : 큐가 메시지를 어떻게 처리할 지에 대한 설정을 구성한다. 여기서는 기본값으로 사용한다.
- 표시 제한 시간 : 대기열에서 수신한 메시지가 다른 메시지 소비자에게 보이지 않게 되는 시간
- 메시지 보존 기간 : 큐에 저장된 메시지의 보존 기간. 설정한 기간만큼 보관 후 삭제한다.
- 전송 지연 : 큐에 저장된 메세지가 얼마 동안 전송되지 않도록 할지에 대한 설정
- 메시지 수신 대기 시간 : 메시지를 수신할 수 있을 때까지 대기하는 최대 시간
액세스 정책 : 큐에 접근할 수 있는 계정과 허용 작업을 정의한다.
고급을 선택한 후, 정책을 아래와 같이 설정한다.
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "<arn:aws:sqs:Region:account-id:queue-name>",
"Condition": {
"ArnLike": {
"aws:SourceArn": "<arn:aws:s3:*:*:awsexamplebucket1>"
},
"StringEquals": {
"aws:SourceAccount": "<bucket-owner-account-id>"
}
}
}
]
}
다른 선택 사항은 필요 시 설정하도록 한다. 이 글에선 별도로 설정하지 않으므로 대기열 생성 버튼을 클릭한다.
이상이 없으면 생성한 SQS를 확인할 수 있다.
S3 이벤트 알림 설정
S3 이벤트 알림 (Event Notification)
S3 버킷에서 새 객체 생성, 객체 제거, 객체 이벤트 복원, S3 수명 주기 만료 등과 같은 특정 이벤트가 발생할 때 알림을 전달하는 기능이다.
알림 메시지는 SNS, SQS, Lambda에 전달할 수 있다. 지원되는 이벤트 유형은 공식문서를 참고할 수 있다.
설정 방법
1. 이벤트 알림을 설정할 S3 버킷에서 속성 탭으로 들어간다.
2. 속성 탭 하단의 이벤트 알림 항목에서 이벤트 알림 생성 버튼을 클릭한다.
3. 이벤트 알림 구성
의도에 맞게 이벤트 알림을 구성한다.
- 이름 : 이벤트 알림의 이름
- 접두사 : 이벤트를 감지할 경로
- 접미사 : 이벤트를 감지할 파일명의 끝 문자열. 확장자 등이 될 수 있다.
이 글에서는 모든 경로의 모든 파일에 대해 이벤트 알림을 설정할 것이다.
이벤트 유형 : S3 버킷에 데이터가 저장되면 알림을 받을 것이기 때문에 모든 객체 생성 이벤트를 선택한다.
대상 : 알림을 전달할 대상을 선택한다. 이 글에서는 SQS에 해당한다.
이상이 없으면 이벤트 알림 목록에서 생성한 이벤트 알림을 확인할 수 있다.
이벤트가 설정되면 메시지 전달에 이상이 없는 3개의 테스트 메시지를 기본적으로 전달한다.
구성 테스트
S3에 파일을 몇 개 업로드한 뒤 SQS에 실제로 데이터가 생성되는지 확인하고자 한다.
아래와 같이 2개의 파일을 업로드해보았다.
이후 생성한 SQS에서 메세지 전송 및 수신을 클릭한 후,
메시지 폴링을 클릭한다.
잠시 기다리면 수신된 메시지 목록을 확인할 수 있다.
메시지의 아이디를 클릭하면 세부 정보를 확인할 수 있다.
테스트 메시지의 경우, 아래와 같은 형식이다.
이제 소비자는 SQS에 접근하여 데이터를 수신받아 처리할 수 있다.
참고 문서
https://linuxhint.com/configure-event-notifications-s3-bucket/
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/NotificationHowTo.html
https://docs.aws.amazon.com/AmazonS3/latest/userguide/grant-destinations-permissions-to-s3.html