본문으로 건너뛰기

RDS (Single Instance) Setup for Pistachio EKS

RDS (Single Instance) Setup for Pistachio EKS

Pistachio EKS 클러스터와 연동되는 단일 RDS (MySQL) 인스턴스를 생성하는 가이드임.

목차

전제 조건

EKS 클러스터(pistachio-cluster)가 이미 생성되어 있어야 함. RDS는 EKS와 동일한 VPC 내에 배치하거나, 피어링된 VPC에 위치해야 함. 여기서는 EKS가 생성한 VPC에 RDS를 배치하는 것을 가정함.

# 1. VPC ID 확인
export VPC_ID=$(aws ec2 describe-vpcs --filters "Name=tag:alpha.eksctl.io/cluster-name,Values=pistachio-cluster" --query "Vpcs[0].VpcId" --output text --region ap-southeast-1)
echo "VPC ID: $VPC_ID"

# 2. 서브넷 ID 확인 (Private Subnet 권장)
# eksctl로 생성 시 보통 Public/Private 서브넷이 생성됨. 여기서는 모든 서브넷을 사용하거나 특정 태그로 필터링함.
export SUBNET_IDS=$(aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPC_ID" --query "Subnets[*].SubnetId" --output text --region ap-southeast-1 | tr '\t' ' ')
echo "Subnet IDs: $SUBNET_IDS"

보안 그룹 (Security Group) 설정

RDS에 대한 접근을 제어하기 위한 보안 그룹을 생성함. EKS의 워커 노드들이 속한 VPC CIDR 또는 워커 노드 보안 그룹으로부터 3306 포트 접근을 허용함.

# 1. RDS용 보안 그룹 생성
export RDS_SG_ID=$(aws ec2 create-security-group \
--group-name pistachio-rds-sg \
--description "Security group for Pistachio RDS" \
--vpc-id $VPC_ID \
--region ap-southeast-1 \
--output text --query GroupId)
echo "RDS Security Group ID: $RDS_SG_ID"

# 2. 인바운드 규칙 추가 (VPC 내부 3306 허용)
# 보안을 위해 VPC CIDR 전체 허용보다는 노드 그룹의 SG만 허용하는 것이 좋으나, 간편함을 위해 VPC CIDR로 예시를 듭니다.
export VPC_CIDR=$(aws ec2 describe-vpcs --vpc-ids $VPC_ID --query "Vpcs[0].CidrBlock" --output text --region ap-southeast-1)

aws ec2 authorize-security-group-ingress \
--group-id $RDS_SG_ID \
--protocol tcp \
--port 3306 \
--cidr $VPC_CIDR \
--region ap-southeast-1

서브넷 그룹 (Subnet Group) 생성

DB 인스턴스가 위치할 서브넷들의 그룹을 만듦.

RDS > 서브넷 그룹 > DB 서브넷 그룹 생성

변수
이름pistachio-subnet-group
설명Pistachio RDS Subnet Group
VPC(EKS 클러스터 VPC)
가용 영역ap-southeast-1a, ap-southeast-1b
서브넷(Private Subnet 2개 선택)
# 서브넷 그룹 생성 CLI
aws rds create-db-subnet-group \
--db-subnet-group-name pistachio-subnet-group \
--db-subnet-group-description "Subnet group for Pistachio RDS" \
--subnet-ids $SUBNET_IDS \
--region ap-southeast-1

RDS 인스턴스 생성

단일 MySQL 인스턴스를 생성함. (Free Tier / 개발용)

RDS > 데이터베이스 > 데이터베이스 생성

구분변수
엔진 옵션엔진 유형MySQL
엔진 버전MySQL 8.0.x
템플릿템플릿프리티어 (또는 개발/테스트)
가용성 및 내구성배포 옵션단일 DB 인스턴스
설정DB 인스턴스 식별자pistachio-db
마스터 사용자 이름admin
마스터 암호<DB_PASSWORD>
인스턴스 구성DB 인스턴스 클래스db.t3.micro
스토리지스토리지 유형gp3
할당된 스토리지20 GiB
스토리지 자동 조정
연결VPC(EKS 클러스터 VPC)
DB 서브넷 그룹pistachio-subnet-group
퍼블릭 액세스❌ (아니요)
VPC 보안 그룹pistachio-rds-sg
가용 영역기본 설정 없음
데이터베이스 인증인증 옵션암호 인증
추가 구성초기 데이터베이스 이름(공란 또는 pistachio)
백업 보존 기간7일 (자동 백업)
삭제 방지
# RDS 생성 CLI
aws rds create-db-instance \
--db-instance-identifier pistachio-db \
--db-instance-class db.t3.micro \
--engine mysql \
--master-username admin \
--master-user-password password1234 \
--allocated-storage 20 \
--db-subnet-group-name pistachio-subnet-group \
--vpc-security-group-ids $RDS_SG_ID \
--region ap-southeast-1 \
--no-publicly-accessible \
--storage-type gp3

Note: 생성 완료까지 수 분이 소요됨. 아래 명령어로 상태를 확인할 수 있음.

aws rds describe-db-instances --db-instance-identifier pistachio-db --region ap-southeast-1 --query "DBInstances[0].DBInstanceStatus"

연결 확인

RDS 엔드포인트를 확인하고 애플리케이션(Deployment) 환경변수에 설정함.

# 엔드포인트 확인
export RDS_ENDPOINT=$(aws rds describe-db-instances \
--db-instance-identifier pistachio-db \
--region ap-southeast-1 \
--query "DBInstances[0].Endpoint.Address" \
--output text)
echo "RDS Endpoint: $RDS_ENDPOINT"

애플리케이션 배포 시 DB_HOST 등으로 $RDS_ENDPOINT 값을 주입하여 사용함.


리소스 정리

# 1. RDS 삭제 (스냅샷 없이)
aws rds delete-db-instance \
--db-instance-identifier pistachio-db \
--skip-final-snapshot \
--region ap-southeast-1

# 2. 서브넷 그룹 삭제
aws rds delete-db-subnet-group \
--db-subnet-group-name pistachio-subnet-group \
--region ap-southeast-1

# 3. 보안 그룹 삭제
aws ec2 delete-security-group \
--group-id $RDS_SG_ID \
--region ap-southeast-1

관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: RDS (Single Instance) Setup for Pistachio EKS
노드 클릭 → 이동 · 드래그 → 위치 조정