AWS EventBridge Scheduler 로 작업 예약하기
https://winbuntu.tistory.com/39
N 시간 후에 특정 로직을 수행하는 스케줄러
주의 이 포스트를 쓰고난 후 AWS EventBridge 를 사용하면 더 간단하게 구현 가능하다는것을 확인했습니다. 🥲 들어가며 회사에서 다음과 같은 상황이 생겼다. A 라는 세션을 생성하고 N 시간을 기다
winbuntu.tistory.com
이전글에서 N 시간 이후 특정 작업을 하기위해 CronJob, Redis expire event, AWS Batch, Step function + SQS 와 같은 구현 방법에 대한 아이디어를 생각하여 Step Function 과 SQS 를 이용해서 구현 해 보았다.
이번엔 AWS EventBridge Scheduler 를 이용해서 더 쉽게 작업을 예약 해 보려고 한다.
일단 내 작업스케줄 전용 사용할 그룹을 생성했다.
음.. 캡처를 못했는데 일단 scheduling-service-sqs 로 message 를 보내도록 일정을 생성했다.
정확히 일정을 설정한 13분에 도착하진 못했고, 30 ~ 50초 정도 지연되긴 하였다.
하지만 내가 구현해야하는 기능은 이정도 지연은 상관없다.
간단하게 코드로 구현 해 보았다.
github: https://github.com/SecretJuJu/job-scheduling/tree/main/event-bridge-scheduler
job-scheduling/event-bridge-scheduler at main · SecretJuJu/job-scheduling
Contribute to SecretJuJu/job-scheduling development by creating an account on GitHub.
github.com
- AWS credential
- event bridge 에 이벤트를 추가할 수 있는 권한을 가진 iam 을 만들었다.
- EVENT_BRIDGE_SQS_ROLE_ARN
- sqs 에 send 할 수 있는 role 이 필요하다
- 정책생성
- IAM > 정책 > 정책생성 > SQS > 쓰기 / SendMessage 선택, 리소스 ARN 입력 > 이름지정 후 생성
- 역할생성
- IAM > 역할 > 역할생성 > AWS 서비스 > 람다 > 다음 > 위에서 생성한 혹은 sqs send 가 가능한 정책 연결 > 이름지정 후 생성
실행결과
일정이 잘 생성된것을 볼 수 있다.
SQS 가 정말 잘 오는지 확인
후기
생각보다 아주 간단하게 일회성 작업을 예약할 수 있어서 싱글벙글 구현하려했지만 시행착오를 많이 겪은 것 같다.
겪은 시행착오는 다음과 같았다.
시행착오
- aws sdk 선택
- 당연히 eventbridge 하위에 있는 기능이니 @aws-sdk/client-eventbridge 를 사용할 줄 알았다.
- 하지만 client-eventbridge 의 기능으로 스케줄링을 구현하는게 뭔가 이상했고 <- 있을줄 알았던 설정이 없거나..
- aws console 과 기능이 다르기도 하였다.
- gpt-4 선생님과 구글링을 해 보아도 client-eventbridge 패키지에 대한 글이나 gpt 대답을 받고 이게 뭐지.. 싶었다.
- 다행히 AWS scheduling 관련을 구글링도중 우연히 @aws-sdk/client-scheduler 를 발견할 수 있었다.
- sdk spec
- aws role 생성
- aws role 을 생성할때 AWS 서비스를 선택하는 부분에서 event bridge 를 선택했는데 이걸 선택하면 뒷부분에서 정책을 바꾸지 못해 어리둥절 하였다.
- 결국 중요한건 sqs send 권한이란걸 깨닫고 정책생성 후 role 을 만들때 서비스는 lambda 를 선택하여 역할을 만들 수 있었다.
이로써 스케줄링에대한 고민은 일단 마무리 된것 같아서 후련하다.