Among Us - Yellow Crewmate 인스턴스 스케줄러 사용하기 (EC2 인스턴스 타이머 설정)

AWS/실습

인스턴스 스케줄러 사용하기 (EC2 인스턴스 타이머 설정)

감쟈! 2021. 3. 2. 20:39

AWS에서는 매달 750시간의 EC2를 프리티어로 제공하고 있다.

프리티어라고 하면 보통 공부용이나 간단한 실습용으로 쓰이기 때문에 750시간은 굉장히 많은 시간이라고 생각한다.

인스턴스 하나를 24시간 30일 내내 켜둔다고 해도 750시간이 안된다!!

하지만 여러개의 인스턴스를 관리해야 하는 경우가 발생했고, 일일히 관리 해주기가 매우 귀찮아졌다 ㅠ

 

웹서버를 운영하는 실습을 하면서 bastion 1대, web 2대, was 2대를 실행시키면 5대의 인스턴스가 작동하게 되는데 

하루만 켜져있어도 벌써 24x5=120시간.....

 

글쓴이는 인스턴스 중지 시키는걸 까먹은 탓에 프리티어로 이번달에 제공하는 750시간을 거뜬히 넘어버려서, 새로운 aws계정을 만들어 다른 계정에서 다시 처음부터 실습을 진행하게 됐다.

 

이런식으로 하나의 인스턴스만 관리할 경우 그냥 냅둬도 상관없지만, 여러 대의 인스턴스를 관리할 경우 필요한 기능을 찾다가 발견한 것이 'AWS Instance Scheduler' 다.

 

이번 게시물에서는 이 인스턴스 스케줄러로 본인이 원하는 시간대에 인스턴스가 자동으로 시작하고 종료되도록 설정해보도록 하겠다.

 

 

aws.amazon.com/ko/premiumsupport/knowledge-center/stop-start-instance-scheduler/

 

AWS CloudFormation에서 AWS Instance Scheduler를 사용하여 인스턴스 중지 및 시작

스택은 AWS Lambda 함수, Amazon DynamoDB 테이블, Amazon CloudWatch Events 이벤트 및 Amazon CloudWatch 사용자 지정 지표를 배포합니다. 1.    AWS Management Console을 여십시오. 2.    AWS Instance Scheduler 템플릿을 사

aws.amazon.com

 

AWS 공식 문서에서 인스턴스 스케줄러에 대한  자세한 내용을 확인할 수 있다.

위 공식 문서에서는 원하는 시간대를 설정해줄 때, AWS CLI를 사용하지만...  번거롭기 때문에 DynamoDB에서 직접 설정하는 방법으로 작성하였다. AWS CLI를 사용하는 방법을 해보고 싶다면 AWS 공식문서를 참고하도록 하자!

 

 

 

인스턴스 스케줄러의 작업 순서는 아래와 같다.

 

1. Cloudwatch에서 모니터링하고 설정된 이벤트 규칙으로 Lambda를 호출한다.

2. 호출된 Lambda는 DynamoDB에서 설정한 시간대 및 스케줄을 받아온다.

3. EC2와 RDS의 태그를 확인해 스케줄 작업이 필요한 인스턴스를 정한다.

4. 이러한 기록들은 Cloudwatch log 그룹에서 확인할 수 있다.

 

Instance Scheduler Architecture

 

 

 


1. Cloudformation Stack 생성

AWS에서 제공하는 CloudFormation Stack을 사용해서 인스턴스 스케줄러에 필요한 리소스들을 쉽게 생성할 수 있다.

아래의 URL에서 템플릿의 주소를 복사해오자

 

docs.aws.amazon.com/solutions/latest/instance-scheduler/deployment.html#step1

 

Automated Deployment - AWS Instance Scheduler

