この記事はプログラミング学習者が学習した内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。
前提条件
この記事はフルスタックでWebアプリケーションを制作中にふと疑問に思ったPrivateLinkとNatGatewayの利用料金を比較したものです。
以前作ったアプリ(Twitterクローン)をAWSで本番環境を実装した時にローカルで実装したDockerイメージをECRへPushしてECSコンテナを起動・更新する一連の流れ(CICD)を構築しました。
その時はPrivateSubnetに設置したECSからAWS内の他サービスにアクセスするためにPrivateLinkを採用しました。
後になってNatGatewayで接続する方法もあることを知りましたが、その時は利用料金という点でどちらが優れているかは分かりませんでした。
検証内容
先ずはPrivateLinkとNatGatewayの違いを整理していきます。
| サービス | PrivateLink | NatGateway |
|---|---|---|
| 用途 | VPC内で特定サービスへのピンポイント接続 | PrivateSubnetから外部インターネットへ接続 |
| 通信先 | 1つのエンドポイントにつき1つの特定サービス | インターネット上のあらゆる接続先 |
| 通信の方向 | 双方向のプライベート接続 | PrivateSubnetから外部のみ(戻りレスポンスは通過するが、外から新規接続は不可) |
| パブリックIP | 不使用 | 使用 |
| ルーティング構成 | ENI(ネットワークインターフェイス)として機能し、プライベートIPでアクセス | ルートテーブルにNatGatewayIDを設定してトラフィックを集約 |
| セキュリティレベル | 非常に高い(外部を通さないため) | 高い(外部からの侵入は防ぐが、インターネットを経由する) |
| 時間あたりの利用料金 | $0.014/時間(AZごと・1エンドポイントごと) | $0.062/時間(AZごと) |
| データ処理料金 | $0.010/GB | $0.062/GB |
※AZ:Availability Zone
※リージョンはap-northeast-1(東京)のみで計算
※クロスリージョンしないとする
※総データ処理量は1PBを超えないとする(PrivateLinkのデータ処理料金に影響)
※PrivateLinkにはInterfaceとGateWay(S3とDynamoDB)の2種類ありますが、後者は料金が発生しないため説明を割愛します
以下は公式ページの料金表とPrivateLinkのGateWayタイプは料金が発生しないことを記述した記事です。
NatGateWayの料金
PrivateLinkの料金
PrivateLinkのGateWayタイプは料金に関するページ
さてさて、お待ちかねの料金比較をやっていきましょう!
今回は私が以前実装したTwitterクローンの本番環境をterraformを使ってAWSで構築した内容を例に挙げたいと思います。
ちなみに実装した時はPrivateLinkを採用しています。
できれば当時の利用料金を実例として提示したかったのですが、当時は複数のサービスが稼働していたので個別の料金が分からず提示できません。申し訳ありません。
Githubのリポジトリ
endpoint.tfファイルにPrivateLinkを構築しています。
使用したエンドポイントを下記の通り列挙します。
com.amazonaws.ap-northeast-1.ecr.api
com.amazonaws.ap-northeast-1.ecr.dkr
com.amazonaws.ap-northeast-1.secretsmanager
com.amazonaws.ap-northeast-1.logs
com.amazonaws.ap-northeast-1.ssm
com.amazonaws.ap-northeast-1.ssmmessages
com.amazonaws.ap-northeast-1.email-smtp
com.amazonaws.ap-northeast-1.s3 (GateWayタイプなので料金は発生しない)
8個のPrivateLinkを設置していますが、前述の通りGatewayタイプのS3は料金が発生しないので計算からは省きます。
計算条件は下記の通りとします。
期間:1ヶ月フル稼働
データ転送量:10GBと仮定
為替レート:158円/$
インフラ構成:下記の構成図を参照のこと

NatGatewayの場合
稼働時間による利用料金 :$0.062 * 24時間 * 30日 * 2AZ = $89.28
データ処理による利用料金:$0.062 * 10GB = $0.62
※AZ:Availability Zone
合計:$89.90
換算後:14,204円
PrivateLinkの場合
稼働時間による利用料金 :\$0.014 * 24時間 * 30日 * 7個(エンドポイント) * 2AZ = $141.12
データ処理による利用料金:\$0.01 * 10GB = $0.1
※AZ:Availability Zone
合計:$141.22
日本円換算後:22,297円
( Д ) ゚ ゚
かなりの金額差が出ますね。
この差が毎日ボディブローのように利用者の財布を突いてお金をもぎ取っていくんですね
分析と条件を変えた場合の比較
仮にPrivateLinkの数が4個に減った場合は下記の金額になります。
稼働時間による利用料金 :\$0.014 * 24時間 * 30日 * 4個(エンドポイント) * 2AZ = $80.62
NatGatewayの金額を下回りますね
データ処理による利用料金ですが、今回の仮定した転送量10GBではなく、5TB(5000GB)となった場合、
NatGateway :\$0.062 * 5000GB = $310
PrivateLink:\$0.01 * 5000GB = $50
となり、圧倒的にPrivateLinkが安くなりますね
PrivateLinkはエンドポイントの数とAZの数が少ないほど、利用料金を低く抑えられますね。
NatGatewayはデータ転送量が少ない場合はあまりきにならないけど、大量のユーザーが使ってデータ転送量が高くなったら、PrivateLinkとの差が明確に出てくるようになります。
総括
時間による利用料金はAWS上のPrivateSubnetから使用するサービスの種類は多いけど、個人開発や勉強で使う場合はNatGatewayが向いていると言えます。
逆にPrivateSubnetから使用するサービスの数を減らしたり(4個以下)、AZをシングルにする場合はPrivateLinkの方が安価になりますね。
データ処理料金の点ではユーザーが付いたサービスでデータ転送量が多い場合、データ転送量によってはPrivateLinkの使用を検討に入れても良いかと思います。
S3やDynamoDBについては追加料金が発生しないので、PrivateLinkを使うことをお勧めします。
S3とDynamoDBだけPrivateLinkで残りはNatGatewayというハイブリッドなやり方も良いですね。
最後に、この比較はあくまで利用料金に焦点を当てた場合の比較検討結果です。
仮にセキュリティ面を重視するのであれば、料金は二の次で外部接続しないPrivateLinkを採用するということも十分に考えられます。
料金だけでなく、あらゆる面でメリット、デメリットを含めて十分に検討して実装内容を決めてください!
最後まで読んでいただきありがとうございます。
読まれた方のお役に少しでも立てたら嬉しいです。
参考にしたサイト
【AWS】 NAT Gateway|初学者向けにまとめてみた
【AWS】NAT-GW と VPC Endpoints のどっちを選ぶべき?