AWS Public IP 요금 부과에 따른 대처 및 EC2를 이용한 RDS 외부 연결하기
작년 말 즈음 AWS로부터 한통의 메일을 받았고, 그 내용은 AWS에서의 모든 public IP에 대한 요금을 부과 하겠다는 것이었다.
공지 – AWS Public IPv4 주소 요금 변경 및 Public IP Insights 기능 출시 | Amazon Web Services 한국 블로그
AWS에서 퍼블릭(Public) IPv4 주소에 대한 새로운 요금이 도입됩니다. 2024년 2월 1일부터 서비스 연결 여부에 관계없이 모든 퍼블릭 IPv4 주소에 대해 시간당 IP당 0.005 USD의 요금이 부과됩니다. 계정에 할당했지만 EC2 인스턴스에 연결하지 않은 퍼블릭 IPv4 주소에 대해서는 이미 요금이 부과되고 있습니다.
당시 AWS 크레딧이 꽤 여유가 있었기에 차일 피일 미루다 2월 중순쯤 작업(?)을 시작하였다.
AWS에서 백엔드 서버와 DB를 이용하고 있던 나는 현재 총 4개의 public IP를 사용하고 있었고, 이 중 프리티어 EC2에 부여된 하나의 주소를 제외한 나머지 3개 주소에 대한 요금이 2월부터 청구되고 있었다.1
IPv6 전환
일단 AWS에서 준 문서대로 보안그룹과 VPC 서브넷을 이리 저리 만져보며 IPv6로 세팅을 끝냈다.
그런데 아무리 해도 SSH 접속이 안되었다.
한참을 살펴보다 현재 이용중인 인터넷 서비스업체 (KT 또는 LGT)가 IPv6를 제대로 지원하지 않는다는 사실을 알게 되었다.
(만약 이 글을 보는 이의 환경이 IPv6를 지원한다면 여기서 모든게 해결된다!!)
IPv6을 테스트합니다.
여기에서 현재 네트워크가 IPv6를 지원하는지 테스트해볼 수 있으며 구글링하면 이외에도 더 있다.
허탈했고 이대로라면 AWS에서 프리티어를 이용하더라도 소액의 금액을 지불하지 않을 수 없는 상황이었다.
현재 이용중인 public IPv4 IP는 다음과 같았다.
- EC2 public 주소 - 서버 배포용으로 탄력적 IP를 이용중2
- RDS public 주소 - DB 클라이언트와 IDE에서 연결하기 위해 사용
- Load Balancer - HTTPS와 HTTP를 따로이 연결하며 2개의 public IPv4주소 사용중3
issue
즉 현재 상황에서 비용지출을 줄이기 위한 당면과제는 다음과 같았다.
- EC2의 경우 다행히 하나의 public 주소는 무료이다.
- HTTPS 연결을 위해 세팅했던 Load Balancer의 public 주소는 다른 방법을 강구해야한다.
- RDS의 경우 public 주소가 없으면 외부 개발도구에서 연결하기가 힘들다.
1번은 프리티어 플랜으로서 자연스레 해결되었고
2번의 경우는 Route53과 Load Balancer를 이용한 방법에서, 도메인 서비스의 프록싱을 이용한 직접 연결 방법으로 해결하였다.
(관련 글 - AWS EC2 서버에 HTTPS 적용하기(2) - Cloudflare 이용 방법 - inchan.dev)
그리고 3번 RDS에 관한 해결안은 이제 아래에서 다룬다.
public 엑세스 없이 RDS를 외부에서 연결하기
AWS의 RDS 이용시 SQL 클라이언트로 연결할 수 없다면 정말로 불편한게 이만저만이 아니었다.
오랜시간 끙끙대며 여러 문서들을 살펴보고 이것저것 세팅을 바꿔가며 테스트해보고 고민했다.
그렇게 AWS의 여러 공식문서들을 살펴보다가 AWS의 네트워킹 시스템에서 방법을 찾았다.
위 이미지와 같이 외부에서는 EC2의 Public subnet으로 연결할 수 있고, 이 Public subnet은 또다시 RDS의 Private subnet으로 연결할 수 있다. 마치 모니터 연결시 bridge 방식으로 연결하는 데이지 체인과 같은 원리로 연결을 할 수 있었다.
(참고문서 - EC2 인스턴스와 DB 인스턴스를 자동으로 연결 - Amazon Relational Database Service)
AWS EC2와 RDS 연결
AWS의 RDS는 EC2에 연결해둘 수가 있다.4
즉, EC2의 public IPv4주소를 이용하여 외부에서 AWS EC2 내부 넷망으로 들어갈 수 있고 이때, RDS가 연결되어있다면 내부 넷망을 통해 RDS 역시 접속 가능하다는 것이다.
바로 세팅을 해보려는데 EC2와 RDS를 연결하려면 동일한 가용영역 내부에 있어야 무료이며, 다른 가용영역에 있다면 데이터 전송비용이 추가로 부과될 수 있는데… 안타깝게도 다른 영역에 설치되어 있었다.
이에 기존 RDS의 스냅샷을 생성후,
스냅샷 마이그레이션을 통해 현재 EC2와 동일한 가용영역 내에서 새로운 RDS 인스턴스를 생성했다.
그리고 EC2를 연결해주면 일단 외부에서도 접속할 수 있는 길은 트이게 된다.
새로운 RDS를 생성하고 세팅중이라면 아래와 같이 EC2와 연결해준다.
위와 같이 진행하면 EC2와 같은 가용영역으로 확인하며 설치 진행할 수 있으며 이후의 세팅은 용도에 맞춰 진행하면 된다.
만약 이미 이용중인 RDS를 연결하고자 한다면 해당 RDS의 인스턴스 메뉴 중 “작업” 섹션에서 “EC2 연결하기"와 같은 메뉴를 볼 수 있다. 가용영역이 같다면 손쉽게 연결할 수 있다.
SQL 클라이언트에 연결하기
현재 DBeaver, DataGrip 등의 SQL 클라이언트를 사용중인데 연결 방법은 모두 대동소이했다.
아래에서는 DataGrip의 예시로 설명을 한다.
UI나 일부 메뉴 이름이 다르더라도 이해하는데 큰 지장은 없으리라 본다.
우선 세션 연결을 위해 “새로운 연결"을 진행하고, SSH 구성에서 “…“을 클릭한다.
호스트에는 EC2 public IPv4 주소를 입력
포트는 SSH이기에 22
그대로 둔다.
그리고 인증타입은 AWS EC2의 보안그룹에 따라 key.pem 파일이나 비밀번호 등 세팅한 방식에 맞게 맞춰준다.
그리고 연결테스트를 하면 끝!
이제 EC2의 public주소와 SSH 연결 방법을 통해 RDS 역시 외부망에서 접속할 수 있다.
-
대략 보름 정도 사용했을 때 $5.63 정도 청구되었다. 즉 한달이면 약 $10정도가 청구된다는 뜻이었다. ↩︎
-
EC2용 AWS 프리 티어에는 2024년 2월 1일부터 처음 12개월 동안 매월 750시간의 퍼블릭 IPv4 주소 사용이 포함됩니다. - 공지 – AWS Public IPv4 주소 요금 변경 및 Public IP Insights 기능 출시 | Amazon Web Services 한국 블로그 => 즉 하나의 EC2에서 하나의 IP 주소만 사용한다면 무료이기에 신경쓸 필요가 없다. ↩︎
-
AWS EC2 서버에 HTTPS 적용하기(1) - Route53과 로드밸런서 이용 - inchan.dev ↩︎
-
참고문서 : 자습서: Amazon RDS 데이터베이스에 Amazon EC2 인스턴스 연결 - Amazon Elastic Compute Cloud ↩︎
Related Content
- AWS EC2 서버에 HTTPS 적용하기(2) - Cloudflare 이용 방법
- AWS EC2 서버에 HTTPS 적용하기(1) - Route53과 로드밸런서 이용
- AWS EC2에서 Product 서버와 개발용 서버 같이 사용하기
- AWS RDS 데이터 - 다른 계정으로 이전하기
- Error Log - AWS EC2의 SSH 접속이 안될 때