🐑

App RunnerからVPC内のDBに接続する

2022/11/12に公開

先日、今更ながらApp Runnerを使ってみたらすごく便利だった(Fargateとの比較含む)という記事を書いて、初めてApp Runnerを触ってみましたが、その中で、VPC内のDBにアクセスする部分も構築してみた&少しハマったので、記事に残します。

ポイント

公式ドキュメントに記載のある、以下がポイントです。

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.

こちらに記載のある通り、App RunnerのVPC Connectorを使う場合は、全てのアウトバウンドがVPCを通ります。したがって、インターネット通信するためには、NAT Gatewayの設定が必要となります。

https://aws.amazon.com/jp/blogs/aws/new-for-app-runner-vpc-support/

自分は、ここを理解しておらず、パブリックサブネットに配置したRDS(パブリックアクセス可能なしに設定)を用意し、App Runnerから接続しようとしていましたが、App Runnerへのデプロイ自体が完了せず、どうしたものかと悩みました。パブリックサブネットに配置した場合、IPが割り振られず、インターネットへ抜けられなかったのが原因なんですかね。(Lambdaがパブリックサブネット内のリソースにアクセスしようとするとインターネットに抜けられないのと同じ理屈だと理解していますが、間違っていたらコメントください。)

したがって、以下のような構成が必要となります。

実際の手順

VPC・サブネットやRDSの構築については触れません。上の図のApp Runner関連の箇所のみ記載します。

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

App Runner側とRDS側それぞれのセキュリティグループが必要です。

App Runner側

App RunnerのVPCコネクタに割り当てるセキュリティグループを作成します。インバウンドの設定はスルーしてアウトバウンドのみ設定します。

今回の記事では詳細触れませんが、インバウンド側を制御したい場合は、今月リリースされた下記機能を使うことで、VPC内からのアクセスのみを許可する、といった構成ができそうです。

https://aws.amazon.com/jp/about-aws/whats-new/2022/11/aws-app-runner-supports-privately-accessible-services-amazon-vpc/

RDS側

RDS側には、↑で設定したApp Runnerのセキュリティグループからの通信のみを許可するようにセキュリティグループを構築します。

VPCコネクタの作成

App Runnerの編集画面から「ネットワーキング」へ移動し、VPCコネクタを新規作成します。
配置するVPCやプライベートサブネット、↑で作成したApp Runner用のセキュリティグループを指定します。

以上で終わりです。
正しく設定できていれば、App Runnerに構築したアプリケーションからDBへの接続ができるはずです。

Discussion