Lambda, SNS & SQS
- SQS와 Lambda를 사용하면 SQS 대기열과 람다 함수가 있으며
이벤트들은 SQS 대기열로 가게 되고, Lambda 서비스가 SQS 대기열을 poll하게 됨
이 때 메시지를 다시 SQS 대기열에 보내고 poll을 재시도한다는 문제가 발생하여 무한 반복될 수 있으며
그러면 메시지에 큰 결함이 발생할 경우 메시지를 보내기 위해 SQS를 만들어 5번 정도 시도해서 데드 레터 대기열로 보내게 됨
- SQS FIFO와 Lambda도 사용 가능하며 메시지가 순서대로 처리될 때
람다 함수가 대기열로부터 메시지를 얻으려는 시도 및 재시도를 하게 되며
순서대로 처리하기 때문에 메시지 하나가 중간에 걸리면 전체 대기열의 처리가 막히게 되므로
각 겨웅에 역시 데드 레터 대기열을 만들어 메시지를 SQS 대기열로 보낼 수 있고 함수가 계속 작동하도록 할 수 있음
- SNS와 Lambda를 사용할 경우 메시지가 비동기적으로 Lambda에 보내져서 다른 재시도 동작을 할 수 있게 하므로
처리가 불가능할 때에는 메시지가 내부적으로 재시도되며 세 번까지 재시도하게 됨
그러고도 성공적으로 처리되지 않으면 위의 경우처럼 폐기되거나 데드 레터 대기열을 만들 수 있는데
이번에는 Lambda 서비스 레벨에서 메세지를 레터 작업을 위해 SQS 대기열로 보내며 SQS 측에 데드 레터 대기열이 만들어짐
Fan Out Pattern: deliver to multiple SQS
- 팬아웃 패턴이란 다중 SQS 대기열로 데이터를 옮기는 방법
- 애플리케이션에 SDK가 설치되어 있으며 메세지를 보낼 SQS 대기열이 세 개가 있을 때, 애플리케이션에 쓰기를 쉽게 할 수 있음
먼저 첫 번째 대기열에 메시지를 보내고, 두 번째 대기열에 메세지를 보내고, 세 번째 대기열에도 같은 메시지를 보내게 됨
작동은 하지만 두 번째로 메시지를 보낸 후, 애플리케이션이 망가진다면 세 번째는 받지 못하므로 안정성이 떨어질 수 있음
- 팬아웃 패턴을 사용하면 중간에서 SQS 대기열과 SNS Topic을 결합해주므로 SQS 대기열은 중간에서 SNS Topic 구독자가 됨
그러므로 SQS Topic으로 메시지를 보낼 때마다 SNS 서비스에 의해 다른 SQS 대기열로 보내져서 안정성이 높아지게 됨
즉, 애플리케이션의 관점에서는 SNS Topic으로 그냥 PUT 요청을 하는 것이지만
그러면 자동으로 SNS 서비스가 메시지를 다른 SQS 대기열로 팬아웃하게 되고 잘 작동하게 됨
S3 Events
- 팬아웃 패턴을 S3에 결합할 수 있음
- S3 버킷에서 일어나는 이벤트가 있고 실시간으로 반응하고 싶을 때 어떤 이벤트가 반응할 수 있을까?
만들어지거나 제거되는 S3 오브젝트에 대해 가능하고 복원이나 복제에 대해서도 가능함
그리고 특정 이름에 대해서만 반응하도록 필터도 씌울 수 있음
예) JPG 파일로 생성되는 모든 이미지 파일에 대한 필터를 원할 때, S3에 실시간으로 업로드된 이미지에 대한 썸네일 생성 - S3 버킷에서 오브젝트를 업로드하면 세 가지 방식으로 반응할 수 있음 (S3 이벤트에 대해 가능한 목적지 세 가지)
- 1) SNS
S3 이벤트 덕분에 SNS Topic으로 직접 알림을 보내는 것이 가능
팬아웃 패턴으로 다중 SQS 대기열로 보낼 수 있으므로
SNS Topic에서 S3 이벤트를 사용하면 SQS 대기열 10개로도 데이터를 보낼 수 있음 - 2) SQS
SQS 대기열로 메시지를 보내는 것이 가능
SQS 대기열이 있으면 람다 함수나 EC2 인스턴스를 만들어서 SQS 대기열에 있는 메시지를 읽을 수 있음
또한 만약 람다 함수가 실패하면 메시지가 SQS 대기열에 남은 후 다른 애플리케이션으로 처리가 될 수 있음 - 3) Lambda 함수
비동기적으로 람다 함수를 호출할 수 있음
람다와 통신하고 있다면 원하는 뭐든지 할 수 있으며
람다 함수가 실패할 경우 비동기식 호출이기 때문에 람다 함수에 데드 레터 대기열을 정의할 수 있으므로
시도를 해서 3번 정도 실패하면 다음 작업을 위해 메시지를 DLQ인 SQS로 보내게 됨
- 1) SNS
- S3은 복원 및 복제되는 모든 작업에 대해 단독으로 이벤트를 생성해서 SNS, SQS, Lambda로 보내며
S3 이벤트를 원하는 만큼 S3 버킷에 생성할 수 있음
그러므로 SNS와 SQS에 이벤트를 하나씩 생성하고 Lambda에도 생성하고 원하는 대로 가능 - S3 이벤트 알림은 보통 몇 초만에 전달되지만 1분 이상 걸리기도 함
- 쓰기 두 개가 버전이 없는 단일 오브젝트에 대한 거라면 하나의 S3 이벤트만 보는 것도 가능하며
S3에 업로드된 모든 오브젝트에 대한 이벤트를 얻길 원한다면 객체 자체의 버저닝이 활성화되어있는지 확인하여
각 버전에서 고유의 알림이 생성되는지 확인 필요
'Cloud > AWS' 카테고리의 다른 글
[SAA] AWS에서 IP 주소 차단 (0) | 2022.05.03 |
---|---|
[SAA] AWS의 캐싱 전략 (0) | 2022.05.03 |
[SAA] AWS 백업 (0) | 2022.05.02 |
[SAA] 대규모 데이터 세트를 AWS로 전송 (0) | 2022.05.02 |
[SAA] DataSync (0) | 2022.05.02 |