AWS 클라우드 비용을 3700달러에서 1800달러로 줄인 후기
지난 포스팅 참고
입사한지 한달이 지났을 무렵 갑자기 경영쪽에서 클라우드 요금이 2배 가까이 폭등해서 원인을 파악해달라는 긴급요청이 있었고 원인이 postgres 13의 지원 종료로 인한 추가 요금이라는걸 알게되었다.
그리고 4월 부터 순차적으로 기존 13버전이었었던 rds를 18버전 으로 업그레이드 하면서 요금을 줄어나가다가 아예 날잡고 안쓰고 방치되는 리소스 까지 싹다 정리하면서 클라우드 비용을 줄이기로 결정했고 그 후기를 쓴다.
aws에서 postgres 13 지원이 종료되니 기존의 것들을 계속 쓸수는 있지만 이에 대해서 추가 요금을 부과한다고 했다.
사실 이게 얼마나 되는지 몰랐는데 빌링에서 영수증을 보니까 인스턴스 한대당 한달에 144달러를 벌금으로 먹이고 있었다.
(정확히는 vcpu 하나에 72달러인데 보통 rds 인스턴스가 vcpu가 2개라서 2배인 144달러가 된다, 4개라면 4배가 된다...)
근데 이런 rds가 총 8개 씩이나 있었으니 한달에 무려 1150달러가 벌금으로 부과된것이었다.
이미 프로덕션으로 쓰고있는거라 한번에 전부 교체할순 없는 상황이라 일단 순차적으로 하나씩 업데이트를 진행했다.

12월 요금이 폭등하기전 평균 17001900 달러 수준이던게 2월 이후 3770달러를 찍었다.
rds를 업그레이드 하기 시작한 한 4월부터 요금이 점차 줄어들고있는 모습이다 이때는 그냥 rds만 업그레이드 한 상황이었다.
rds를 교체하면서 aws 콘솔을 확인하던중 생각보다 쓰질 않는데 그대로 방치된것들이 꽤나 많이 있었다.
테라폼으로 클라우드를 관리하고는 있지만 그냥 콘솔에서 직접 생성한거나 아니면 프로젝트별로 tf 파일이 있거나 도저히 어디에서 쓰이는건지 파악조차 어려운것들도 있었다.
특히 깃허브의 리포지토리는 300개가 넘었고 쿠버네티스에는 수십개가 넘는 네임스페이스랑 배포 설정이 그대로 남아있었다.
종료된것도 있지만 안쓰면서 방치된채로 쿠버네티스 리소스를 잡아먹고있는 서비스들도 있었다.
비용 절감 목적도 있지만 나중을 위해서라도 정리할 필요가 있어서 전부다 지우기로 했다.
쿠버네티스에 남아있는 유령 ns 부터 전부다 지우고 그다음으로 연결된 리소스를 지워야했다.
먼저 ns 목록부터 전부 뽑아낸다음 완벽히 종료된 프로젝트들을 정리했고 그중 pod가 없는것들은 바로 ns를 삭제했다.
pod가 남아있는것들도 종료 시켰는데 이 작업을 하던 도중 종료된지 23년이 지난 프로젝트인데 alb랑 nat가 그대로 남아있어서 매달 2060달러씩 지출되는것들도 있었다.
이것들은 생성 주체가 쿠버네티스라서 ns를 삭제하면서 같이 지웠다.
pod를 종료시키기전 로그를 하나하나 확인하면서 접속 기록이 있었는지 확인했는데 2년전을 마지막으로 깔끔한 상태가 대부분이더라.
ns를 통째로 삭제하면서 시크릿도 삭제하는데 혹시라도 나중에 확인해야할 경우를 대비해(그럴일은 거의 없겠지만) 시크릿 env 자체는 전부 백업을 진행했다.
내부 개발용으로 쓰던 인스턴스나 종료되었지만 아직 그대로 남아있던 인스턴스들을 지우기로했다.
근데 이게 정말로 안쓰이는건지 확인이 필요했는데 그래도 회사에서는 모든 서버를 쿠버네티스로 관리했기때문에 시크릿 키를 전부다 읽어보면서
정말로 이 인스턴스 주소가 없는건지 확인 하고 나서야 겨우 지울수 있었다.
이 과정에서 대체 왜 이렇게 구성했는지는 모르겠지만 서로 전혀다른 프로젝트의 인스턴스가 본인 db는 안쓰고 각자 다른 db를 참고하고있는 경우도 있었다.
백엔드 서버 이외에도 ecr이나 고정ip, s3, 클라우드 프론트등 비싼건 아니지만 조금씩이라도 요금이 나가는 나머지 리소스들도 남김없이 정리했다.
위에서 말했듯 테라폼으로 관리되는게 아닌 쿠버네티스가 직접 생성한 alb나 nat같이 있는지 조차 모르는 상태로 야금야금 나가는 비용을 방지하기 위해서였다.
마지막으로 리소스를 삭제하면서 분산되어 있던 테라폼 코드도 정리가 필요했는데 그나마 관리가 되고있던 인프라는 테라폼을 통해서 직접 지웠지만 문제는 5년 전에 마지막으로 수정 된 상태로 있던것들이 있었고 테라폼 버전 조차도 워낙 오래전 내용이고 괜히 실행시켜봐야 문제가 터질걸로 보여서 그냥 리포지토리에 md로 수동으로 삭제했고 해당 프로젝트는 종료되었으니 건들이지 말라고 남겨둘수밖에 없었다.
최종적으로 고점이었던 3770달러 대비 6월달 예측 비용은 1800달러로 절반이상 줄였다(예측 비용이라 정확하진 않지만).
사실 요금이 폭등한것도 rds 때문이었고 13버전인것만 전부다 바꾼다면 다시 원래 비용인 1700~1900 사이로 줄일수 있었다.
근데 아무리 생각해도 실제 사용중인 규모에 비해서 요금이 절대 이렇게 비싸게 나올리가 없다고 생각해서 분명히 어디선가 낭비되는것들이 있고 이걸 지우면 크게 비용을 절감할수 있을거라고 생각해서 직접 정리하기로 한거였다.
꽤나 많은 인스턴스랑 리소스를 지웠다고 생각했지만 의외로 한달에 줄어든 비용은 (원래 요금 대비) 200달러 정도밖에 안됐다.
내가 목표치로 잡은 비용은 1500달러였지만 생각보다 다이나믹한 절감은 없었던게 조금 아쉬웠다.
물론 아직도 못지운게 몇개 남아있긴하다 이것까지 정리한다면 1500까지는 줄일수 있을꺼라 생각한다.
마지막으로 이번 작업을 진행할때 ai가 있어서 정말로 다행이었다고 생각한다.
원래라면 사람이 직접 kubectl 이나 aws cli 명령어로 하나하나 확인해야할껄 요즘은 ai가 직접 다 실행시켜서 파악까지 해주더라 그 덕분에 나는 조사하는데 시간을 안쓰고 판단하는데만 집중할수 있었다. 적어도 일주일은 넘게 걸릴 작업이 하루이틀만에 끝났다.