회사 공용 개발 계정을 사용하는 과정에서 EC2 인스턴스를 실행한 뒤 종료하는 것을 깜빡 잊어 불필요한 비용이 발생할 뻔한 경험이 있었습니다. 이를 방지하기 위해 EC2 인스턴스를 자동으로 제어하고 관리할 수 있는 프로그램을 직접 개발하게 되었습니다.
다만, 실수로 다른 개발자의 인스턴스를 건드리는 것을 방지하기 위해 HTML에 제가 관리하는 인스턴스 목록만 입력하여 사용하고 있습니다. 그러나 개인 계정의 경우 Lambda에서 반환되는 모든 인스턴스를 그대로 표시하고 활용해도 무방합니다.
AWS EC2 인스턴스 자동 제어 및 예약 종료 프로그램은 웹 인터페이스를 통해 인스턴스를 손쉽게 시작하거나 중지할 수 있으며, 특정 시간(예: 1시간 후)에 자동 종료되도록 태그를 설정하는 기능을 제공합니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다.
(위 URL은 예시이며, 실제 공개 저장소 URL을 사용하세요.)
npm install
을 통해 필요한 라이브러리(예: @aws-sdk/client-ec2
, axios
등)가 설치됩니다.이 부분은 AWS Lambda(람다) 함수를 손쉽게 자동 생성하는 방법 포스트를 참고해주세요.
TELEGRAM_BOT_TOKEN
, TELEGRAM_CHAT_ID
등)ScheduledEC2Stopper
함수는 10분 간격 등 주기적으로 실행되어 EC2 인스턴스들을 모니터링하고 자동으로 중지해야 할 인스턴스를 찾아내는 역할을 합니다. 이를 위해 EventBridge 규칙을 이용하여 Lambda 함수를 스케줄링할 수 있습니다.
1. 트리거 추가 버튼 클릭
2. EventBrigge 선택
3. 추가 버튼 클릭
cron
또는 rate
표현식을 사용하여 설정할 수 있습니다.이 프로그램을 활용하면 EC2 인스턴스를 실제로 필요한 시간에만 실행하고 일정 시간이 지나면 자동으로 종료되도록 설정할 수 있어 매달 불필요하게 지출되는 비용을 효과적으로 절감할 수 있습니다.
보안 측면에서는 IAM 권한을 최소 권한 원칙(Principle of Least Privilege)에 따라 설정하는 것이 중요합니다. 또한, 다수의 인스턴스를 관리할 경우 AWS Lambda의 타임아웃, 호출 주기, 동시 실행 수 등의 제한 사항을 고려하여 확장성을 보장해야 합니다.
현재 프로그램은 특정 람다 엔드포인트(URL)만 알고 있으면 누구나 접근할 수 있는 상태이므로, 개인 인증 기능을 추가하여 보안을 강화하는 것을 권장합니다.