AWS Lambda로 EC2 인스턴스 스케쥴링#2

AWS Lambda로 EC2 인스턴스 스케쥴링#2

지난 포스팅에 이에서..

지난 포스팅에서 AWS Lambda와 Python의 boto3 sdk를 이용해, 종료된 ec2 인스턴스를 키고 -> 배치 스크립트를 원격으로 실행시키고 -> ec2 인스턴스를 종료하는 흐름을 구성하는 방법에 대해 정리했다.

이번 포스팅에서는 이렇게 구성한 AWS Lambda 함수를 스케쥴링 하는 방법에 대해 소개해보고자 한다.

EventBridge

AWS EventBridge는 AWS에서 제공하는 서버리스 EventBus 솔루션이다. 쉽게말해 이벤트를 이벤트 버스에 태운뒤 정해진 규칙에 따라 이 이벤트를 소비자들이 소비할 수 있도록 해주는 솔루션을 서버리스로 제공해주는 것이다.

요 사진이 AWS EventBridge를 이해하기 가장 쉬운 예시라서 가져와보았다. 보이다시피 이벤트가 버스에 등록되면 특정 규칙에 따라 소비자들 (AWS targets나 API destinations)이 가져가 소비할 수 있게 된다.

나는 이 EventBridge에 이벤트를 등록할 필요는 없다. 단지 다음 절차들만 구성되면 된다.

  • cron 표현식으로 규칙을 정한뒤

  • 그 규칙에 따라 대상(위의 그림에서 AWS targets)인 AWS lambda 함수를 실행

How To?

  1. 이벤트 버스에 이벤트들을 등록하는 절차를 구성할 필요는 없다. 단지 cron 표현식으로 정해진 스케쥴에 따라 AWS lambda 함수만 실행시키면 된다.

  2. 이를위해 먼저 EventBridge에서 사용할 규칙을 만들자.

  3. 규칙을 생성하는 화면이 뜨면. 이름과 설명을 입력하고 default 이벤트 버스를 선택한뒤(이벤트 버스를 쓸 필요가 없다.) 규칙 유형에서 "일정"을 선택하면 된다.

  4. 매일 KST(UTC+9) 24시에 실행되도록 설정하자. 크론 표현식에 대해서는 다음 문서를 참조하면 좋을 것같다.

  5. 대상을 선택할 차례이다. 대상은 EventBridge에서 사전 정의한 규칙에 만족한 상황이 발생할때 이벤트를 가져가서 소비할 엔드포인트를 뜻하는데, 이 케이스의 경우 이벤트는 따로 없기 때문에 그냥 "사전 정의한 규칙에 만족한 상황이 발생할 때 건드릴 엔드포인트"라고 생각하는 편이 정확할 것이다. 아무튼 여기서 EC2인스턴스를 컨트롤하는 Lambda 함수를 선택해주면 된다.

  6. 그뒤 태그를 입력하는 창이 나온다. 필요에 따라 태그가 필요하면 달고 아니면 패스하자. 그럼 최종적으로 생성된 대상(AWS targets) 정보를 확인하는 창이 있고, 여기서 전반적으로 체크한 뒤 규칙생성 버튼을 누르면, 정한 규칙에 따라 target으로 설정된 Lambda 함수를 실행시키는 스케쥴러가 완성된다.

  7. 나는 테스트를 위해 1시간 간격으로 실행시켜보았는데, CloudWatch에 생성된 Lambda 실행 로그를 보면, 1시간마다 Lambda 함수가 잘 실행된 것을 확인할 수 있다. 정각이 아닌, 5분정도로 로그가 찍힌것은, Lambda함수의 작업 (EC2인스턴스 실행 -> 배치 작업 실행 -> 배치 작업 완료 -> EC2인스턴스 종료)가 약 5분정도 소요되는 작업이기 때문이다.

정리

  • EventBridge는 AWS에서 제공하는 서버리스 이벤트버스이다.

  • EventBridge에 규칙을 등록하고 그 규칙이 만족될때마다 특정 엔드포인트 대상 (여기서는 AWS Lambda 함수의 실행)을 건드리도록 설정할 수 있다.

  • 잘 된다.