[AWS Event Bridge] AWS에서 간단하게 Scheduler 사용하는 방법

2023. 7. 3. 17:12개발을 파헤치다/서버 인프라

반응형

 

서비스의 백엔드를 개발할 때 흔하게 필요한 기능이 바로 스케줄링인데요.
주기적으로 로직을 수행한다거나 푸시 예약 발송하는 작업이라던가 이런 기능들을 구현할 때 스케줄러를 사용하게 됩니다. 작은 서비스라면 프레임워크 레벨에서 라이브러리 형태로 쓸 수도 있구요. 이런 주기적인 로직 수행 작업이 서비스의 주요 기능이라 중요한 경우에는 Message Queue를 사용하기도 합니다.

AWS Serverless Application Model(이하 SAM)로 서버리스 개발을 했을 때 아주 효과적으로 사용할 수 있는 스케줄러가 있습니다. 이번에 소개할 Event Bridge Scheduler죠.
설정한 일정(Cron기반)이나 특정 주기로 자동으로 로직을 실행할 수 있습니다. 다양한 AWS 서비스들과 연동이 가능하기 때문에 서버리스 환경으로 개발한다면 충분히 좋은 선택지가 될꺼라고 생각합니다.

이제 Event Bridge Scheduler를 사용해서 주기적으로 Lambda 함수를 실행시켜보겠습니다.

먼저 일정 이름을 작성하고 일정 패턴을 선택합니다.
일회성으로 실행하고 끝나도록 설정할 수도 있습니다. 
반복된 일정으로 선택하면 유형을 선택할 수 있는데요. Cron기반이나 Rate(주기) 기반으로 설정할 수 있습니다.

Cron은 스케줄러의 정규 표현식이라고 생각하면 됩니다.
총 7개 필드로 구성되어 있으며 형식은 아래와 같습니다.

  • 초 : 0~59까지의 값
  • 분 : 0~59까지의 값
  • 시 : 0~23까지의 값
  • 일 : 1~31까지의 값
  • 월 : 1~12 혹은 JAN ~ DEC까지의 값
  • 요일 : 0 ~ 6 혹은 SUN ~ SAT까지의 값
  • 연도 : empty or 1970 ~ 2099까지의 값

그리고 Cron 표현식을 사용할 때 특수문자를 쓸 수 있는데요. 특수문자의 의미도 같이 살펴보겠습니다.

  • * : 모든 값을 의미합니다.
  • ? : 특정한 값이 없음을 의미합니다.
  • - : 범위를 뜻합니다. 예를 들어 수요일부터 금요일까지는 WED-FRI로 표현합니다.
  • , : 특별한 값일 때만 동작합니다. 예를 들어 월, 목 지정하는 경우 MON, THU로 표현합니다.
  • / : 시작시간 / 단위를 의미합니다. 예를 들어 5분 정각에 10분 주기로 실행한다면 5/10으로 표현합니다.
  • L : 일(day)에서 사용하면 마지막 일을 의미하고 요일에서는 마지막 요일을 의미합니다.
  • W : 가장 가까운 평일을 의미합니다. 
  • #: 몇 째 주의 특정 요일을 표현할 때 사용합니다. 예를 들어 3#2라고 하면 둘째 주 수요일(3번째)을 의미합니다.


예를 한번 들어보면,

# Cron 표현식
00 13 * * ? *

위의 표현식은 매일 13시 정각에 주어진 일을 실행하겠다는 의미가 됩니다.
Cron 표현식에 넣으면 다음 10개가 실행될 날짜를 보여줍니다.

의도한 것이 맞는지 확인 후 넘어갑니다.



스케줄러에 등록할 때 기간도 설정할 수 있습니다. 주기적으로 반복되는 일이지만 특정 기간만 사용하고 싶을 때(예를 들어, 이벤트 기간 동안 주기적으로 통계를 집계하는 람다함수를 실행한다던지)에 설정하면 됩니다.

이제 실행할 대상을 선택합니다. 템플릿 형식의 대상에서 AWS Lambda Invoke를 선택합니다. 스케줄러가 Lambda 함수를 실행시켜 줍니다.



새로운 Lambda 함수 코드를 작성할 수도 있고 AWS SAM에 등록된 Lambda 함수들 목록도 나타납니다. 원하는 함수를 선택하면 됩니다.

Lambda 함수를 스케줄러가 실행했는데 정상적으로 완료가 안될 수도 있습니다. 이럴 때를 대비해 재시도 정책을 설정할 수 있는데요.


먼저 완료가 되지 않은 이벤트를 유지하는 시간을 설정합니다. 특별한 이유가 없다면 기본값을 사용하는 것도 좋습니다.
재시도 횟수도 서비스 특성에 맞게 설정합니다. 중요한 로직이라면 재시도 횟수를 높게 설정하는 것이 적합할 수 있습니다. 설정된 재시도 횟수만큼 재시도한 뒤에도 제대로 완료되지 않으면 해당 이벤트가 삭제됩니다. 이때, 실패한 이벤트가 무시되지 않고 끝까지 처리되어야 하는 경우 Dead-Letter Queue(DLQ)를 구성하면 됩니다. 실패한 이벤트들을 저장했다가 처리하는 Amazon SQS(Simple Queue Service)입니다. 


권한 역시 중요한데요. Amazon SQS와 통합되어 있거나 다른 연동 서비스가 있는 경우 그에 맞는 역할과 권한이 설정되어야 합니다.

이제 다음 버튼을 누르면 지금까지 설정한 내용들이 나옵니다. 확인 후, 문제없으면 저장을 눌러 스케줄러에 일정 등록을 완료합니다. 

 

반응형