💰

【AWSコスト最適化】VPC エンドポイントを消すだけでセキュリティそのままにコストが節約できた

2024/05/14に公開

はじめに

こんにちは、シンプルフォームでインフラエンジニアをやっている入江 純 (@jirtosterone) です。

シンプルフォームでは以前からインフラコストの削減に取り組んでいます。以下は、実際に効果を発揮している施策の一例です。

本記事では、その削減施策の一つである VPC エンドポイントの削除についてご紹介します。なお、本記事でいう VPC エンドポイントは課金対象となる「インターフェースエンドポイント」を対象としています。無料で使える「ゲートウェイエンドポイント (S3, DynamoDB アクセス用)」は対象としていません。

対象読者

  • AWS ネットワークの基礎を理解されている方
  • AWS のコストを少しでも減らしたいと考えている方
  • とりあえず VPC エンドポイント (PrivateLink) 作っておけば OK と思われている方

特に最後の方!とりあえず作ってる、という方は意外と多いのではないかと思います。自分もそうでした(笑)
この記事で実は不要なんじゃないか?と考えるきっかけになれば幸いです。

結論

時間が無い方のために結論から。

  • VPC エンドポイントは作らずに NAT ゲートウェイ (NGW)インターネットゲートウェイ (IGW) を作る。

  • つまり、AWS のサービスは IGW を経由させる。

  • IGW 経由なのでインターネットに出そうだが、AWS のプライベートネットワークで折り返すため実質閉域通信が実現できる

  • 約 100 個もの VPC エンドポイントを削除することで、月間約 $1,000 の削減に成功した。

背景

シンプルフォームではマルチアカウントアーキテクチャを採用しています。また、可用性向上のためマルチ AZ 構成としています。

VPC エンドポイントは AZ・サービス毎に必要なため、VPC・AZ・通信先のサービスが多いとかなりの数になってしまいます。シンプルフォームでも数えてみると、図らずも実に 120 を超える VPC ポイントがデプロイされていました。

VPC エンドポイントの時間料金は USD 0.014 (2024.5.11 時点の東京リージョンの料金) なので、1 ヶ月を 730 時間とすると、USD 1,200 ($1=155 円の場合 約 19 万円!) を超えるほどの金額になります。

Before

アーキテクチャ

コンピュート群はセキュリティを考慮して基本的に Private subnet に置いており、通信が必要な AWS サービスごとに VPC エンドポイントを作っていました。

architecture_before

コスト

VPC エンドポイントと NGW の料金を合わせると、約 USD 3,000 掛かっていました。

cost_before

After

アーキテクチャ

単純に VPC エンドポイントを軒並み削除しました!削除はしましたが、ネットワーク観点でのセキュリティは変わっていません。AWS サービスへの通信は IGW を通るものの外には出ません。

architecture_after

AWS サービスへの通信については、AWS 公式の FAQ にもはっきりと書かれています。

2 つのインスタンスがパブリック IP アドレスを使用して通信する場合、またはインスタンスがパブリックな AWS のサービスエンドポイントと通信する場合、トラフィックはインターネットを経由しますか?

いいえ。パブリック IP アドレスを使用する場合、AWS でホストされているインスタンスとサービス間のすべての通信は AWS のプライベートネットワークを使用します。AWS ネットワークから発信され、AWS ネットワーク上の送信先を持つパケットは、AWS 中国リージョンとの間のトラフィックを除いて、AWS グローバルネットワークにとどまります。

https://aws.amazon.com/jp/vpc/faqs/

アーキテクチャは上記の通り IGW を使うため、特別な要件や制限により IGW が作れない場合は本記事の施策は採用できませんのでご容赦ください。逆に、既に NGW・IGW を使っていて VPC エンドポイントも使っているという場合は削減が期待できます。

コスト

VPC エンドポイントをほとんど削除することで、USD 2,000 以下まで抑えることができました!他の施策も同時に実施されていたり、通信量によって変動するため少々分かりにくいですが、2024 年 2 月の途中で本施策を適用しています。

一部のアカウントでは IGW を作れないように SCP を設定しているため、完全に VPC エンドポイントを無くせてはいませんが、これだけでも大きい効果だと感じています。

cost_before

とはいえデータ通信量によるんじゃないの?

と、いう疑問が出てきそうですよね。これはその通りです。つまり、データ通信量に応じて損益分岐点が存在します。

2024.5.11 時点のアジアパシフィック (東京) リージョンでの料金を元に確認してみます。

  • VPC エンドポイント
    • 時間料金: USD 0.014 / 時間
    • 処理データ料金 (最初の 1PB): USD 0.01 / GB
  • NGW
    • 時間料金: USD 0.062 / 時間
    • 処理データ料金: USD 0.062 / GB

NGW ありきで VPC エンドポイントを作るべきかの判断を目的として、VPC エンドポイント (時間料金 + 処理データ料金) vs NGW (処理データ料金) とで比較します (NGW が元々ないのであれば NGW を作らないのが最もコスト安なので、NGW は必須という前提で考えます)。

下図を見ると、約 200GB が損益分岐点になりそうです。時間料金は 1 ヶ月を 730 時間として計算しています。

comparison

さいごに

AWS サービスとの通信で 200GB を超えるパターンはそう無いと思うので、NGW 利用されるほとんどの方は VPC エンドポイントを削除してしまって良いのではないでしょうか。少なくとも「とりあえず使ってる!」という方の見直しのきっかけになれば幸いです。

SimpleForm Tech Blog

Discussion