와탭랩스 블로그 오픈 이벤트 😃
자세히 보기
테크
2025-03-20
AWS EC2 인스턴스 자동 제어를 통해 요금 폭탄 사전에 방지하기

회사 공용 개발 계정을 사용하는 과정에서 EC2 인스턴스를 실행한 뒤 종료하는 것을 깜빡 잊어 불필요한 비용이 발생할 뻔한 경험이 있었습니다. 이를 방지하기 위해 EC2 인스턴스를 자동으로 제어하고 관리할 수 있는 프로그램을 직접 개발하게 되었습니다.

다만, 실수로 다른 개발자의 인스턴스를 건드리는 것을 방지하기 위해 HTML에 제가 관리하는 인스턴스 목록만 입력하여 사용하고 있습니다. 그러나 개인 계정의 경우 Lambda에서 반환되는 모든 인스턴스를 그대로 표시하고 활용해도 무방합니다.

1. 프로그램 소개 및 화면 예시

EC2 인스턴스 제어

AWS EC2 인스턴스 자동 제어 및 예약 종료 프로그램은 웹 인터페이스를 통해 인스턴스를 손쉽게 시작하거나 중지할 수 있으며, 특정 시간(예: 1시간 후)에 자동 종료되도록 태그를 설정하는 기능을 제공합니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다.

  • 비용 절감: 사용하지 않는 인스턴스를 자동으로 종료하여 불필요한 비용을 절감
  • 편의성: 웹 UI를 통해 간단히 인스턴스 상태를 확인하고 쉽게 제어 가능
  • 자동화: 예약 종료 태그를 이용해 종료 시간을 지정해두면 별도의 수동 조작 없이 인스턴스를 자동으로 정지

2. 사전 준비 사항

2.1. AWS 계정 및 IAM 권한 설정

  • EC2 인스턴스에 대한 시작/중지 권한이 있는 IAM 사용자 자격 증명(Access Key & Secret Key)이 필요합니다.
  • Route53을 사용해 DNS 레코드를 자동으로 업데이트하려면 해당 권한도 IAM 정책에 포함되어 있어야 합니다.

2.2. Node.js & npm 환경 구성

  • AWS SDK 및 필수 라이브러리를 설치하기 위해 Node.js 환경이 필요합니다.
  • 버전은 최신 LTS 버전을 권장합니다.

2.3. GitHub 저장소 확인

  • 본문 하단에 공개된 GitHub 저장소의 파일 구조를 참고하세요.
  • 저장소를 클론하거나 ZIP 파일로 다운로드하여 프로젝트를 진행합니다.

3. 코드 다운로드 및 설치

3.1. GitHub에서 프로젝트 복제

(위 URL은 예시이며, 실제 공개 저장소 URL을 사용하세요.)

3.2. 의존성 설치

  • npm install을 통해 필요한 라이브러리(예: @aws-sdk/client-ec2, axios 등)가 설치됩니다.

3.3. 람다 함수 생성 및 파일 업로드

이 부분은 AWS Lambda(람다) 함수를 손쉽게 자동 생성하는 방법 포스트를 참고해주세요.

  • AWS Lambda 함수 생성
  • ScheduledEC2Stopper 폴더 전체 압축
  • 함수 코드에 파일을 업로드
  • 필요한 경우 환경 변수를 설정(예: TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID 등)
    • 텔레그램과 연동하면 인스턴스가 시작되는 순간과 1시간 이상 사용될 때 메시지로 알려줍니다.

4. EventBridge 연결하기

ScheduledEC2Stopper 함수는 10분 간격 등 주기적으로 실행되어 EC2 인스턴스들을 모니터링하고 자동으로 중지해야 할 인스턴스를 찾아내는 역할을 합니다. 이를 위해 EventBridge 규칙을 이용하여 Lambda 함수를 스케줄링할 수 있습니다.

1. 트리거 추가 버튼 클릭

key

2. EventBrigge 선택

key
  • 소스 선택에서 EventBrigge를 선택합니다.

3. 추가 버튼 클릭

key
  • 규칙 이름과 표현식을 입력하시고 추가 버튼을 클릭합니다.
  • 반복 주기는 cron 또는 rate 표현식을 사용하여 설정할 수 있습니다.

5. 결론 및 추가 팁

이 프로그램을 활용하면 EC2 인스턴스를 실제로 필요한 시간에만 실행하고 일정 시간이 지나면 자동으로 종료되도록 설정할 수 있어 매달 불필요하게 지출되는 비용을 효과적으로 절감할 수 있습니다.

보안 측면에서는 IAM 권한을 최소 권한 원칙(Principle of Least Privilege)에 따라 설정하는 것이 중요합니다. 또한, 다수의 인스턴스를 관리할 경우 AWS Lambda의 타임아웃, 호출 주기, 동시 실행 수 등의 제한 사항을 고려하여 확장성을 보장해야 합니다.

현재 프로그램은 특정 람다 엔드포인트(URL)만 알고 있으면 누구나 접근할 수 있는 상태이므로, 개인 인증 기능을 추가하여 보안을 강화하는 것을 권장합니다.

와탭 모니터링을 무료로 체험해보세요!