[TSJ] EC2 인스턴스 특정시간에 자동으로 시작, 종료하기

Young-mason·2021년 3월 7일
5

TSJ ( Today's Sap Jil )

목록 보기
2/2

💡 지난 주에 AWS 25달러 과금되고 열받아서 EC2 자동화 구현한 썰입니다

문제 상황 발생

두 번의 팀 프로젝트에서 팀장을 맡으면서, 두 프로젝트 모두 제 AWS 계정으로 EC2에 서버 배포를 진행하게 되었습니다.

AWS 프리티어의 경우 EC2 무료 작업시간을 최대 750h로 제공하는데, 2월달에 인스턴스 두개가 풀로 돌아가면서 1200 시간 정도를 사용하게 되어, 생각보다 금액이 쎄게 나왔습니다. 25달러로 약 3만원정도.. 🤬

거의 치킨 두마리 값을 날려버렸는데, 3월은 31일까지 있기때문에 그 이상이 계속해서 과금될게 분명했습니다..

머리굴리기

팀원들이 취업 포트폴리오에 쓰고 있는 프로젝트 서버를 갑자기 중지시킬 수는 없는 노릇이고, 팀원들에게 서버비 달라고 하기도 어려운 문제여서 고민이 많이 됐습니다.

그러다가 보통 인사 담당자님들이 밤 늦은 시간에 지원자들의 프로젝트를 볼 확률이 매우 낮을 거라는 생각이 불현듯 들었고, 거기다가 저와 팀원들도 밤 늦은 시간에 딱히 서버 구동이 필요하지 않았습니다.

그래서, 만약 자는 시간에 자동으로 EC2 인스턴스를 켜고 끌 수 있다면 어떨까?? 하는 생각이 들었습니다. 대충 계산했을 때 2월달에 쓴 1200시간에서 40% 정도 줄이면 700시간 정도 정도 되니까 과금을 막을 수 있을 것 같았습니다.

해결과정

[Lambda & CloudWatch]

여러 키워드로 구글링 해본 끝에 AWS의 Lambda 와 CloudWatch 라는 서비스의 존재를 알게되었습니다

🌟 Lambda
코드를 등록해놓고 실행해서 AWS에서 이용중인 작업을 컨트롤 할 수 있게 해주는 서비스.

🌟 CloudWatch
AWS 실시간 모니터링 서비스이며, 생성된 Lambda함수가 트리거되는 시간을 지정해서, 해당 시간에 자동으로 실행하도록 만들어줄 수 있음!

해결 과정을 간단하게 요약하면 아래와 같습니다

  1. IAM으로 역할 설정 (Ec2 켜고 끄는 기능 설정)
  2. Lambda 함수코드 작성
  3. CloudWatch에서 일정 생성 후 Lambda 코드 연결

:: Reference ::

👉 블로그 포스팅
👉 AWS 공식 가이드

Cloud Watch 에서 자동실행 날짜를 입력하는 키워드가 처음 보는 방식이라 헷갈렸지만 레퍼런스를 보면서 큰 문제 없이 구현하였습니다.

Cloud Watch에서 트리거시간을 조절해가면서 정상적으로 EC2 인스턴스가 종료되고 실행되었고 로그가 잘 찍히는 것을 확인했습니다!

그런데 여기서 또다른 문제 발생.. 인스턴스가 실행되었음에도 서버가 작동하지 않아 ssh로 접속하여 확인해보니, 인스턴스를 껐다 키게 될 경우 기존에 pm2로 구동되던 서버 프로세스가 종료되며 자동으로 실행되지 않는 문제가 있었습니다.

매일 아침 마다 ssh로 접속해서 pm2 start를 입력해 줄 수는 없는일이기 때문에 이제는 다시 인스턴스가 실행될 때 서버가 자동으로 돌아가도록 할 수 있는 방법을 찾아봐야 했습니다

[PM2 startup]

여기서 조금 오래 헤매게 되었는데, 여러 블로그와 Stack overflow 자료를 찾아보다가 기존에 사용중이던 PM2라이브러리의 기능 하나가 눈에 들어오게 되었습니다.

바로 Startup 이라는 기능입니다. 터미널에서 pm2 startup 을 실행하면, 현재 pm2 start로 실행중인 프로세스들을 우분투 시작프로그램으로 지정해줄 수 있습니다.

👉 공식 문서

이 명령어를 적용한 후에 인스턴스를 껐다가 키자 거짓말처럼 자동으로 서버코드가 실행되었습니다.

이후 Cloud Watch와 Lambda를 이용하여 자동으로 인스턴스가 시작될때도 서버가 실행되는지 테스트하여 정상적으로 동작하는 걸 확인하였습니다

결과

이로써 EC2 인스턴스 실행을 자동화하여 오전 9시부터 저녁 9시까지 12시간 동안만 돌아가게 만들어서, 프리티어 750시간을 넘지 않게 만들었습니다!

자동화를 이용하여 비용을 줄이게 된 첫번째 경험이었고, 과금된 금액보다 더 갚진 지식을 얻은것 같아 아주 기쁩니다 👍

profile
Frontend Developer

1개의 댓글

comment-user-thumbnail
2021년 6월 24일

안녕하세요, 영권님 궁금한 점이 있습니다. 완전 EC2 종료 후, EBS 스냅샷으로 다시 EC2 컴퓨팅을 하는 방법은 고민해보셨나요?

답글 달기