개발을 하면서 AWS를 사용하다보면 개발 서버도 AWS EC2에 배포하게 되는데 문제는 개발 서버를 사용하지 않을때도 EC2 인스턴스가 running중이면 요금이 발생한다는 것이다.
사용 하지 않을때는 인스턴스를 중지, 사용할때는 시작을 하여 수동으로 내리고 올려도 되긴 하지만 이를 까먹을 수도 있다.
이를 해결하기 위해 EC2에 scheduler를 사용하는 것을 찾아봤다.
EC2의 scheduler 순서를 아래와 같다.
▶ 템플릿 지정
새 리소스 생성으로 스택을 생성한다.
Amazon S3 URL에 AWS에서 제공해주는 템플릿 주소를 입력한다.
그리고 다음을 누른다.
▶ 스택 세부 정보 지정
스택 이름에 작성하고 싶은 이름을 입력한다.
Service(s) to schedule은 EC2에 사용할 것이므로 EC2 기본값으로 놔둔다.
Region(s)은 빈 값 시 현재 설정된 Region으로 자동 참조 된다.
Default time zone은 본인의 EC2 환경에 따라 조정한다. 여기서는 Asia/Seoul로 조정
Frequency는 테스트 시 5분(기본값)으로 해서 테스트 했지만 실제로 운영할때는 너무 잦게 람다를 호출하면 비용이 발생할까봐 60분으로 해놨다.
Enable CloudWatch Logs를 Yes로 변경한다.
Started tags는 state=started, Stopped tags는 state=stopped로 입력 후 다음을 누른다.
▶ 스택 옵션 지정
모두 기본값을 사용하므로 다음을 눌러 4단계를 넘어간다.
▶ 검토
다른것은 다 기본값을 사용하고 제일 하단에
‘AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다.’ 이 부분을 체크한다.
그 후 스택 생성을 누르면 CloudFormation에서 스택을 생성 중이라고 알려준다.(CREATE_IN_PROGRESS)
좀 많이 기다리면 생성이 완료 될 것이다.
CloudFormation 스택 생성이 완료되면 DynamoDB에 3개의 테이블이 생성된다.
나머지 테이블을 잘 모르겠지만 Config 테이블에 설정값을 수정하여 스케줄링을 설정할 수 있다.
(StateTable은 스케줄링 실행 후의 상태값을 저장하고 있는것 같다)
해당 config값을 수정 안하고 EC2의 태그를 Schedule=running으로 추가하면 CloudFormation에서 설정한 빈도 값에 따라 람다를 호출하고 람다에서는 EC2 인스턴스가 중지상태면 시작으로 올려준다.
하지만 목표는 업무 시간에는 EC2 개발 서버가 자동으로 실행되고 업무 외 시간에는 EC2 개발 서버가 중지되는 것을 원하기에 수정을 한다.
DynamoDB 테이블에서 type은 period, name은 office-hours를 체크하고 복제를 해서 새로 생성한다.
복제 된 테이블의 이름을 변경하고 begintime과 endtime은 업무 시간을 입력, weekdays는 평일에만 EC2를 실행하도록 ‘mon-fri’을 입력 후 저장한다.
그리고 type은 schedule, name은 uk-office-hours 테이블을 복제한다.
복제 된 테이블의 이름을 입력하고 periods는 아까 복제해서 작성한 period의 이름을 입력한다.
timezone은 ‘Asia/Seoul’을 입력 후 저장.
이제 스케줄링을 적용할 EC2의 태그에 Schedule=dev-period-schedule을 추가하면 된다.
이렇게 하면 스케줄링이 적용이 된다.
테스트 시 5분 빈도로 호출하도록 하여 테스트를 진행하였고 정상적으로 작동을 하는 것을 확인했다.
이제 남은 문제는 인스턴스는 스케줄링대로 실행이 되지만 인스턴스만 실행할 뿐 인스턴스 내부의 배포한 애플리케이션을 종료된 상태이다.
해당 문제는 EC2의 사용자 데이터에 스크립트를 추가하여 인스턴스 실행 시 애플리케이션을 실행하면 될 것 같다.
참조 :
https://aws.amazon.com/ko/solutions/implementations/instance-scheduler/
https://aws.amazon.com/ko/premiumsupport/knowledge-center/stop-start-instance-scheduler/
[AWS/EC2] EC2 인스턴스 시작 시 스크립트 실행 (0) | 2022.05.20 |
---|---|
[AWS/Postgresql] Postgresql 테이블 트리거(Trigger)로 람다(Lambda) 호출하기 (0) | 2022.05.20 |
댓글 영역