IaC: EC2 인스턴스 Start/Stop 자동화
Source: Dev.to

개발용 EC2 인스턴스에서 작업하고 싶었는데, 필요 이상으로 오래 켜두어 지갑이 아프게 된 경험이 있을 겁니다, 특히 더 비싼 인스턴스 유형을 실험하고 싶을 때는 더욱 그렇습니다.
특정 상황에 인스턴스가 필요할 수도 있습니다; AWS 콘솔을 통해 설정하고 나면 모든 것을 수동으로 삭제하는 번거로움이 뒤따릅니다. 코드형 인프라(IaC)의 장점이 매우 크다고 생각하며, 이는 빈번하고 재현 가능한 좋은 사용 사례라고 봅니다.
이 스택은 개발/테스트 환경을 위해 설계되었으며 인스턴스 유형, 스토리지, 인스턴스 격리 여부, 종료 및 시작 시간, 시간대 등에 대해 높은 유연성을 제공합니다. 부족한 부분이 있으면 언제든지 필요한 수정 및 배포가 가능합니다.
무엇이 필요합니까?
- AWS 계정
- Node.js + npm
- AWS CLI 설치
- 자격 증명 구성 (
aws configure) - 레포지토리를 클론합니다 (레포지토리)
- 계정/리전에서 CDK 부트스트랩 (설정되지 않은 경우)
전제 조건을 모두 충족하고 프로젝트의 npm 의존성을 설치한 후, 가장 기본적인 명령을 실행할 수 있습니다:
cdk deploy
이 명령은 기본값을 배포합니다 (모두 최소 테스트 비용을 고려, 예: 인스턴스 t2.micro, rootVolume 20 GB, 등).
기본적으로 인스턴스는 Running 상태이며, 작업 시간은 월요일부터 금요일까지 오전 9시부터 오후 7시까지 예약됩니다.
인스턴스에 연결하려면 ID를 가져와 다음을 실행합니다:
aws ssm start-session --target
매개변수로 구성 가능한 항목
- InstanceType:
t2.micro(무료 티어)부터 고성능 컴퓨팅 인스턴스까지. - MachineImage: 기본값은 Amazon Linux 2023이며, 특정 AMI ID를 주입할 수 있습니다.
- RootVolumeSize / DataVolumeSize: 시스템과 데이터용 스토리지를 별도로 관리합니다.
- ScheduleStartCron / ScheduleStopCron: AWS 표준 cron 구문을 사용합니다. 기본값은 근무 시간(오전 9시‑오후 7시)입니다.
- 시간대:
America/Argentina/Buenos_Aires로 사전 설정되어 있습니다. - AssignPublicIp: 기본값은
false; 인스턴스는 프라이빗 서브넷에 배치됩니다.
사용자 정의 매개변수로 배포 예시
cdk deploy \
-c instanceType=r6i.8xlarge \
-c rootVolumeSize=50 \
-c dataVolumeSize=500 \
-c scheduleStartCron="cron(0 13 ? * MON-FRI *)" \
-c scheduleStopCron="cron(0 21 ? * MON-FRI *)" \
-c project=big-data-analytics \
-c environment=staging
이 명령은 다음을 배포합니다:
- r6i.8xlarge 유형의 인스턴스.
- rootVolume EBS 볼륨 50 GB.
- dataVolumeSize EBS 볼륨 500 GB.
- 월요일부터 금요일까지 오후 1시 (13 h) ART에 시작하도록 예약.
- 월요일부터 금요일까지 오후 9시 (21 h) ART에 중지하도록 예약.
- 비용 추적 및 관리용 태그:
project=big-data-analytics및environment=staging.
고려사항
- EBS Volume Root: 안전한 자동 전원 차단 및 켜기를 허용하며, 데이터 손실이 없습니다.
- Delete on Termination: 스택을 삭제하면 EBS 볼륨도 함께 삭제됩니다. 스택을 삭제한 후에도 볼륨을 유지해야 하는지 평가하세요.
- Timezone: EventBridge Scheduler 규칙의 기본 시간대는
America/Argentina/Buenos_Aires이며, 다른 파라미터가 제공되지 않으면 이 시간대가 사용됩니다.
여기까지 읽어 주셔서 감사합니다. 직접 시도해 보세요!
모든 피드백을 환영합니다. 코드는 GitHub 저장소에서 확인하세요.
