同一リージョンでAmazon S3またはDynamoDBにトラフィックを送信する際のベストプラクティスについて

2020.02.03

しばたです。
先日弊社深澤によりえ、そんなに!?意外と知らないAWSでお金がかかるポイント5選!!第二弾という記事が公開されました。

え、そんなに!?意外と知らないAWSでお金がかかるポイント5選!!第二弾

この記事で紹介されている様にNAT Gatewayは非常に便利であるものの地味に費用のかかるサービスでもあり、NAT Gatewayが登場する以前からNAT Instanceを利用されていた方にとっては特に割高に感じてしまうのでは無いかと思います。

本記事ではNAT Gatewayの利用費を抑えるためのTipsを紹介します。

同一リージョンで Amazon S3 または DynamoDB にトラフィックを送信する際のベストプラクティス

こちらはNAT Gatewayのユーザーガイドに記載されている通りなのですが、S3やDynamoDBの通信量が多い環境ではVPC Endpoint(Gateway型)を使うことでNAT Gatewayの通信費を抑えることが可能です。

同一リージョンにある Amazon S3 および DynamoDB にアクセスする際に NAT ゲートウェイのデータ処理料金が発生するのを防ぐには、ゲートウェイエンドポイントを設定し、NAT ゲートウェイではなくゲートウェイエンドポイントを介してトラフィックをルーティングします。
ゲートウェイエンドポイントの使用には料金がかかりません。詳細については、「ゲートウェイ VPC エンドポイント」を参照してください。

どういうことか?

このベストプラクティスはGateway型のVPC Endpoint(S3とDynamoDBが対象)の利用費が無料な点を利用しています。
例として下図の様にPrivateなサブネット上にあるEC2インスタンスからS3にアクセスする場合を考えてみます。

通常S3やDynamoDBへのアクセスするにはインターネット接続を必要としますので、この場合はEC2インスタンスからNAT Gatewayを経由してインターネットへ抜けS3へアクセスすることになります。

NAT Gatewayを経由するためここで通信料がかかってしまいます。
NAT Gatewayの費用は通信の種類(送信・受信)に関わらずNAT Gatewayが処理したデータ量に適用され、本日(2020年2月3日)時点の東京リージョンでは 0.062USD/GB かかります。

ここでGateway型のVPC Endpointを導入し、S3への通信をNAT Gatewayを経由させない様にすることで上記の通信費を抑えることができます。

注意事項

説明してしまえばたいしたことないTipsですがいくつか注意事項もあります。

1. 他リージョンのS3、DynamoDBには適用できない

VPC Endpointは同一リージョン内にあるS3、DynamoDBへのアクセス経路を変えるサービスです。
このため他リージョンにあるS3やDynamoDBには適用できず、この場合はNAT Gatewayを経由したインターネットアクセスを必要とします。

2. インターフェイス型(PrivateLink)のVPC Endpointは(ほとんどのケースで)使えない

S3、DynamoDB以外のサービス向けのVPC EndpointはPrivateLinkを使用するもので有料です。
本日(2020年2月3日)時点の東京リージョンで以下の金額となっています。

各AZのVPCエンドポイント1つあたりの料金 処理データ 1 GB あたりの料金
0.014USD 0.01USD

加えてサービスによっては複数のエンドポイントを必要とするものもあります。
インターフェイス型のVPC Endpointの通信費はNAT Gatewayよりは安価であるので、必要とするエンドポイント数が少なく、かつ、常に大量のデータ通信がある場合であればインターフェイス型のVPC Endpointを導入することでNAT Gatewayを経由するより安価に済むケースもあるのですが、ほとんどの場合はVPC Endpointの導入費をペイしないでしょう。

例としてそれなりにデータ通信が発生しそうで必要なエンドポイントの数もすくないTransfer for SFTPの場合を考えてみます。
Transfer for SFTPに必要なVPC Endpointは

  • com.amazonaws.[リージョン名].transfer.server

の一つだけです。
NAT GatewayとVPC Endpointの利用費は時間ごとの利用費と通信量に応じた費用の2種類あるため、比較を単純化するために利用時間を1ヶ月(30日=720時間)に固定し、データ通信量ごとの利用費を計算してみした。
結果は下表の通りとなり、毎月約200GBを超える通信があるのであればVPC Endpointを導入することでNAT Gatewayの利用費を抑えることが可能です。

ただ、現実的にはNAT GatewayもVPC EndpointもマルチAZ構成で多重化すると思います。
この場合は毎月約390GBを超える通信がないとVPC Endpointの導入費をペイできません。

最後に

以上となります。
常に使えるTipsではありませんが、

  • NAT Gatewayの通信費がそれなりに掛かっている
  • 同一リージョンのS3、DynamoDBへの通信が多い

といった場合に比較的容易に適用できますので知っておいて損はないでしょう。