"EC2에 db를 띄워보자."
AWS ECS + Fargate 조합으로 배포하기 전에, DB를 배포해야 되는데 RDS 사용, EC2로 DB 관리하기 등 다양한 방법이 있지만 이번 포스팅은 EC2에 DB를 배포하려고 한다.
** VPC, 서브넷은 모두 설정되었다는 가정하에 진행한다.
1. DB 서버 생성
1. EC2 이름 정의 및 애플리케이션 및 OS 이미지 선택
- 이름 : blog-db-server
- OS : Ubuntu Server 24.04 LTS
2. 키 페어 선택 및 네트워크 설정
- 키 페어 : 없다면 새로 생성 (나는 기존에 만든 Key가 있기 때문에 그대로 사용)
- VPC : 기존에 생성한 VPC가 있다면 선택 (없다면 ,default 값 선택)
- 서브넷 : DB 정보는 노출 되면 안되기 때문에 Private 서브넷 선택
- 퍼블릭 IP 자동 할당 : 비활성화 (외부 접근 차단)
- 보안 그룹 생성
- 이름 : blog-db-sg
- ssh (22) , db port (5432) 열어주기
- 이외 설정은 기본 설정 그대로 진행
2. DB 서버 접속 - Bastion 서버
앞선 만든 서버에 접속해서 DB를 설치해야 하는데, 연결 버튼을 클릭하면 다음과 같이 뜨면서 연결할 수 없다.
왜 그럴까?!
➡️ 그 이유는 바로, 해당 인스턴스는 프라이빗 서브넷에 위치해 외부에서 접속이 불가능하기 때문이다!
✅ 따라서 Bastion 서버를 통해 접속 해줘야한다.
2-1. Bastion 인스턴스 생성
1. EC2 이름 정의 및 애플리케이션 및 OS 이미지 선택 (1-1과 동일)
- 이름 : blog-bastion-server
- OS : Ubuntu Server 24.04 LTS
2. 키 페어 선택 및 네트워크 설정
- 키 페어 : 없다면 새로 생성 (나는 기존에 만든 Key가 있기 때문에 그대로 사용)
- VPC : 기존에 생성한 VPC가 있다면 선택 (없다면 ,default 값 선택)
- 서브넷 : bastion 서버는 외부에서 접근 가능해야 하므로 Public 서브넷에 위치
- 퍼블릭 IP 자동 할당 : 활성화 (외부 접근 허용)
- 보안 그룹 생성
- 이름 : blog-bastion-sg
- ssh (22), http, https 허용
- 이외 설정은 기본 설정 그대로 진행
3. bastion 서버 접속
이때, bastion 서버와 DB 서버는 같은 VPC 내에 위치하기 때문에 접속이 가능하다. 다만 접속하기 위해서는 DB 인스턴스의 SSH 키가 필요하므로 SSH Agent Forwarding 방식으로 진행하려고 한다.
3-1. 로컬 PC에서 SSH 키 추가
- 키가 있는 위치에서 다음 명령어 실행
ssh-add /path/to/key.pem
3-2. SSH Agent Forwarding 활성화
ssh -A ubnutu@bastion-public-ip
3-3. Bastion 서버 접속 후, 키 등록 확인
4. DB 서버 접속
ssh ubuntu@db-server-private-ip
3. PostgreSQL 설치
이제, DB 서버에 접속했으니 본격적으로 DB를 설치해보자.
3-1. 패키지 업데이트
sudo apt update
3-2. PostgreSQL 설치
sudo apt install postgresql postgresql-contrib -y
🔥 에러가 발생했다!!! 하지만, 이미 예견된 에러였다. 왜일까?!
➡️ 잘 생각해보면, DB는 프라이빗 서브넷에 위치해있고 외부 인터넷과 연결이 안되는 상태이다. 그 말은 즉슨, postgresql은 외부 인터넷에서 다운 받아야되는데 인터넷 연결이 안되어있기 때문에 다음과 같은 에러가 뜨는 것이다.
✅ 해결 방법 : NAT Gateway를 사용해야 한다.
3-3. NAT Gateway 사용
- VPC > NAT 게이트웨이 생성 클릭
- 이름 : blog-natgateway
- 서브넷 : 퍼블릭 서브넷 선택 (외부 접근 가능해야 하므로 반드시 퍼블릭 서브넷에 위치!!)
- 연결 유형 : 퍼블릭
- 탄력적 IP 할당
** 다만, 주의할 점은 NAT Gateway는 비용이 부과되므로 이 점 유념해야한다!!
만약, 비용 청구가 부담된다면 Nat Instance를 따로 생성해서 하는 방법도 있는데 이 과정은 좀 귀찮(?)기도 하고 Nat Instance와 비교했을 때 NAT Gateway를 사용하는게 비교했을 때 더 좋다고 생각한다.
- 관리 부담이 덜 함. (NAT Gateway는 Fully Managed , but Instance로 만들면 내가 직접 관리해야함)
- 인스턴스는 아무래도 EC2 타입을 따라가지만 Gateway는 최대 45Gbps 자동 스케일이 되어서 성능이 더 좋음
- NAT Gateway는 클릭 몇 번으로 빠르게 설정할 수 있음
4. 프라이빗 서브넷 (DB 서브넷) 라우팅 테이블 수정
- 0.0.0.0/0 → NAT Gateway로 향하도록 설정
5. 이후 다시 2번 과정 시도하면 DB 설치가 성공적으로 마무리 된다!
'클라우드' 카테고리의 다른 글
[CLOUD] AWS ECS + Fargate 이해 (0) | 2025.05.24 |
---|---|
[CLOUD] 3-Tier Architecture Server 배포 - ECS + Fargate (4) | 2025.05.24 |
[CLOUD] S3 CloudFront - AccessDenied (1) | 2025.05.10 |
[CLOUD] CloudFront (CDN) (0) | 2025.05.04 |
[CLOUD] 3-Tier Architecture 배포 - S3+CDN (1) (0) | 2025.05.04 |