Amazon RDS 사용하기
RDS 데이터베이스가 우리 계정에 생성되었습니다. 나중에 사용할 엔드포인트와 비밀번호를 가져오겠습니다:
eks-workshop-catalog.cluster-cjkatqd1cnrz.us-west-2.rds.amazonaws.com
이 과정의 첫 번째 단계는 이미 생성된 Amazon RDS 데이터베이스를 사용하도록 catalog 서비스를 재구성하는 것입니다. 애플리케이션은 ConfigMap에서 대부분의 구성을 로드합니다. 한번 살펴보겠습니다:
apiVersion: v1
data:
RETAIL_CATALOG_PERSISTENCE_DB_NAME: catalog
RETAIL_CATALOG_PERSISTENCE_ENDPOINT: catalog-mysql:3306
RETAIL_CATALOG_PERSISTENCE_PROVIDER: mysql
kind: ConfigMap
metadata:
name: catalog
namespace: catalog
다음 kustomization은 ConfigMap을 덮어쓰며, MySQL 엔드포인트를 변경하여 애플리케이션이 이미 생성된 Amazon RDS 데이터베이스에 연결하도록 합니다. 이는 환경 변수 CATALOG_RDS_ENDPOINT에서 가져옵니다:
- Kustomize Patch
- ConfigMap/catalog
- Diff
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../../../base-application/catalog
- secrets.yaml
- nlb.yaml
patches:
- path: catalog-configMap.yaml
- path: deployment.yaml
apiVersion: v1
data:
RETAIL_CATALOG_PERSISTENCE_DB_NAME: catalog
RETAIL_CATALOG_PERSISTENCE_ENDPOINT: ${CATALOG_RDS_ENDPOINT}:3306
RETAIL_CATALOG_PERSISTENCE_PROVIDER: mysql
kind: ConfigMap
metadata:
name: catalog
namespace: catalog
apiVersion: v1
data:
RETAIL_CATALOG_PERSISTENCE_DB_NAME: catalog
- RETAIL_CATALOG_PERSISTENCE_ENDPOINT: catalog-mysql:3306
+ RETAIL_CATALOG_PERSISTENCE_ENDPOINT: ${CATALOG_RDS_ENDPOINT}:3306
RETAIL_CATALOG_PERSISTENCE_PROVIDER: mysql
kind: ConfigMap
metadata:
name: catalog
RDS 데이터베이스를 사용하도록 이 변경사항을 적용해 보겠습니다:
ConfigMap이 새로운 값으로 업데이트되었는지 확인합니다:
apiVersion: v1
data:
RETAIL_CATALOG_PERSISTENCE_DB_NAME: catalog
RETAIL_CATALOG_PERSISTENCE_ENDPOINT: eks-workshop-catalog.cjkatqd1cnrz.us-west-2.rds.amazonaws.com:3306
RETAIL_CATALOG_PERSISTENCE_PROVIDER: mysql
kind: ConfigMap
metadata:
labels:
app: catalog
name: catalog
namespace: catalog
이제 새로운 ConfigMap 내용을 적용하기 위해 catalog Pod를 재시작해야 합니다:
pod "catalog-788bb5d488-9p6cj" deleted
Waiting for deployment "catalog" rollout to finish: 1 old replicas are pending termination...
error: timed out waiting for the condition
오류가 발생했습니다 - catalog Pod가 제시간에 재시작되지 못한 것 같습니다. 무엇이 잘못되었을까요? Pod 로그를 확인하여 무슨 일이 일어났는지 살펴보겠습니다:
Using mysql database eks-workshop-catalog.cjkatqd1cnrz.us-west-2.rds.amazonaws.com:3306
2025/05/06 05:52:02 /appsrc/repository/repository.go:32
[error] failed to initialize database, got error dial tcp 10.42.179.30:3306: i/o timeout
panic: failed to connect database
Pod가 RDS 데이터베이스에 연결할 수 없습니다. RDS 데이터베이스에 적용된 EC2 Security Group을 다음과 같이 확인할 수 있습니다:
{"SecurityGroups": [
{"Description": "Catalog RDS security group",
"GroupName": "eks-workshop-catalog-rds-20221220135004125100000005",
"IpPermissions": [
{"FromPort": 3306,
"IpProtocol": "tcp",
"IpRanges": [],
"Ipv6Ranges": [],
"PrefixListIds": [],
"ToPort": 3306,
"UserIdGroupPairs": [
{"Description": "MySQL access from within VPC",
"GroupId": "sg-037ec36e968f1f5e7",
"UserId": "1234567890"
}
]
}
],
"OwnerId": "1234567890",
"GroupId": "sg-0b47cdc59485262ea",
"IpPermissionsEgress": [],
"Tags": [
{"Key": "Name",
"Value": "eks-workshop-catalog-rds"
}
],
"VpcId": "vpc-077ca8c89d111b3c1"
}
]
}
AWS 콘솔을 통해 RDS 인스턴스의 보안 그룹을 확인할 수도 있습니다:
RDS 콘솔 열기
이 보안 그룹은 특정 보안 그룹을 가진 소스에서 오는 경우에만 포트 3306으로 RDS 데이터베이스에 액세스하는 트래픽을 허용합니다. 위의 예시에서는 sg-037ec36e968f1f5e7입니다.