본문으로 건너뛰기

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
노드 클릭 → 이동 · 드래그 → 위치 조정