AWS Event Scheduler 구현 (EventBridge + SNS + SQS) with terraform
스케줄러 비용을 줄여보자
지금까지 경험한 서비스들은 스케줄러가 필요했다.
예를 들어서 00시에 값들을 변경, 카카오 메시지를 발송, 배치성 쿼리 등등이 존재했다. SpringBoot의 @Scheduled 어노테이션으로 구현하고 있다. 스케줄러가 동작하는 인스턴스는 Scale-Out이 되면 문제가 발생할 수 있다. 따라서 스케줄러 인스턴스는 다른 애플리케이션과 분리돼야 했다. 배치성 쿼리나, 어느 정도의 비즈니스 로직이 들어갈 수 있으므로 인스턴스의 사양을 아예 낮은 거는 사용할 수 없다. 따라서 t3.small로 결정했다. 1년 RI로 했을 때 가격은 아래와 같다.
한 달의 가격은 11.46USD 큰 비용은 아니다. 그럼에도 비용을 줄이고 싶다. 해당 이벤트를 어떻게 처리하는 것에 대한 구현은 없다. 이벤트를 발생시키는 것에 집중한다.
아키텍처
온디맨드로 구성될 필요 없이 이벤트 기반으로 했을 때 비용을 절감할 수 있을 거라 생각했다. 그래서 아래와 같은 아키텍처를 채용했다.
먼저 EventBridge는 Schedule cron을 정의해서, 이벤트를 발생시키고, 해당 이벤트는 SNS Topic을 Publish 한다. 그리고 Trigger로 걸려는 SQS가 이벤트를 수신하고, 해당 SQS를 트리거로 가지고 있는 각각의 람다가 처리하면 된다. (여기서는 Labmda는 생략한다.)
EventBridge의 트리거로 바로 SQS로 해도 되지만, 그럴 경우 동일하게 00시에 동작하는 이벤트에 대해서 여러 개의 Schedule을 정의해야 한다. 따라서 SNS를 앞단에 두고 해당 이벤트를 각각의 SQS와 SNS가 처리해 확장성 있는 구조를 가져간다.
이제 테라폼으로 간편하게 만들어보자.
아래의 주소로 가서 clone 따고, README.md를 보고 진행하면 된다.
terraform-Serverless-Event-Scheduler
정상적으로 리소스들을 생성했다고 가정하자.
cron이 정상동작 하는지 확인하기 위해서 5분마다 이벤트를 발생시키도록 하고, SQS의 사용 가능한 메시지 개수를 보자. 난 15분 동안 내버려두어, 아래와 같이 3개가 만들어졌다.
그렇다면 이제 비용 비교다!
1. EventBridge
EventBridge의 경우 페이로드 64KB 백만 요청 당 0.46 USD다. 현재 스케줄러는 단순 이벤트 발생이므로 페이로드 크기가 매우 작으므로, 1건당 1개의 요청으로 생각하면 된다. 한 달에 백만 요청을 한다고 가정하자.
2. SNS
SNS의 경우 SQS에 이벤트를 전송할 경우 SNS 별도의 비용은 발생하지 않고, 데이터 송수신 비용만 발생한다. EventBridge에서 들어오는 데이터 수신료는 없다. 데이터 송신은 아래와 같다. 따라서 단순한 메시지 발생의 경우 한 달에 9.999TB를 넘기는 것은 어렵기에 0.126 USD로 가정하자.
3. SQS
SQS의 경우 표준 대기열을 사용하고, 100만 개 요청이 무료이므로 한 달에 사용하는 비용은 무료라고 가정하자.
4. 비교
RI EC2 온디맨드: 11.46 USD
vs
Serverless Event Scheduler: 0.566(0.126 + 0.46) USD이다.
즉 1/20 비용으로 줄인 것을 알 수 있다. 인스턴스 크기가 더 크다면, 차이는 더 클 것이다.
5. 결론
스케줄러 같은 경우 인스턴스를 띄워놓는 것보단 이벤트가 발생할 때마다 실행하는 이벤트 기반의 스케줄러 동작이 훨씬 저렴하다는 것을 알 수 있었고, SQS를 예시로 들었지만 Kafka도 가능하다.
'Aws' 카테고리의 다른 글
AWS DevOps Engineer Professional (DOP-C02) 취득 후기 (2) | 2023.10.11 |
---|---|
AWS API Monitoring with terraform (0) | 2023.09.10 |
AWS Bastion Host (사용자 관리) with terraform (0) | 2023.07.09 |
Cloudfront cache auto invalidate (0) | 2023.06.05 |
EKS Fargate 유형 애플리케이션 로그 수집 Part 2 (1) | 2023.05.15 |
댓글
이 글 공유하기
다른 글
-
AWS DevOps Engineer Professional (DOP-C02) 취득 후기
AWS DevOps Engineer Professional (DOP-C02) 취득 후기
2023.10.11 -
AWS API Monitoring with terraform
AWS API Monitoring with terraform
2023.09.10 -
AWS Bastion Host (사용자 관리) with terraform
AWS Bastion Host (사용자 관리) with terraform
2023.07.09 -
Cloudfront cache auto invalidate
Cloudfront cache auto invalidate
2023.06.05