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