너무나도 비싼 NAT Gateway
저번달 AWS 비용을 보니... 청구된 요금이 크게 올랐다. 원래는 VPC가 1개 있었는데, 필자가 VPC를 2개를 더 만들면서 각각의 VPC에 NAT Gateway를 두면서 비용이 크게 올랐다. 필자는 개발환경과 운영환경을 VPC를 나누어서 구분하고 있는데, VPC 내부에는 public subnet과 private subnet을 나누어서 사용하고 있다. Private subnet 내의 ec2 인스턴스에서는 NAT gateway가 없으면 외부로 인터넷 접속을 할 수 없기 때문에, NAT gateway를 만들어야 하고 그래서 NAT gateway를 써왔다. Private subnet을 두는 이유는 보안을 위해서이다. 외부에서 접근하면 안 되는 서버나 데이터베이스 등은 private subnet에 두는 것이 권장된다. 그렇지만, private subnet에 있는 인스턴스도 주기적으로 업데이트는 해줘야하니 인터넷 연결은 필요하다.
하지만 문제는 NAT gateway가 비싸다는 점이다. 서울 리전 기준으로 1시간당 0.059달러의 가격을 가지고 있기 때문에 하루에 1.42달러, 한 달에 42.48달러가 나가게 된다. 이런걸... 여러 개 만들게 된다면... 필자는 NAT Gateway 3개를 만들었는데, 3개를 만들면 한달 고정지출이 127.44달러가 나오게 된다. 말도 안된다. 거기다가 NAT gateway가 처리하는 데이터 1GB 당 0.059달러를 추가로 청구한다. 거기다가 부가가치세(VAT)는 포함되지 않은 가격이므로... 부가가치세가 추가되면 140달러... 한화 18만원에 육박한다. 부가가치세 환급을 받을 수 있는 사업자라면 VAT는 괜찮겠지만, 환급을 받을 수 없는 개인이라면 부담스러울 것이다. 거기다가 NAT gateway에는 추가로 요금이 부과되는 Elastic IP를 할당해야해서 가격이 추가로 또 붙게 된다. Elastic ip(계정당 한개까지는 무료)는 1개당 1개월에 부가가치세 미포함 약 3.6달러의 요금이 발생한다.
서울 지역 NAT Gateway 요금 (여기다가 사용한 데이터 양만큼 추가로 요금 발생, Elastic IP 요금도 추가로 발생) | ||
시간 | 가격 (VAT 미포함) | 가격 (VAT 포함) |
1시간 | 0.059$ | 0.0649$ |
1일 (24시간) | 1.416$ | 1.5576$ |
1달 (30일) | 42.48$ | 46.728$ |
청구서가 날아오니 문제의 심각성(?)을 인지하게 되었다. 자연스럽게 해결방법을 찾게 되었다. 두 가지 정도의 방법이 있었다. 안 쓸 때는 NAT gateway를 삭제하는 방법 그리고 더욱 저렴한 솔루션인 fck-nat라는 솔루션을 사용하는 방법이다. 필자는 fck-nat 도입을 하였다.
사용하지 않을 때는 NAT gateway 삭제하는 대안
Private subnet의 인스턴스들이 항상 인터넷 접속이 필요한 것은 아니다. 패키지 업그레이드를 할 때나 필요한 정도이기 때문에 인터넷이 필요한 경우에만 NAT gateway를 만들고, 그 외의 시간에는 NAT gateway를 삭제하여 요금을 절약하는 방법이다. AWS CLI 등으로 스크립트를 만들면 편하게 적용할 수 있는 방법이겠지만, 스크립트 실행하는 것도 귀찮고, 스크립트 실행을 까먹게 된다면 요금을 청구당할 수 있기 때문에 사용하지 않았다.
fck-nat 적용하는 대안
AWS의 비싼 NAT Gateway를 해결하기 위한 fck-nat라는 오픈소스 프로젝트가 있다. 이름이 웃기지만, (f)easible (c)ost (k)onfigurable NAT의 약자라고 한다. 뭔가 다른 것을 노린 것 같지만... ㅋㅋㅋㅋ
해당 툴을 ec2 인스턴스에 직접 설치해서 사용하거나, fck-nat AMI를 사용해서 ec2 인스턴스를 생성할 수도 있고, IaaC 툴 등에서도 적용이 가능하다고 한다. 물론, VPC 라우트 테이블을 설정해주고, source/destination check 설정을 바꿔주고, security group을 설정해주는 작업은 필요하다.
적용하는 방법은 fck-nat 공식 페이지를 참고하자. 적용하는 방법이 그렇게 어렵지는 않다.
그렇다면 fck-nat를 적용한다면 어느 정도 절약할 수 있을까? fck-nat를 적용하면 fck-nat 사용요금은 없기 때문에, fck-nat가 설치되는 ec2 인스턴스에 대해서만 요금을 지불하면 된다. ec2 인스턴스 중 저렴한 t4g.nano 인스턴스의 사용을 가정해보자. 서울 리전 기준의 요금으로 t4g.nano는 시간당 0.0052달러이다. 하루에 0.12달러, 한달에 3.74달러가 된다. NAT gateway와 비교했을 때, 아주 합리적인 가격이 된다! 또한, private subnet을 사용하고 있다면 아마 높은 확률로 bastion 인스턴스가 있을 것인데 더욱 절약하고 싶다면 bastion 인스턴스를 fck-nat 인스턴스 겸용으로 사용할 수도 있을 것이다. ec2 인스턴스는 데이터 통신에 따른 추가요금도 거의 없다고 봐도 무방하기 때문에(들어오는 데이터는 요금이 없고, 나가는 데이터는 한달에 100GB까지 무료이다), NAT gateway를 쓰는 것에 비해 매우 합리적이라고 할 수 있다.
서울 지역 fck-nat를 적용했을 때의 요금 (t4g.nano 사용 가정) | ||
시간 | 가격 (VAT 미포함) | 가격 (VAT 포함) |
1시간 | 0.0052$ | 0.00572$ |
1일 (24시간) | 0.1248$ | 0.13728$ |
1달 (30일) | 3.744$ | 4.1184$ |
물론, ec2 인스턴스에는 대역폭 제한이 있기 때문에 높은 대역폭이 필요한 경우에는 AWS가 제공하는 NAT gateway를 사용하는 것이 좋을 수도 있다.
AWS의 NAT gateway를 사용하면 1달 사용 가격(부가가치세 포함)이 한화 약 6만원이였는데, fck-nat를 도입하면 5천원 정도의 수준이 된다. 지출을 1/10 수준으로 낮출 수 있는 것이다.
결론
AWS의 managed 서비스 등을 사용하면 편할 수는 있지만, 비싼 경우가 많이 있다. NAT gateway의 경우에도 상당히 비싼 편인데(한달에 1개당 약 5~6만원의 가격), 개인으로써는 요금이 부담스러워질 수도 있다. NAT gateway의 비용을 절감할 수 있는 대안도 있으므로 요금이 부담스러워진다면 대안 적용을 검토해보도록 하자.
'개발관련' 카테고리의 다른 글
[Flutter] 소스코드 안의 긴 String을 깔끔하게 만드는 방법 (1) | 2024.02.05 |
---|---|
Google AdSense Site Verification 실패 시 해결 경험 (0) | 2023.12.17 |
MySQL은 대소문자를 구분할까? 정답은 OS에 따라 다르다. (0) | 2023.10.25 |
Chrome Lighthouse 소개 - 개발한 사이트의 성능, 접근성, PWA, SEO를 체크해보자! (0) | 2023.07.23 |
AWS CLI 자동완성 기능 설정하기 (0) | 2023.07.13 |