ECS/Fargateを使用していると、ECRからのDockerイメージPullでNAT ゲートウェイのデータ処理料金が肥大化することがあります。
(特にスケジュールタスクを使っていると)
[AWS][Fargate]ECS Scheduled TasksによるNAT Gatewayの通信費肥大化について
VPCエンドポイントを使用することで、データ処理料金を抑えることができます。
しかし、VPCエンドポイントは起動時間課金が発生します。
そのため、環境によってはNAT ゲートウェイのみのほうが安いことがあります。
AWS NAT Gatewayの費用を抑えようと思ったら高くなった話
どの程度の通信量であれば、VPCエンドポイントにしたほうが安くなるか気になったため計算してみました。
結論から書くと、NATゲートウェイを併用する環境であれば、約800GB/月からVPCエンドポイントを使ったほうが安くなります。
料金について
料金については、東京リージョンで2022/3月時点になります。
NAT ゲートウェイ VPCエンドポイントそれぞれAZごとに必要になるため、計算は1AZで行います。
NAT ゲートウェイ
- 時間単位料金(USD/時): 0.062
- データ処理料金(USD/GB): 0.062
- 固定費(AZ/月): 44.64USD
- 0.062(時間単位料金) × 30(日) × 24(時間)
VPCエンドポイント
- インターフェースエンドポイント
- 時間単位料金(USD/時): 0.014
- データ処理料金(USD/GB): 0.01※
- 必要なエンドポイントの数: 3
- ゲートウェイロードバランサーエンドポイント
- 時間単位料金(USD/時): 0.014
- データ処理料金(USD/GB): 0.0035
- 必要なエンドポイントの数: 1
※最初の1PBの料金
AWS PrivateLink の料金
FargateがECRからコンテナPullするには、最低インターフェースエンドポイント2つとゲートウェイエンドポイントが1つ必要です。
プラットフォームバージョン 1.4.0 以降を使用する Fargate でホストされる Amazon ECS タスクの場合、この機能を活用するには、com.amazonaws.region.ecr.dkr と com.amazonaws.region.ecr.api の両方の Amazon ECR VPC エンドポイントに加えて、Amazon S3 ゲートウェイエンドポイントが必要です。
Amazon ECR インターフェイス VPC エンドポイント (AWS PrivateLink)
また、CloudwatchLogsにログを出力するためにCloudwatchLogsのエンドポイントも必要です。
合計インターフェースエンドポイントは3つ必要になります。
月あたりの固定費は以下になります。
- 固定費(AZ/月): 40.32USD
- 0.014(時間単位料金) × 4(VPCエンドポイントの数) × 30(日) × 24(時間)
通信量何GBからVPCエンドポイントのほうが安くなるのか
NATゲートウェイを併用する環境であれば、約800GB/月からVPCエンドポイントを使ったほうが安くなります。
800GB/月は、例えば500MBのDockerイメージを1日に75回程度(営業日20日)デプロイする環境であれば超えます。
スケジュールタスクであれば、20分に1回 500MBのDockerイメージを実行環境です。
NATゲートウェイをECSのPullにしか使わないような環境であれば、VPCエンドポイントのみのほうが安いです。
※S3ゲートウェイエンドポイントの通信が何割程度か判断が難しかったため、VPCエンドポイントのデータ処理料金はインターフェース型で計算しています。
まとめ
損益分岐点について、計算してみました。
デプロイ頻度が少なかったり、スケジュールタスクをあまり使っていない環境では、VPCエンドポイントの方が高くなることがあります。
上記のような環境でも、ECSのスロットリング時に通信量が増えることがあるため、転ばぬ先の杖としてVPCエンドポイントを設定するのは良いと思います。