こんにちは佐々木です。以前、『AWSのグローバルIPの空間はインターネットなのか?』と題して、AWSのパブリックIP同士の通信が何故AWSのプライベートネットワークの通信になるのかという話をしました。その中で、PrivateLinkの必要性はどう考えるべきなのかという事に、少しだけ言及しました。今回は、そこをもう少しだけ深ぼって見てみましょう。ユースケースとしても多いであろう、EC2からS3の通信の例でみてみます。
EC2からS3へアクセスする4つのルート
EC2からS3へアクセスするルートとしては次の4つがあります
- Internet Gateway
- NAT Gateway
- VPC Endpoint(Gatewayタイプ)
- PrivateLink(Interfaceタイプ)
それぞれの構成と利用に関わる費用をみてみましょう。なお、今回ご紹介するコストは、S3への通信に関わるコストです。S3へのデータの保存やAPIアクセスに関わるコストは別途必要なのでご注意ください
Internet Gateway
まず最初にInternet Gateway経由の経路です。これが一番基本的なルートとなるでしょう。EC2から同一リージョンのS3への通信料については、無料となります。
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)を付与するため、これ経由でインターネットに通信ができます。
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と呼ばれます。
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を一つ消費します。
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タイプ)を利用するのが良いのが解ります。設計の際の参考にしてください
クラウド設計の最適化はNRIネットコムにお任せください。
AWSのベスト・プラクティスを集めたAWS Well-Architected フレームワークをもとに診断し、課題の洗い出しとともに優先順位をつけてどのように改善していくかのご提案をします。