AWS RDS (Relational Database Service) 개념 정리

Sue·2025년 6월 23일
post-thumbnail

🐘 AWS RDS (Relational Database Service)

🐘 RDS란?

AWS에서 MySQL, PostgreSQL, Oracle 등 관계형 데이터베이스를 설치 없이 사용할 수 있게 해주는 서비스로 운영, 백업, 장애 복구, 보안 설정을 AWS가 관리해줍니다.

✔️ 한 줄 요약

AWS에서 제공하는 “관리형 관계형 데이터베이스” 서비스


✅ 자세히 설명하면?

  • RDS는 MySQL, PostgreSQL, Oracle, SQL Server 등 관계형 데이터베이스를
    직접 설치하고 운영하지 않아도 되도록 AWS가 대신 관리해주는 서비스입니다.
  • 데이터베이스 설치, 백업, 패치, 고가용성, 복제, 보안 등 많은 복잡한 작업을 AWS가 자동으로 처리

🎯 사용 이유

기존 방식 (EC2에 DB 직접 설치)RDS 사용 시
OS 관리 필요❌ 불필요
DB 설치/버전 관리 수동자동 설치 & 유지보수
직접 백업 스크립트 짜야 함자동 백업 제공
장애 복구 직접 처리해야 함Multi-AZ, 장애 복구 옵션 있음

🛠️ 사용 예시

  • Lambda 함수에서 RDS(PostgreSQL)에 연결해서 유저 정보 저장
  • EC2에서 Django 앱이 RDS(MySQL)를 사용

🔌 Lambda → RDS 연결 예제 (Python / psycopg2 + PostgreSQL 기준)

✅ 환경 전제

  • RDS PostgreSQL 인스턴스 생성 완료
  • VPC/Subnet 설정 OK (람다에서 접근 가능)
  • DB 사용자명/비밀번호는 SSM Parameter Store에 저장되어 있음

📄 예제 코드

import os
import psycopg2
import boto3

# SSM 파라미터에서 비밀번호 가져오기
def get_secret_from_ssm(param_name):
    ssm = boto3.client("ssm")
    response = ssm.get_parameter(Name=param_name, WithDecryption=True)
    return response['Parameter']['Value']

def lambda_handler(event, context):
    host = os.environ["DB_HOST"]        # RDS endpoint
    dbname = os.environ["DB_NAME"]
    user = os.environ["DB_USER"]
    password = get_secret_from_ssm("/prod/db/password")  # SSM에서 가져오기
    port = 5432

    conn = psycopg2.connect(
        host=host,
        dbname=dbname,
        user=user,
        password=password,
        port=port
    )

    with conn.cursor() as cur:
        cur.execute("SELECT NOW();")
        result = cur.fetchone()
        print("현재 시간:", result)

    conn.close()

⚠️ IAM 권한 주의

Lambda가 SSM과 RDS에 접근하려면 다음 IAM 정책이 필요:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameter",
        "ssm:GetParameters"
      ],
      "Resource": "arn:aws:ssm:ap-northeast-2:123456789012:parameter/prod/db/*"
    }
  ]
}

1. RDS는 퍼블릭 접근 ❌ → Lambda는 VPC 서브넷 안에 넣어야 접근 가능

RDS는 보통 보안을 위해 퍼블릭 IP를 사용하지 않음
→ Lambda도 RDS와 같은 VPC 안에 있어야 연결 가능

  • Lambda 설정 → “VPC 연결” 설정 필요 (Subnet + Security Group)

2. Lambda가 연결할 수 있는 포트는 보통 5432 (PostgreSQL 기준)

→ 보안 그룹에서 Lambda → RDS 간 Inbound 허용 필요


3. 커넥션 풀링 주의 (Lambda는 함수마다 새 연결을 맺기 때문)

  • 짧은 시간에 많은 요청이 몰리면 DB 커넥션이 고갈될 수 있음

  • 해결책:

    • Lambda 함수에서 연결 재사용
    • Aurora Serverless 같은 자동 스케일링 DB 고려
    • RDS Proxy 사용

🔑 요약

항목설명
접근 방식Lambda → VPC 내 RDS 연결
인증 정보SSM Parameter Store로 안전하게 관리
연결 시 주의점보안 그룹, VPC 설정 필수
실무 팁커넥션 풀링/리소스 고갈 주의, Proxy 고려 가능

profile
AI/ML Engineer

0개의 댓글