기존의 Private Subnet에서 동작하는 EC2와 Lambda 리소스들은 프로세싱을 작업을 위해서 S3에서 객체를 다운로드하고, 후처리 작업을 한다. 나는 이때 Compute Resource인 EC2와 Lambda에는 Data Transfer(이하 DT) 비용이 발생하지 않는 것으로 알고 있었다. 

하지만 내 생각은 틀렸고 개선할 부분을 찾을 수 있었다.

 

 

우선 기존 아키텍처는 아래와 같다.

 

요청의 흐름은 다음과 같다.

 

1. Compute Resource -> Nat Gateway

2. Nat Gateway -> Internet gateway

3. Internet Gateway -> Internet

4. Internet -> S3

5. 역순

 

이때 나는 S3는 같은 리전의 서비스가 접근할 때는 DT가 발생하지 않는 다는 것을 알고 있었다. 아래는 공식 문서다. 

 

그러면 4 번과 그 역순에 해당하는 것은 DT가 발생하지 않는다. 결국은 ap-northeast-2 내의 Compute Resource로 데이터 트래픽이 가기 때문이다.

 

그러면 남은 후보는 Nat Gateway의 DT 비용이다. 

 

 

Nat Gateway DT는 처리된 데이터의 GB 당 요금이 발생하고 있다.

 

따라서 Compute Resource -> Nat Gateway와 역순인 Nat Gateway -> Compute Resource 과정에서 DT 비용이 발생한 것이다. 해당 비용을 줄이는 방법은 간단한데, 이전 포스팅에서 봤었던 VPC Endpoint S3 Gateway 유형을 사용하면 된다.

 

 

VPC Endpoint S3 Gateway는 Routing Table을 기준으로 동작하기에 Private Link와 다르게 무료이다. Compute Resource에서 S3나 DynamoDB를 사용한다면, Endpoint Gateway 유형은 비용 절검하는 데 있어서 좋은 방안으로 생각된다.

 

S3의 가격 정책만 보고 비용 예측에 실패했었다. 물론 개발 환경에서 발견했기에 상용에 배포되기 전에 수정할 수 있었다. 가격 정책을 통해서 비용을 예측할 때는 모든 리소스를 기준으로 살펴봐야겠다.