TL;DR: Two different products share the "VPC Endpoint" name. Gateway Endpoints (S3, DynamoDB only) are completely free and should exist in effectively every VPC. Interface Endpoints (PrivateLink, most other services) cost $0.01/hour (~$7.20/month) plus $0.01/GB — a clear win above ~100–200 GB/month per service versus $0.09/GB internet transfer or $0.045/GB NAT processing, and a small money-loser below it. The classic failure is creating fifteen "just in case" endpoints that idle at $108/month.
The numbers
1 TB/month to one service, three ways:
| Path | Cost/month |
|---|---|
| Public internet transfer | ~$90 |
| Through NAT Gateway | ~$45 |
| Interface Endpoint | $7.20 + $10 = $17.20 |
At 50 GB/month the endpoint loses ($7.70 vs $4.50 direct). Field example: 10 TB/month of ECS↔S3 traffic at $900/month in transfer fees → $0 with a free Gateway Endpoint, in ten minutes.
Do this
-
Gateway Endpoints first, always: free, zero downside — full walkthrough here.
-
Rank your chattiest services (Cost Explorer data-transfer lines, NAT bytes, CloudWatch Logs ingestion volume). CloudWatch Logs, ECR (image pulls), SQS, and Kinesis are the usual Interface-Endpoint winners.
-
Apply the break-even rule per service: monthly GB × avoided rate vs $7.20 + GB × $0.01. Above ~100–200 GB/month, create it:
aws ec2 create-vpc-endpoint --vpc-id vpc-0abc123 \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-east-1.logs \ --subnet-ids subnet-aaa subnet-bbb \ --security-group-ids sg-0123 --private-dns-enabled -
Enable Private DNS (as above) or applications keep resolving the public hostname and route through NAT anyway — paying for the endpoint and the NAT.
-
Prune quarterly. Traffic shifts; an endpoint that cleared break-even last year may be idling now.
Gotchas
- The hourly fee is per endpoint per AZ — a "comprehensive" endpoint collection across 3 AZs multiplies fast. One team's 15-service collection cost $108/month; analysis showed 3 had meaningful traffic.
- Endpoints are region-scoped — multi-region estates need them per region; cross-region transfer still bills.
- Endpoint security groups apply — misconfigured SGs on Interface Endpoints produce mysterious connection failures.
- Compliance can trump the math: "no AWS traffic over public internet" mandates justify endpoints below break-even — and sometimes let you delete the NAT Gateway entirely (one healthcare team came out cheaper and more compliant).
Skip this if
- Volumes are tiny (< ~100 GB/month per service) and no compliance driver exists — pay the transfer fee.
- The traffic is same-region EC2→S3 style flows that already cost nothing without NAT in the path.
- The bigger leak is NAT sprawl itself — fix NAT consolidation and CloudFront for user-facing egress alongside.