For Amazon RDS instances, the tag value can be from 1 to 256 Unicode characters in length and cannot be prefixed with "aws:". The string can contain only the set of Unicode letters, digits, white-space, '_', '.', '/', '=', '+', '-' (Java regex: "^([\\p{L}\

docs.aws.amazon.com

 

1. aws에서 제공하는 템플릿을 이용해 Cloudformation stack을 생성해주자.

Cloudformation Stack 생성

 

 

2. 기본적인 설정들은 거의다 기본값으로 하고, 따로 설정이 필요한 몇몇 항목들만 살펴보겠다.

 

시간은 서울의 시간대로 설정해준다.

아래 항목에서 Regins은 빈칸으로 두면 현재 리전으로 설정된다.

Cloudformation stack 설정

 

 

3. Frequency 항목은 스케줄러가 발생하는 빈도를 정하는 부분이다. 아래처럼 5라고 되어있으면 5분마다 스케줄러가 발생한다는 뜻이다. 

스케줄러를 자주 해줘야 하는 인스턴스가 아니라면 굳이 자주할 필요가 없다. 지금은 빠르게 테스트하려고 5분으로 설정했지만 30 으로 설정해줘도 상관없다.

Cloudformation stack 설정

 

 

4. Enable CloudWatch Logs를 Yes로 해주자. Cloudwatch logs 로 로그를 관리해줌

 

인스턴스가 시작되고 종료될 때의 상태를 다음과 같이 태그로 남길 수 있다.

시작될때의 태그는 state 값은 started 가 된다.

Cloudformation stack 설정

 

5. 그 외에 옵션 부분은 전부 기본값으로 설정해주었다. 하지만 마지막 단계에서 저 부분은 꼭 체크해주자.

해당 옵션을 체크하지 않으면 리소스를 생성하는데 필요한 IAM을 설정할 수 없다.

Cloudformation stack 설정

 

 

 

6. 인스턴스 스케줄러의 스택이 생성되었다.

Cloudformation stack 생성


2. DynamoDB에서 시간대 설정해주기

DynamoDB에서 태그를 이용해 EC2 인스턴스를 스케줄링 할 수 있다.

 

 

 

1. 스택 생성이 완료되었다면 DynamoDB에 접속했을때, 아래와 같이 3개의 테이블이 새로 생성된 것을 볼 수 있다.

이 3개의 테이블 중에서 ConfigTable로만 작업을 진행한다. 

DynamoDB 테이블 확인

 

 

2. ConfigTable을 보면 다양한 항목들이 있다. 이중에서 schedule 타입의 running 이라는 항목으로 시험해보겠다.

DynamoDB Table 설정

 

 

 

3. 먼저 테스트 하고자 하는 인스턴스를 중지시켜주자

인스턴스 중지

 

 

4. 인스턴스의 태그를 키 : Schedule 값 : running 라고 넣어주자

 

(처음에 태그를 schedule로 소문자로 넣어주었는데 하도 안되서 뭐가 잘못된 건지 몰랐다..ㅠㅠ

태그는 대/소문자를 구분한다고 하니 유의하자!!!)  스케줄러 작업하다 새로운 것을 배워간다 ^^

인스턴스 태그 설정

 

 

5. 이제 스택 생성할 때 설정했던 Frequency 시간이 지나는 것을 기다리자.. 5분뒤에 확인해보니 설정했던 인스턴스가 실행중이 된것을 확인했다.

인스턴스 실행 확인

 

 

6. 스케줄러를 통해 인스턴스가 실행되면 설정 했던대로 State - started 태그가 자동으로 생기는 것을 확인할 수 있다.

 

 


3. 특정 시간대에만 켜지도록 설정해보기

이제 인스턴스 스케줄러가 제대로 작동하는 것을 확인했으니, 원하는 시간대에만 인스턴스가 실행되도록 설정해 주도록ㅎ ㅏ자

 

 

1. 특정 시간대에만 켜지도록 설정해 보도록 하자. period 타입에서 office-hours라는 항목으로 설정해 주도록 한다.

하지만 수정이 안된다.. 이 항목을 직접 수정하려면 AWS CLI를 사용해 직접 바꿔줘야 한다. 

AWS CLI를 사용하는 방법은 번거롭고 귀찮으니까 다른 방법을 사용하겠다.

 

 

 

 

2. office-hours를 클릭하고 작업 > 복사 눌러주자

 

 

 

3. 그러면 복사된 항목에서 새로 수정이 가능하게 된다. 여기서 원하는 시간대를 정해주면 된다.

 

월요일 - 금요일 18:00시에 시작되고 03:00시에 종료되는 스케줄러에 적용되는 시간대 설정

 

 

4. 다음으로는 타입이 schedule이고 이름이 uk-office-hours인 항목을 복사해서 수정해주자.

이제 위에서 적용시킨 Asia/Seoul의 시간대로 스케줄러가 생성되었다.  

 

 

 

5. 스케줄러를 적용해줄 인스턴스에 태그를 넣어주면 이제 원하는 시간대에만 실행되는 인스턴스가 만들어진다>!!

 

 

 

 

 

 

이제 인스턴스를 원하는 시간대에만 실행시켜 주어서 불필요하게 실행중인 인스턴스들을 자동으로 종료하게 해주자.

굳이 직접 인스턴스를 끄고 키고 하는 번거로움을 줄일 수 있게 되었다.