App Runnerのネットワークについて調べてみた
はじめに
こんにちは、株式会社モリサワ システム開発部門の小室です。
AWS の NAT Gateway はそこそこ料金が高いですよね。
先日、使ってないと思っていた NAT Gateway を停止したところ、App Runner で構築したアプリケーションにアクセスできなくなる事象が発生しました。
このアプリケーションでは VPC コネクターを利用していたので、NAT Gateway が必須だったのが理由でしたが、なぜアクセスできなくなるのか App Runner のネットワーク周りの仕組みを理解していなかったので、これを機会に少し調べてみました。
App Runner のネットワーク構成
AWS のブログ記事「AWS App Runner の VPC ネットワーキングに Dive Deep する」に全て書いてありました。
「AWSブログ」より引用
こちらの図を引用して、App Runner のネットワーク構成について調べてみたいと思います。
App Runner が起動されるネットワーク
App Runner のサービスリリース時には、ユーザーが作成した VPC での起動はサポートされていませんでした。
ではどのようなネットワークで起動されるかと言うと、図の赤枠の部分に当たります。
「AWSブログ」より引用
ここでは以下の2つのVPCが作られております。
- ①
App Runner VPC
- ②
Fargate VPC
それぞれ何を担当しているか確認してみましょう。
① App Runner VPC
インターネットと接続するための VPC が作られています。
NLB(Network Load Balancer) が作成され、その配下で ENI(Elastic Network Interface) が作成されています。
外部とは NLB を介して通信を行い、内部とは ENI を介して通信を行うことがわかります。
いわゆるパブリックサブネットが作られています。
② Fargate VPC
アプリケーションを起動するためのコンテナを動かすサービスになる Fargate が利用する VPC です。
ここでコンテナが起動されるのですが、外部との接続は ENI を通して行うことがわかります。
いわゆるプライベートサブネットが作られています。
App Runner が起動されるネットワークのまとめ
App Runner のネットワークはこのような仕組みとなっており、AWS が自動で作成する VPC で起動されることがわかりました。
セキュアな VPC を AWS がマネージドで作ることにより、コンテナサービスを簡単に利用できる仕組みになっています。
ユーザーの VPC と接続する仕組み
App Runner は手軽で便利なのですが、やはり VPC 内のデータベースと接続したいという要望がありました。
この図では右側の Customer VPC
に当たります。
「AWSブログ」より引用
VPCコネクター
ここで App Runner はユーザーの VPC と接続する仕組みとなる「VPCコネクター」という機能が追加されました。
Hyperplane ENI
という機能を使って VPC 間の接続を実現してます。
「AWSブログ」より引用
この Hyperplane ENI
はユーザーが触れるサービスではなく AWS の基盤となる Nitro システムに組み込まれているようです。
詳細については、引用元の公式ブログや Lambda Hyperplane ENI などで解説されております。
NAT Gateway を停止した結果
ここまでで App Runner をユーザーの VPC で利用するためのネットワークを解説してきました。
では、なぜ NAT Gateway を停止したらサービスが止まってしまったかというと...
「AWSブログ」より引用
VPNコネクターで接続した場合、OUTBOUND としては NAT Gateway を介してインターネットに接続するため、NAT Gateway を停止するとインターネットに接続できなくなるという仕様でした。
こちらについては、公式ブログにも、カスタマー VPC のルーティングテーブルに従うためと理由が記載されております。
お客様 VPC に入ると、トラフィックは お客様 VPC のルーティングテーブルに従って宛先のエンドポイントに転送されます (図 3 の緑の太字の矢印)。インターネット向けのトラフィックがある場合、VPC の NAT ゲートウェイとインターネットゲートウェイを経由して適切なパスを有効にする必要があることに注意してください。
まとめ
App Runner のネットワークについて調べてみました。
App Runner の当初の仕組みから変更せずに VPC 内で起動するために VPCコネクターというサービスができたことと、その場合は NAT Gateway が必要なことがわかりました。
最後に、今ホットな Bedrock を使って要約してもらった結果も載せておきます。
- App Runner はフルマネージドなサーバーレスWebアプリケーションサービス
- これまでApp Runnerアプリケーションはパブリックエンドポイントにのみ接続できたが、新機能でVPC内のプライベートリソースにも接続可能になった
- パブリックネットワーキングモードではApp Runner VPC内で全てのトラフィックがハンドリングされる
- VPCネットワーキングモードでは、Hyperplane ENIを使ってApp Runner VPCとお客様VPCを接続する
- Hyperplane ENIはマネージドで共有されるため、IPアドレス消費量の削減や高速なブートストラップが可能
- Hyperplaneの活用で、App RunnerアプリケーションがVPC内のプライベートリソースに接続できるようになった
Discussion