ちょっと話題の記事

[アップデート] AWS App RunnerからVPCリソースへのアクセスが可能になりました!

2022.02.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本日のアップデートでAWS App RunnerがVPCリソースにアクセス可能となるアップデートがありましたのでご紹介します。

先に3行まとめ

  • これまでApp RunnerはユーザマネージドなVPCにアクセスすることが出来なかった
  • App RunnerとユーザのVPCを接続するためのVPCコネクタが構成可能になった
  • VPCコネクタはApp Runnerからのアウトバウンドトラフィック用であり、インバウンドトラフィックには利用できない(インバウンドトラフィックは従来どおりパブリックドメイン名からの経路)

AWS App Runnerとは

App RunnerはユーザがVPCなどのネットワークを管理することなくWebアプリケーションを簡単にデプロイすることができるサービスです。

VPCを管理しなくて良いという利点の裏返しではありますが、RDSなどのVPCリソースに対してアクセスする経路が無い、という課題もありました。仮にRDSにアクセスするのであれば、パブリックアクセスが前提になるなど、ちょっとハードルが高いという印象でした。

おそらくこのようなユーザからのフィードバックは多くあり、今回、App RunnerからVPCへの経路を提供する機能がリリースされたのだと思います。

やったね!

2022.2.9 追記
「VPCコネクタ利用上の注意」を追記しました

VPCコネクタ利用上の注意

When connected to a VPC, all outbound traffic from your AppRunner service will be routed based on the VPC routing rules. Services will not have access to the public internet (including AWS APIs) unless allowed by a route to a NAT Gateway. You can also set up VPC endpoints to connect to AWS APIs such as Amazon Simple Storage Service (Amazon S3) and Amazon DynamoDB to avoid NAT traffic.
(公式ブログ:New for App Runner – VPC Supportより引用)

記載のとおりVPCコネクタを構成している環境においてはすべてのアウトバウンドトラフィックがVPCを経由します。そのためインターネットに抜けるためにはNATゲートウェイなどの構成が必要となります。

また、S3やDynamoDBへのアクセスにはVPCエンドポイント利用することでNATゲートウェイのデータ転送料金を回避することが出来ます。

やってみる

今回は東京リージョンのApp Runnerで検証しています。使用するコンテナイメージ等は既に準備しているものとして割愛します。実行している内容は以下のとおり、ユーザマネージドなVPCに起動しているEC2(192.168.2.11)に対してpingするだけの簡単なものです。

ping -c 3 192.168.2.11

セキュリティグループの作成

App RunnerのVPCコネクタに割り当てるためのセキュリティグループは以下のとおりです。インバウンドルールは設定しておらず、アウトバウンドのみ許可しています。

また対向となるEC2側には上記セキュリティグループからのインバウンドのみを許可しています。

ネットワーキング設定

App Runnerの管理コンソールから[サービスの作成]を進めていくと、ステップ2[サービスを設定]の項目に[ネットワーキング]がありますのでこれを展開します。

すると以下のようにカスタムVPCという項目が見つかりますので選択し新規追加します。

VPCコネクタの接続先となるVPCおよびサブネット、セキュリティグループ等を設定します。今回はプライベートサブネットを選択しています。

あとはこのまま進めてApp Runnerのサービス作成とデプロイを完了します。

ログの確認

CloudWatch Logsでログを確認すると以下のとおりPingが正常に通っていることが確認できました。

02-09-2022 08:40:09 AM round-trip min/avg/max = 0.567/0.734/0.995 ms
02-09-2022 08:40:09 AM 3 packets transmitted, 3 packets received, 0% packet loss
02-09-2022 08:40:09 AM --- 192.168.2.11 ping statistics ---
02-09-2022 08:40:09 AM 64 bytes from 192.168.2.11: seq=2 ttl=63 time=0.641 ms
02-09-2022 08:40:08 AM 64 bytes from 192.168.2.11: seq=1 ttl=63 time=0.567 ms
02-09-2022 08:40:07 AM 64 bytes from 192.168.2.11: seq=0 ttl=63 time=0.995 ms

簡単ではありますが検証は以上です!

まとめ

  • 従来、App RunnerからVPCリソースへのアクセス経路はなかった。そのため極力パブリックアクセスさせたくないようなRDSのWebフロントとしては使いにくかった
  • 今回のユーザーマネージドなVPCを接続するためのVPCコネクタ機能が追加された
  • VPCコネクタはApp Runnerからのアウトバウンドトラフィック用として機能する
    • インターネット向けのトラフィックも含めてすべてVPC経由になる
  • インバウンドトラフィックには利用できないので、インバウンドトラフィックは従来どおりパブリックドメイン名からの経路のみとなる

参考