AWS에서 MySQL, PostgreSQL, Oracle 등 관계형 데이터베이스를 설치 없이 사용할 수 있게 해주는 서비스로 운영, 백업, 장애 복구, 보안 설정을 AWS가 관리해줍니다.
AWS에서 제공하는 “관리형 관계형 데이터베이스” 서비스
| 기존 방식 (EC2에 DB 직접 설치) | RDS 사용 시 |
|---|---|
| OS 관리 필요 | ❌ 불필요 |
| DB 설치/버전 관리 수동 | 자동 설치 & 유지보수 |
| 직접 백업 스크립트 짜야 함 | 자동 백업 제공 |
| 장애 복구 직접 처리해야 함 | Multi-AZ, 장애 복구 옵션 있음 |
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()
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/*"
}
]
}
RDS는 보통 보안을 위해 퍼블릭 IP를 사용하지 않음
→ Lambda도 RDS와 같은 VPC 안에 있어야 연결 가능
5432 (PostgreSQL 기준)→ 보안 그룹에서 Lambda → RDS 간 Inbound 허용 필요
짧은 시간에 많은 요청이 몰리면 DB 커넥션이 고갈될 수 있음
해결책:
| 항목 | 설명 |
|---|---|
| 접근 방식 | Lambda → VPC 내 RDS 연결 |
| 인증 정보 | SSM Parameter Store로 안전하게 관리 |
| 연결 시 주의점 | 보안 그룹, VPC 설정 필수 |
| 실무 팁 | 커넥션 풀링/리소스 고갈 주의, Proxy 고려 가능 |