이 문서에서는 On-prem 배포 검증처럼 고객사·테넌트별로 격리된 스펙을 빠르게 띄웠다 내리는 EC2 환경 운영 패턴을 정리합니다. 매번 수동 SSH·VPC 셋업을 반복하면 비용과 휴먼 에러가 누적되므로, IaC와 스케줄러로 정형화합니다.
풀려는 문제
- 테넌트마다 환경이 다릅니다 (CPU/메모리/디스크 스펙, OS, 사전 설치 SW).
- 환경은 임시지만, 다시 띄울 수 있어야 합니다.
- 사용자가 여럿입니다 (내부 엔지니어 + 외부 협력사) — SSH 키 관리에 일관성이 필요합니다.
- 검증 시간 외에 켜두면 비용이 누수되므로 자동 시작/종료가 필요합니다.
- VPN 안에서만 접근 가능해야 합니다 — 퍼블릭 노출 금지.
안티패턴 (개선 전)
Warning
아래는 실제로 운영해 본 결과 문제가 누적된 패턴입니다. 신규 환경에서는 피해 주세요.
- 테스트 환경마다 VPC를 따로 생성 → peering이 폭발하고 관리 비용이 늘어납니다.
- SSH 공개키를 Terraform 코드나
user_data에 하드코딩 → 키 로테이션이 어렵고, 깃 노출 위험이 있습니다. - 24/7 가동 → 야간/주말 비용이 그대로 새어 나갑니다.
핵심 패턴
모듈화 + 테넌트별 환경 분리
사용하는 리소스는 거의 같다는 가정 하에, 사용자 모듈을 정의하거나 커뮤니티 모듈을 사용하여 유지보수성을 늘리고 새로운 환경도 빠르게 추가합니다.
공유 VPC
테넌트별 VPC가 아니라 공통 VPC와 subnet을 공유합니다.
- 새 환경 추가 시 네트워크 리소스를 만들지 않으므로 분 단위 프로비저닝이 가능합니다.
- 과도기에 만든 환경은 예외로 두고, 신규는 모두 공유 VPC로 통일합니다.
SSH 키 자동 주입
하드코딩 대신 부팅 시 동적으로 주입합니다.
- EC2에 IAM role을 부착해 Secret Manager·S3 read 권한을 부여합니다.
user_data스크립트에서 다음을 수행합니다.- AWS CLI로 Secret Manager에서 자격증명·메타정보를 조회
- S3에 보관된 공개키 묶음을 다운로드
~/.ssh/authorized_keys에 등록
- 키 회전은 S3 객체 교체 + 인스턴스 재부팅으로 끝나며, 코드 변경이 필요 없습니다.
자동 시작/종료 스케줄러
EventBridge Schedule (cron) → Lambda → EC2 Start/Stop API
태그 기반으로 제어하면 인스턴스에 태그만 붙여서 적용할 수 있습니다. 예를 들어 다음과 같은 태그를 설정하면 됩니다.
AutoSchedule = "true"→ 평일 working hours에 자동 시작 + 자동 종료AutoShutdown = "true"→ 자동 종료만 (시작은 수동)
Lambda는 EventBridge에서 action=start|stop 파라미터를 받아 태그 필터로 인스턴스를 일괄 처리합니다. 특정 환경을 끄면 안 되는 경우가 있다면 태그를 부착하지 않으면 자동 제외됩니다.
Payload에 태그를 넘기게 세팅해 두면 Lambda 코드를 여러 벌 만들지 않아도 됩니다.
Tip
Lambda IAM 정책에서
Condition.StringEquals로ec2:ResourceTag/AutoSchedule = "true"인 리소스에만 Start/Stop을 허용하도록 제한하세요. Lambda 코드에 버그가 있어 엉뚱한 인스턴스 ID를 넘기더라도 IAM에서 차단되는 2중 안전장치가 됩니다. 자동화가 의도한 대상만 건드리도록 하는 데 효과적인 패턴입니다.
보안 기본값
- SSH는 VPN CIDR만 허용합니다 (예: 사내 VPN 대역). 퍼블릭 SSH는 금지합니다.
- HTTP/HTTPS는 필요할 때만 0.0.0.0/0으로 엽니다 (검증 대상 서비스 노출용).
- IMDSv2를 강제합니다 —
metadata_options.http_tokens = "required". v1은 SSRF로 credential 탈취 위험이 있습니다.
접속 방법
VPN을 켠 상태에서 Private IP로 접속합니다.
ssh <user>@<private-ip>Bastion은 외부에서 직접 EC2 장비에 접근이 필요할 경우 고려합니다. 여기서는 설명하지 않습니다.
키워드 / 참고 리소스
- Terraform 모듈: terraform-aws-modules/ec2-instance/aws (v6+)
- AWS: EventBridge Scheduler, Lambda, Secrets Manager, S3, IAM Instance Profile
- 관련 개념: VPC Peering — 공유 VPC ↔ 사용자 VPN VPC 연결에 사용
확장 아이디어
- 환경 수가 더 늘면 EC2에서 ECS/EKS 잡 형태로 전환을 검토할 수 있습니다.
- SSH 대신 SSM Session Manager를 사용하면 인바운드 포트가 0개가 되고 IAM으로 인증할 수 있어, VPN 의존도를 낮추고 싶을 때 유용합니다.
- 자동 만료(예: 생성 30일 후 자동 destroy)를 걸어 두면 잊혀진 환경이 누적되는 것을 막을 수 있습니다.