AWS Cost & Usage Report 로 치킨값 아끼기

손준호·2024년 6월 16일
1

AWS

목록 보기
2/2
post-thumbnail

1. 들어가며


본 글은 프로젝트를 진행하다 마주친 문제를 분석하는 글입니다.

틀린 점이 있으면 지적해주시면 감사하겠습니다.

2. 현재 상황


저희 팀은 BE 2명, FE 1명으로 구성된 지도 API를 사용한 웹 어플리케이션을 만들고 있습니다.

저희는 백엔드 WAS를 AWS EC2에 올려 사용하고 있고, 프리티어의 리소스를 최대한 활용해 비용을 절감하고자 했습니다.

프리티어에서 Elstaic IP 를 지원하지 않으므로, 팀에서는 Elstaic IP를 사용하지 않기로 했습니다.

따라서 저희 EC2는 인스턴스를 재시작 할 때마다 퍼블릭 IP 가 바뀌므로, 정기 회의 시 마다 EC2의 바뀐 퍼블릭 IP 를 팀 채널에 공유하기로 했습니다. 아래 사진은 회의에서 정한 저희의 팀 규칙입니다.

3. 해결 방법


저는 EC2의 바뀐 IP를 사람이 직접 공지해주는것은 불필요한 작업이라 생각하여, AWS SNS와 Lambda, CloudWatch 를 사용해 EC2 인스턴스의 변화를 감지해 팀 슬랙 채널에 바뀐 IP를 메시지로 보내주는 기능을 구현하고자 했습니다.

또한 Slack 에서 채팅으로 EC2 인스턴스를 start/stop 할 수 있기를 원했습니다.

따라서 유튜브를 참고하여 SNS 를 사용해 slack 채팅으로 인스턴스를 start/stop 하도록 했습니다.

출처 : AWS 강의실 Youtube

위와 같이 slack 에서 채팅을 보내 EC2 인스턴스를 start/stop 할 수 있고, CloudWatch 를 사용해 EC2 의 상태 변화를 감지해 원하는 정보를 slack app으로 전송하도록 했습니다.

4. 문제


그런데 갑자기 약 25,000 원 상당의 비용이 부과되었습니다.

프리티어 자원만을 사용하던 저희 팀에서는 예상하지 못한 비용이라, 이에 대한 분석이 필요했습니다.

5. 분석

Cost Exploler 를 보니 Data Transfer 하는데 상파울리 리전에서 12.18 달러가 청구되었습니다.

이번달 총 비용이 약 15달러인데, Route 53 에서 도메인 등록한 비용 3달러와 2024년 2월부터 변경된 AWS Public IPv4 주소 요금 변경 및 Public IP Insights 기능 출시, VPC 비용을 제외하면 거의 모든 비용이 Data Transfer 때문에 청구되었다고 할 수 있습니다.

다만 Cost Exploer 에서는 위처럼 “Data Transfer 하는데 12 달러가 청구되었다” 라는 정보밖에 없으므로, 더 구체적인 이유를 알아보고자  AWS Cost and Usage Report 를 받아보았습니다.

더 자세한 비용 분석을 제공하는 Cost and Usage Report 를 확인하니 상파울루 리전과 서울 리전에서 런던, 도쿄, 파리, 버지니아 등 다른 리전으로 데이터를 전송한 기록이 있었습니다.

또한 제가 CloudWatch 에서 EC2의 상태변화를 감지할 때 어떤 데이터를 감시할 것인지 선택할 때, “모든 데이터” 를 선택했기 때문에, 제가 필요했던 퍼블릭 IP 에 대한 정보말고도 여러 정보를 전송했기 때문에 위와 같이 많은 비용이 청구된것으로 예상됩니다.

또한 CUR data의 operation(작업) 탭에 따르면 아래와 같이 PublicIP-Out 작업을 수애하고 있습니다.

즉, 퍼블릭 IP를 사용하여 외부 인터넷을 타고 다른 리전으로 데이터를 전송하고 있었습니다.

6. 마치며


위 같이 돈 날린 이야기를 동료 개발자에게 말했는데, 그냥 리눅스의 스케줄러에서 자기 ip주소를 획득해서 slack 으로 메시지 전송하면 안되냐고 하더군요.
그래서 그냥 인스턴스가 켜질 때 ifconfig.me 로 ip 주소를 획득해서 슬랙으로 curl 날리는 방법으로 해결했습니다.(😭😂)

그래도 이번 문제 해결과정을 통해 아래와 같은 부분을 배웠습니다.

  1. AWS 리소스 간 데이터 전송에는 비용이 부과되지 않는다.
  2. 리전간 데이터 전송에는 비용이 든다. 퍼블릭 IP를 사용해 외부 인터넷을 타고 통신하는 경우에는 비용이 더 많이 든다.
  3. AWS CUR Data로 보다 더 자세한 비용 분석을 할 수 있다. CUR Data를 아래와 같은 타 AWS 서비스로 더 자세히 분석할 수 있다.
    1. Athena: SQL을 사용하여 S3에 저장된 CUR 데이터를 쿼리하고 분석.
    2. Redshift: 대규모 데이터 분석을 위해 CUR 데이터를 Redshift로 로드하여 복잡한 쿼리를 실행.
    3. QuickSight: CUR 데이터를 시각화하여 비용 트렌드와 패턴을 파악.

따라서 다음부터 AWS 리소스 간 데이터를 공유하는 아키텍처를 구성할때는 외부 인터넷을 통해 통신하지 않도록 하는게 비용 절감에 중요할 듯 합니다.

읽어주셔서 감사합니다.

지적해주실 부분 있으면 댓글 부탁드립니다.

profile
디지털 노마드가 되고싶은 개발자

2개의 댓글

comment-user-thumbnail
2024년 6월 19일

linux crontab 이나 쉘 스크립트도 첨부해주시면 이해하는데에 좋을 것 같아요 👍

1개의 답글