티스토리 뷰

회사에서 개발용 DB를 항상 켜 두기엔 비용이 부담스럽고,
매번 수동으로 시작/중지하기엔 귀찮은 경우 많죠? 😅
그래서 오늘은 AWS RDS (PostgreSQL) 인스턴스를
👉 평일 09시~19시만 자동으로 구동하고,
👉 주말에는 완전히 꺼두는 자동화 방법을 정리했습니다.
✅ 목표
| 항목 | 내용 |
| DB 엔진 | PostgreSQL (AWS RDS) |
| 대상 인스턴스 | x2-db-dev01 (여러개의 RDS를 동시에 처리 가능) |
| 구동 시간 | 월~금 09:00 ~ 19:00 |
| 미가동 | 토요일, 일요일 |
| 사용 서비스 | Lambda + EventBridge + IAM |
쿠팡이 추천하는 골드박스 관련 혜택과 특가
쿠팡이 추천하는 골드박스 관련 특가를 만나보세요. 로켓와우 회원은 다양한 할인과 무료 배송 및 반품 혜택도 누릴 수 있어요.
pages.coupang.com
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
🧩 전체 구성도
EventBridge (스케줄러)
↓
Lambda (Start / Stop)
↓
RDS 인스턴스 (PostgreSQL)
- EventBridge가 평일 09:00과 19:00에 Lambda를 자동 실행
- Lambda에서 여러 RDS 인스턴스를 동시에 Start/Stop 수행
1️⃣ IAM 역할 생성 (Lambda가 RDS 제어할 수 있도록)
1.1. 메뉴 이동
AWS 콘솔 → IAM → 역할 → 역할 생성

1.2. 역할 생성

- 신뢰할 수 있는 엔터티 → AWS Service 선택
- 사용 사례 → Lambda 선택 → [다음]

- 권한 정책 검색창에 rds 입력 후 →
✅ AmazonRDSFullAccess 선택
- 권한 정책 검색창에 logs 입력 후 →
✅ CloudWatchLogsFullAccess 선택 → [다음]

- 역할 이름: lambda-rds-scheduler-role
- [역할 생성] 클릭 🎉
2️⃣ Lambda 함수 생성 (RDS Start/Stop 코드)
2.1. 메뉴 이동
AWS 콘솔 → Lambda → [함수] → [함수 생성]

2.2. 함수 생성

- 함수 이름 : rds-postgres-scheduler
- 런타임 : Python 3.13

- 실행역할 : 기존 역할 사용 → lambda-rds-scheduler-role 선택
- 함수 생성 클릭
2.3. 코드 등록


- 아래의 코드를 코트 영역에 입력한다.
import boto3
def lambda_handler(event, context):
rds = boto3.client('rds')
# ⚠️ 제어할 RDS 인스턴스 목록 (DBInstanceIdentifier 값)
db_instances = [
'x2-db-dev01',
]
action = event.get('action')
for db_instance in db_instances:
try:
if action == 'start':
print(f"[START] Starting RDS instance: {db_instance}")
rds.start_db_instance(DBInstanceIdentifier=db_instance)
elif action == 'stop':
print(f"[STOP] Stopping RDS instance: {db_instance}")
rds.stop_db_instance(DBInstanceIdentifier=db_instance)
else:
print(f"[SKIP] Invalid action for {db_instance}")
except Exception as e:
print(f"[ERROR] {db_instance}: {str(e)}")
print(f"Action '{action}' completed for {len(db_instances)} instance(s).")
2.4. 테스트 이벤트 생성
생성한 함수가 정상적으로 구동을 하는지 테스트 하기 위함. (필수 과정은 아님)
말이 테스트지 실제 함수가 구동되어 지정한 DB가 start 또는 stop 될 수 있으니, 주의 하세요.

- 상단 탭 [Test] 클릭
- 이벤트 이름: test-start
- 이벤트 공유 설정 : 기본은 프라이빗을 설정하는데, 다른 IAM 계정으로 테스트 함수를 이용하려면 공유 가능으로 설정. (초기 생성하면 변경이 되지 않으니 수정하려면 다시 재생성해야 함)
- 이벤트 JSON:
{ "action": "start" }
- [Test] 실행 → 콘솔 로그에서 RDS가 시작되는지 확인
- 같은 방법으로 test-stop 이벤트도 만들어서 확인:
{ "action": "stop" }
3️⃣ EventBridge (스케줄러) 설정
3.1. 메뉴 이동
AWS 콘솔 → EventBridge → [일정] → [일정생성]

3.2. RDS 시작 규칙 (평일 09:00 KST) 생성
3.2.1. 세부 일정 등록

- 일정 이름 : rds-start-weekdays-09
- 설명 : 매주 월~금 09:00에 RDS 시작

- 발생 : 반복 일정 선택
- Cron 표현식 : 0 9 ? * MON-FRI * → 각각의 항목칸에 입력후 아래와 같이 예시로 트리거 되는 일시가 나오니 체크 한다.
- 유연한 기간 : 5분

3.2.2. 대상 선택


- 대상 API : AWS Lambda invoke
- 람다함수 : rds-postgres-scheduler
-
페이로드 :
{ "action": "start" }
- [다음] 클릭 → [설정 단계]에서 [다음] 클릭 → [일정검토 및 생성] 단계에서 [일정생성] 클릭
3.3. RDS 중지 규칙 (평일 19:00 KST) 생성
3.3.1. 세부 일정 등록

- 일정 이름 : rds-stop-weekdays-19
- 설명 : 매주 월~금 19:00에 RDS 중지

- 발생 : 반복 일정 선택
- Cron 표현식 : 0 19 ? * MON-FRI *
- 유연한 기간 : 5분
3.3.2. 대상 선택


- 대상 API : AWS Lambda invoke
- 람다함수 : rds-postgres-scheduler
- 페이로드 :
{ "action": "stop" }
- [다음] 클릭 → [설정 단계]에서 [다음] 클릭 → [일정검토 및 생성] 단계에서 [일정생성] 클릭
4️⃣ CloudWatch Logs 확인
Lambda 실행 로그는 자동으로 CloudWatch에 저장됩니다.
만약, 아래 그림과 같이 로그가 생성이 되지 있지 않으면, 생성한 IAM / 역할 (lambda-rds-scheduler-role)에 CloudWatchLogsFullAccess 권한이 없어서 로그가 생성되지 않은 것이니 추가해 주세요.
AWS 콘솔 → CloudWatch → Logs → Log groups → /aws/lambda/rds-postgres-scheduler



⚠️ 유의사항
| RDS 중지 한도 | 인스턴스는 최대 7일간 중지 가능, 이후 자동 재시작됨 |
| 과금 정책 | 중지 중엔 스토리지, 백업 스냅샷만 과금 |
| 자동 백업 | 중지 중에는 백업 수행되지 않음 |
| 권장 확인 | 평일 오전 09시 / 오후 18시 실제 동작 로그 꼭 점검 |
🧭 마무리
이 설정을 적용하면
“업무 시간 외에는 DB를 꺼두고,
다음날 아침엔 자동으로 켜지는”
스마트한 RDS 운영 환경을 만들 수 있습니다. ☁️
불필요한 비용을 줄이고, 관리 효율을 극대화하세요! 💰💡
🔗 참고 링크
'DBMS > PostgreSQL' 카테고리의 다른 글
| [AWS] RDS - PostgreSQL 생성 (0) | 2025.09.12 |
|---|---|
| 개발DB로 PostgreSQL를 결정한 이유 (0) | 2025.09.09 |