본문 바로가기

Amazon Web Services

[AWS] NAT Gateway에서 NAT 인스턴스 전환을 통한 비용 절감하기

* 실제 프로덕션 환경에서는 NAT Gateway를 사용하는 것이 NAT 인스턴스를 이용하는 것에 비해 장점이 많습니다.

* 개발 환경에서의 비용 절감을 위한 솔루션입니다.


왜 NAT Gateway에서 인스턴스로 전환을 하는지?

우리는 현재 대학교 4학년 졸업 작품을 진행 중이다.

배포 환경을 AWS로 구성하고 사용 중인데, RDS하나, EC2 두 개를 띄워두는데 지난달 비용이 5만 원 넘게 나왔다.

(이거는 심지어 지난달 초중반부터 돌린 거라 다음 달은 더 나올 거다.)

 

비용 절감이 필요하다고 느껴지기에 일단 가장 큰 지출부터 확인해 보자.

지난달 청구서를 확인해 보니, 가장 큰 비용을 차지하고 있는 게 NAT Gateway다.

 

프라이빗 서브넷에서 외부로의 통신을 가능하게 해 주는데, 필수적으로 필요한 기능이긴 하다.

자체 로직이 동작하는 서버라면 패키지 업데이트를 하거나 외부 통신이 필요할 때를 제외하면 NAT Gateway를 안 쓸 때 삭제하여 비용을 절감할 수도 있지만, 우리 백엔드가 외부와 API 통신을 하기에 그 방법은 힘들 거 같았다.

 

그래서 나온 결론이 'NAT의 기능을 하는 인스턴스를 직접 생성하자'이다.


NAT Gateway의 장점

별도로 NAT 게이트웨이를 우리가 직접 구성하지 않고, 아마존에서 관리하는 NAT Gateway를 생성 후 서브넷 라우팅 테이블에 붙여주기만 해도 알잘딱깔센으로 자동으로 수평 확장도 해주고, 트래픽 처리 성능도 뛰어나다.

 

근데 이 장점들이 우리같이 트래픽도 거의 발생하지 않는 졸업작품 개발환경에서는 스케일링도 필요 없고 고가용성 또한 아직 급한 기능은 아니기에 딱히 와닿지 않는다.

 

그렇기에 귀찮더라도 NAT의 역할을 해주는 인스턴스를 직접 구성하면 인스턴스 비용만 내고 이용할 수 있다.

비용차이는 얼마나 날까? 한번 알아보자.


💸 NAT Gateway 비용

서울 리전 기준으로 NAT Gateway는 시간당 0.059 달러 + 처리된 데이터 GB 당 0.059달러다.

(안 그래도 환율도 올라서 더 마음 아픈데 심지어 다른 리전보다 더 비싸다.)

한 달 풀로 쓰면 현재 시점 기준 6만 1,464.31원이 NAT Gateway 가격으로만 나간다.

(트래픽비용 제외하고 시간당 비용으로만 계산해도)


기대되는 비용 절감 효과?

t4g.nano라는 가장 싼 인스턴스를 이용하면 인스턴스 비용 비용만 지출하면 된다.

$3.024(t4g.nano). 원화로 계산하면 4,414원이며

기존의 6만 1,464원 -> 4,419원으로 약 93% 가량의 비용 절감 효과를 볼 수 있다.

(매달 다 같이 밥 한 끼를 공짜로 먹을 수 있는 돈이다.)


NAT 인스턴스 구성 가이드

가장 저렴한 NAT 구성 솔루션을 제공할 예정이다.

STEP 1. 인스턴스 생성

인스턴스 타입은 t2.nano 이용하자.

(ARM 기반의 더 저렴한 t4g.nano를 사용하는 방법도 있는데, 아래의 AMI 설정 가이드 부분만 건너뛰고 기본 아마존 리눅스로 진행한 다음 인스턴스 생성 후 ssh로 접속하여 다음 명령어를 입력해 주면 된다.)

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo dnf install iptables -y
sudo iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE

더 많은 AMI 찾아보기 < 선택

검색어에 ami-vpc-nat 입력 후 커뮤니티 AMI 탭에서 그냥 게시 날짜 최신인 거 하나 고르면 된다.

(아무거나 골라도 크게 상관없다.)

 

그 이후 네트워크 설정 탭에서

퍼블릭 서브넷에 배치하고 퍼블릭 IP 자동 할당활성화를 해야 된다.

보안 그룹은 인바운드에 ssh, http, https, icmp를 허용해야 되는데

ssh를 제외하고 http, https, icmp는 내 vpc ip 범위를 전부 허용해 준다. ( 내 VPC의 인스턴스로부터만 트래픽을 받기 위해 )

 

여기까지 완료되었다면 인스턴스 생성을 진행하자.

이거는 선택사항인데 NAT 인스턴스는 보통 외부 서비스와 연동을 할 때 방화벽 연동을 탄력적 IP를 달아서 고정 IP로 사용한다.

근데 일단 우리와 같이 외부 서비스와의 연동까지 가지 않고 그냥 자체 개발 환경이기에 우리는 탄력적 IP는 달아두지 않았다.

(또한 탄력적 IP가 인스턴스에 달아두면 무료라고 생각하는 분들이 있는데 최근에 비용 산정 방식이 바뀌어서 인스턴스에 달아놔도 비용이 발생한다.)

자 그리고 중요한 단계. NAT 인스턴스는 작업->네트워킹->소스/대상 확인 변경을 눌러서

중지 체크하고 저장하자. (NAT 역할에서 이게 체크되어 있으면 트래픽 다 사라진다.)

 

그러면 여기까지가 인스턴스 생성 후 세팅은 끝났다.

STEP 2. 라우팅 테이블 수정

이제 기존의 프라이빗 서브넷에서의 아웃바운드 트래픽이 NAT Gateway로 향하던 걸 NAT 인스턴스로 향하도록 바꾸면 끝난다.

기존의 NAT Gateway를 삭제해서 나는 블랙홀 상태로 뜬다 지금. 라우팅 편집을 누르자.

기존 거 날리고 모든 트래픽을 방금 생성한 NAT 인스턴스로 향하도록 바꾼다.

STEP 3. 테스트

잘 동작하는지 확인해 볼까? 베스천을 통해 프라이빗 서브넷의 인스턴스에 접속하여 ping google.com을 날려보자.

아주 잘 동작하는 것을 확인할 수 있다.

테스트가 끝났으니 NAT 인스턴스 보안그룹에서 이제 ICMP는 인바운드 풀어줘도 된다.