[발표자료] AWS Instance Scheduler 로 EC2, RDS 인스턴스 관리하기 #deviokoreaonline

EC2와 RDS 인스턴스의 스케줄링 솔루션인 AWS Instance Scheduler를 설명한 글입니다.
2020.07.01

프레젠테이션

AWS에 입문하게 된다면 보통 EC2, RDS, S3를 먼저 사용해보는 경우가 많습니다.
S3는 GB당 요금이라 마음먹고 버킷에 데이터를 채워 넣지 않는 이상 크게 무리는 없습니다.
하지만 EC2와 RDS는 공부나 개발 등의 다른 작업으로 깜빡했다거나 혹은 귀찮아서 등의 이유로
시작 후 정지하지 않는다면 한 달 뒤 청구되는 요금에 당황하게 될지도 모릅니다.
거기다 비싼 가격의 인스턴스 타입을 사용한다면...

이렇게 텅장이 되는 마법을 보게됩니다

저도 마찬가지로 학생 때 비용에 대해 너무 무신경했었고 청구 금액에 놀란 적이 있었습니다.
그래서 시간이 되면 알아서 켜주고 꺼주는 방법을 찾게 되었고 Instance Scheduler를 알게 되었습니다.
설정하는 방법이 어렵지 않으니 흥미가 있다면 써보시길 바랍니다!

사용 AWS 서비스는 다음과 같습니다.

  • CloudFormation
  • DynamoDB
  • EC2
  • RDS

CloudFormation에서 몇 가지의 옵션을 설정하고, DynamoDB에서 기간과 일정을 설정합니다.
EC2와 RDS는 1개의 태그 추가가 끝입니다.

그래서 Instance Scheduler란?

이름 그대로 EC2와 RDS의 스케줄링을 할 수 있게 돕는 AWS의 솔루션입니다.
인스턴스의 작동에는 신경을 안 쓰더라도 원하는 날짜 원하는 시간에 인스턴스가 켜지고 꺼진다면
다른 해야 할 일에 좀 더 신경을 쓸 수 있겠죠!

아키텍처는 다음과 같습니다.

우선 솔루션은 CloudFormation을 통해 배포됩니다.
CloudWatch에 설정된 이벤트 규칙대로 Lambda를 호출하고 호출된 Lambda는 DynamoDB의 기간과 스케줄을 읽습니다.
그리고 EC2와 RDS의 태그를 보고 스케줄 관리가 필요한 인스턴스를 조작합니다.
솔루션의 전체적인 기록은 CloudWatch의 로그 그룹에서 확인할 수 있습니다.

어떻게 쓰는 거야?

AWS의 서포트에 적혀있는 내용을 사진과 함께 설명하겠습니다.
사용 방법은 다음과 같습니다.

  1. AWS Instance Scheduler 시작
  2. 기간(period) 정의
  3. 일정(schedule) 정의
  4. 인스턴스에 태그 지정

AWS 콘솔을 활용하는 방법과 scheduler-cli를 활용하는 방법이 있는데 초심자분도 따라 하기 쉽도록
콘솔을 활용하여 진행하겠습니다.

AWS Instance Scheduler 시작

공식 문서에 들어가시면 Launch Solution 이라고 적힌 버튼이 있습니다.
클릭하시면 CloudFormation의 스택 작성 페이지로 이동합니다.
다음을 누르면 스택 세부 정보 지정단계로 넘어옵니다.
이곳에서 스택의 이름과 옵션을 설정합니다.
세부 옵션 중 신경 써야 할 옵션은 다음과 같습니다.

  • 스케줄링할 서비스 (EC2 or RDS or EC2/RDS)
  • RDS 중지 전 스냅샷 저장 여부
  • 지역 (공백이라면 현재 지역으로 설정됩니다)
  • 타임존 (Asia/Seoul로 설정합니다)
  • 빈도 (시작과 종료의 텀이 크거나 관리해야 할 인스턴스가 많지 않다면 큰 값으로 설정합니다)

이 외에도 교차 계정 옵션이나 람다의 메모리 등을 설정할 수 있습니다.
만약 관리하는 인스턴스가 많다면 람다의 메모리를 늘려주세요. (보통 128MB로 사용해도 문제는 없습니다)

스크롤을 내리면 다음과 같은 옵션이 있습니다.

스케줄러가 적용된 인스턴스에 상태 구분을 위한 태그를 설정합니다.
시작되거나 정지된 인스턴스에 설정한 태그가 자동으로 생성됩니다.
설정 후 다음을 클릭합니다.

스택 옵션 구성단계에서 필요한 옵션을 설정하고 다음을 눌러 넘어갑니다. 참고로 스택 자체에서 많은 서비스를 사용하지 않기 때문에 중간에 중단되거나 실패할 일은 거의 없습니다.

검토단계에서 설정한 값들을 확인한 후 가장 아래에 있는 IAM 옵션을 확인하고 스택을 생성합니다.

해당 옵션을 활성화 하지 않으면 리소스 생성에 필요한 IAM을 설정할 수 없으니 꼭 체크해주세요.

기간(period) 정의

스택 생성이 끝나고 DynamoDB를 보면 3개의 테이블이 생성되어 있습니다.

이 중 config 테이블만 설정하면 됩니다.
생성 직후에는 config 타입의 항목 이외에 여러 예제 항목이 있는데 모두 삭제해도 괜찮습니다.
항목 만들기를 클릭하여 기간을 설정하겠습니다.

이 중 typename은 필수 값이며 begintime, endtime, weekdays, monthdays 중 하나의 값을 설정해야 합니다.
사진과 같이 작성하시면 평일 10시에 시작하고 18시에 종료하는 10-18 test1이라는 이름의 기간이 설정됩니다.
이렇게 본인이 원하는 기간을 작성한 뒤 스케줄을 작성합니다.

스케줄(scheduler) 정의

설정한 기간들을 활용하여 스케줄을 작성합니다.

nametype, periods는 필수 옵션입니다.
설정한 시간에 인스턴스의 실행 및 정지 상태를 고정하는 enforced 옵션이나 설정한 시작 시간 이전에 수동으로
시작한다면 정지 시간을 무시하는 retain running 옵션 등 다양한 옵션을 조합하여 설정할 수 있습니다.

이로써 스케줄링을 위한 준비가 끝났습니다! 마지막으로 스케줄링할 인스턴스에 태그만 추가해주면 끝입니다.

인스턴스에 태그 지정

태그의 추가를 위해 스케줄링할 서비스로 이동합니다.

스케줄링할 인스턴스의 태그 탭을 클릭하면 사진과 같이 태그를 편집할 수 있습니다.

사진과 같이 키는 Schedule, 값은 작성한 scheduler의 name을 추가합니다.
적용 후 람다의 빈도 시간 뒤에 다시 열어보시면 오른쪽 사진과 같이 현재 스케줄링에 대한 상태가 추가됩니다.

이렇게 간단히 설정하는 것으로 인스턴스들은 관리됩니다.

이 외에도

공식 문서를 보시면 scheduler-cli의 사용 방법이나 교자 계정 설정, hibernate와 같은 옵션 등 이 글에서 설명하지 못한 자세한 내용이 있습니다.
여러분도 이 솔루션을 활용하여 인스턴스를 효율적으로 관리하고, 다른 작업에 집중할 수 있길 바랍니다!

참고 및 사진 출처

공식 문서