Question
DB 와 EC2 사이에 동일 VPC 내에서 내부 통신이 되게 하려면 주소를 어떻게 적어야 하는지 궁금합니다.
Answer
동일한 VPC 내의 EC2 인스턴스에서 DB와 내부 통신하기 위해서는 별도의 설정 없이 DB 엔드포인트 주소를 이용하시면 가능합니다.
단, EC2 서버와 DB을 연결하기 이전에 DB 보안 그룹과 EC2 보안 그룹에서 서로를 허용하는 룰을 추가해줘야 합니다.
IP로 허용해줄 수도 있지만, 보안 상 EC2와 DB의 보안그룹을 분리하고 각각의 보안그룹 ID를 이용하여 오픈하는 것을 권장드립니다.
[ 보안그룹 ID로 오픈하는 방법 ]
EC2와 RDS 각 서비스별로 보안 그룹을 구성해주고, 각각의 보안그룹에서 소스/목적지를 서로의 보안그룹으로 열어주는 방법을 설명드리겠습니다.
1. RDS 보안그룹 생성 (MySQL)
1) 인바운드 규칙
유형 : MySQL (3306) / 소스 : EC2의 보안 그룹 ID
2. RDS 보안그룹 생성 (MySQL)
1) 아웃바운드 규칙
유형 : MySQL (3306) / 목적지: RDS의 보안 그룹 ID
3. EC2 - RDS 연결 테스트
mysql -u[사용자이름] -p[암호] -h[엔드포인트]
[ 신규 RDS 생성 시 자동으로 EC2 서버와 연결하는 방법 ]
최근에는 RDS 콘솔을 사용하여 RDS 생성 시 EC2 인스턴스와 DB 인스턴스 간의 연결 설정을 간소화할 수 있습니다.
동일 VPC에서 연결하고자 하는 EC2가 없을 때는 자동으로 생성됩니다.
하지만 DB 인스턴스와 EC2 인스턴스가 서로 다른 가용 영역에 있는 경우 교차 가용 영역 비용이 발생할 가능성이 있으니 주의가 필요합니다.
1. RDS 생성 (MySQL)
1)서브넷 그룹 생성
2) 데이터베이스 생성
2.1 엔진 및 인스턴스 구성, 설정 등을 선택
2.2 연결
- 컴퓨팅 리소스 ‘EC2 컴퓨팅 리소스에 연결’ 선택
- EC2 인스턴스 ‘연결하고자 하는 EC2 인스턴스’ 선택
2. RDS 콘솔 확인
1) [ 연결&보안 ]
: 포트와 IP가 자동 적용이 된 보안그룹의 자동 생성 및 적용 확인
2) [ 연결&보안 ] - [ 연결된 컴퓨팅 리소스 ]
: EC2 인스턴스와 포트 및 IP가 자동 적용 된 보안그룹이 자동으로 적용된 것을 확인
3. EC2 확인
1) [ EC2 인스턴스 ] - [ 보안 ] - [ 인바운드 규칙 및 아웃바운드 규칙 ] 확인
: EC2 인스턴스와 포트 및 IP가 자동 적용 된 보안그룹이 자동으로 적용된 것을 확인
[ DB 엔드포인트 퍼블릭 액세스와 프라이빗 액세스의 차이 ]
기본적으로 VPC 내부의 DB는 Private IP를 가집니다. 그리고 퍼블릭 접근을 허용하면 추가적으로 Public IP를 부여받게 됩니다.
VPC 내부에서 확인되는 엔드포인트
같은 VPC 내에서 확인해보면 VPC 대역대의 Private IP가 반환되는 것을 확인할 수 있습니다.
VPC 외부에서 확인되는 엔드포인트
VPC 외부에서 확인하면 Public IP가 반환되는 것을 확인할 수 있습니다.
위와 같이 VPC 내부에서는 엔드포인트가 Private IP로, 외부에서는 Public IP로 연결(DNS resolve)되기 때문에 같은 엔드포인트로 통신하더라도 VPC 내부에 있는 EC2와 DB와 Private 통신을 할 수 있게 됩니다.
감사합니다.
=== 참고 문서 ===
[1] Amazon RDS DB 인스턴스에 연결
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_CommonTasks.Connect.html
[2] EC2 인스턴스와 DB 인스턴스를 자동으로 연결
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/ec2-rds-connect.html
[3] VPC에서 DB 인스턴스에 액세스하는 시나리오
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/ec2-rds-connect.html