AWS

AWS EventBridge Scheduler 로 작업 예약하기

secretjuju 2024. 4. 25. 02:32

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 가 정말 잘 오는지 확인

원래 예약시간은 17분인데 1분정도 지연되었다.

후기

생각보다 아주 간단하게 일회성 작업을 예약할 수 있어서 싱글벙글 구현하려했지만 시행착오를 많이 겪은 것 같다.

겪은 시행착오는 다음과 같았다.

 

시행착오

  • aws sdk 선택
    • 당연히 eventbridge 하위에 있는 기능이니 @aws-sdk/client-eventbridge 를 사용할 줄 알았다.
    • 하지만 client-eventbridge 의 기능으로 스케줄링을 구현하는게 뭔가 이상했고 <- 있을줄 알았던 설정이 없거나..
    • aws console 과 기능이 다르기도 하였다.
    • gpt-4 선생님과 구글링을 해 보아도 client-eventbridge 패키지에 대한 글이나 gpt 대답을 받고 이게 뭐지.. 싶었다.
    • 다행히 AWS scheduling 관련을 구글링도중 우연히 @aws-sdk/client-scheduler 를 발견할 수 있었다.
  • sdk spec
    • 일단 gpt 도 사용방법을 모르고 관련 블로그 글도 없었다.
    • 그래서 귀찮게 aws 문서라이브러리 타입을 찾아가며 사용방법을 찾아내야했다.
  • aws role 생성
    • aws role 을 생성할때 AWS 서비스를 선택하는 부분에서 event bridge 를 선택했는데 이걸 선택하면 뒷부분에서 정책을 바꾸지 못해 어리둥절 하였다.
    • 결국 중요한건 sqs send 권한이란걸 깨닫고 정책생성 후 role 을 만들때 서비스는 lambda 를 선택하여 역할을 만들 수 있었다.

이로써 스케줄링에대한 고민은 일단 마무리 된것 같아서 후련하다.