EC2からS3へアクセスする4つのルートとコスト

 こんにちは佐々木です。以前、『AWSのグローバルIPの空間はインターネットなのか?』と題して、AWSのパブリックIP同士の通信が何故AWSのプライベートネットワークの通信になるのかという話をしました。その中で、PrivateLinkの必要性はどう考えるべきなのかという事に、少しだけ言及しました。今回は、そこをもう少しだけ深ぼって見てみましょう。ユースケースとしても多いであろう、EC2からS3の通信の例でみてみます。

tech.nri-net.com

EC2からS3へアクセスする4つのルート

EC2からS3へアクセスするルートとしては次の4つがあります

  • Internet Gateway
  • NAT Gateway
  • VPC Endpoint(Gatewayタイプ)
  • PrivateLink(Interfaceタイプ)

それぞれの構成と利用に関わる費用をみてみましょう。なお、今回ご紹介するコストは、S3への通信に関わるコストです。S3へのデータの保存やAPIアクセスに関わるコストは別途必要なのでご注意ください

Internet Gateway

 まず最初にInternet Gateway経由の経路です。これが一番基本的なルートとなるでしょう。EC2から同一リージョンのS3への通信料については、無料となります。

f:id:takurosasaki:20210924005905p:plain

 Internet Gatewayを利用するためには、次の2つの条件が必要です。

  • パブリックサブネットに属していること
  • インスタンスにパブリックIPが付与されていること

AWSにおけるパブリックサブネットとは、ルートテーブルで0.0.0.0/0 (デフォルトゲートウェイへの通信)がInternet Gatewayに向いているサブネットを指します。その上で、インスタンスにパブリックIPが付与されているとインターネットに対しての通信が利用可能です。S3への通信もインターネット扱いになるので、この条件が必要になります。

NAT Gateway

 それでは、パブリックサブネットに属していない or パブリックIPを付与されていないEC2インスタンスはどうしたら良いのでしょうか?そういう時の方法の1つとしては、NAT Gatewayを利用するのが一般的です。NAT Gatewayはパブリックサブネットに配置されたプロキシのようなものです。このNAT GatewayにパブリックIP(Elastic IP)を付与するため、これ経由でインターネットに通信ができます。

f:id:takurosasaki:20210924010236p:plain

 NAT Gatewayを利用した場合の注意点としては、それなりの費用が発生することです。NAT Gateway起動に関わる料金と、そこを経由する通信料です。

VPC Endpoint(Gatewayタイプ)

 プライベートサブネットからのS3の通信方法としては、VPC Endpointを利用する方法もあります。VPC Endpointとは、Internet Gatewayを経由せずにS3などのAWSリソースにアクセスするための経路です。VPC Endpointを利用することで、VPCにそもそもInternet Gatewayをアタッチしないという構成もできます。VPC Endpointは、GatewayタイプとInterfaceタイプがあります。Gatewayタイプは、S3とDynamoDBのみ利用可能です。Interfaceタイプは多数のサービスが対応しており、Private Linkと呼ばれます。

f:id:takurosasaki:20210924010255p:plain

 VPC EndpointのGatewayタイプのメリットとしては、エンドポイントの利用料も、そこを経由する通信料も無料ということです。S3やDynamoDBを利用する場合は、まずこれから検討してみるとよいでしょう。一方でちょっと特殊な作りをしていて、エンドポイントはグローバルIP扱いになっています。そのため、Network ACLで通信許可をプライベートIPの範囲内のみと指定していると、例えVPC Endpointを利用していてもS3に通信できないのでご注意ください。

PrivateLink(Interfaceタイプ)

 もう一つのVPC EndpointとしてInterfaceタイプであるPrivateLinkがあります。Interfaceタイプというのは、VPCのサブネット内にエンドポイントのインターフェイスとしてElastic Network Interface(ENI)がニョキっと生えてくる仕組みとなっています。そのため、サブネット内のプライベートIPを一つ消費します。

f:id:takurosasaki:20210924014334p:plain

 ENI経由なので、Gatewayタイプと違って完全にプライベートIPの通信でS3にアクセスできます。InterfaceタイプでのS3の利用は長らく対応していなかったのですが、2021年の2月にようやく利用可能となりました。  アーキテクチャを考える上でとっても有用なのですが、費用がそれなりに掛かるのが難点です。時間あたりのエンドポイントの利用料と、それを経由する通信料がかかります。何も考えずに全部PrivateLinkにしていると思わぬコストが発生することになります。

S3へ通信するためのコストのまとめ

 EC2からS3へ通信する際の4つの経路を表にまとめると次のようになります。

通信経路 コスト
Internet Gateway 同一リージョン内無料
Nat Gateway ・Nat Gateway利用料:0.062USD/時間
・Nat Gatewayデータ転送料金:0.062USD/GB
VPC Endpoint(Gatewayタイプ) 無料
※同一リージョンのみ利用可能
PrivateLink(Interfaceタイプ) ・エンドポイント利用料金:0.014USD/時間
・データ転送料金:0.0035USD/GB
※インターリージョン VPC ピアリング利用で
他リージョンも利用可能

 原則的にNAT Gateway経由でS3への通信はやめましょう。特に制約がないのであれば、パブリックサブネットにある場合はIntenet Gateway経由、プライベートサブネットにある場合はVPC Endpoint(Gatewayタイプ)を利用するのが良いのが解ります。設計の際の参考にしてください

f:id:takurosasaki:20210326005216p:plain

執筆者佐々木拓郎

Japan APN Ambassador 2019
ワイン飲みながら技術書を書くのが趣味なおじさんです

Twitter:https://twitter.com/dkfj

Facebook:https://www.facebook.com/takuro.sasaki

個人ブログ:https://blog.takuros.net/

Amazon著者ページ:Amazon.co.jp: 佐々木 拓郎:作品一覧、著者略歴

Booth:https://takuros.booth.pm/