티스토리 뷰

반응형

 

 

 

회사에서 개발용 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).")
 
➡️ 코드 작성 후 [Deploy] 클릭

2.4. 테스트 이벤트 생성

생성한 함수가 정상적으로 구동을 하는지 테스트 하기 위함. (필수 과정은 아님)

말이 테스트지 실제 함수가 구동되어 지정한 DB가 start 또는 stop 될 수 있으니, 주의 하세요.

  • 상단 탭 [Test] 클릭
  • 이벤트 이름: test-start
  • 이벤트 공유 설정 : 기본은 프라이빗을 설정하는데, 다른 IAM 계정으로 테스트 함수를 이용하려면 공유 가능으로 설정. (초기 생성하면 변경이 되지 않으니 수정하려면 다시 재생성해야 함)
  • 이벤트 JSON:
{ "action": "start" }
  •    [Test] 실행 → 콘솔 로그에서 RDS가 시작되는지 확인
  1. 같은 방법으로 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
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형