【Google Cloud】APIGatewayでCloudRunに接続した際に404エラーが発生する場合の対処方法

APIGateway

発生した事象

Google CloudのAPIGatewayを使用してCloud Runにリクエストを送信したところ、以下のような404エラーが発生しました。

Error: Page not found The requested URL was not found on this server.

Cloud Runはすでに作成済みで、以下の公式ドキュメントを参考にAPIGatewayを作成しました。

API Gateway と Cloud Run のスタートガイド  |  API Gateway のドキュメント  |  Google Cloud

解決策

Cloud Runのネットワークの「上り(内向き)の制御」が「内部」になっていたことが原因でした。「上り(内向き)の制御」を「すべて」にすることで解決しました。

原因について深堀してみる

以下のサイトを参考に、原因について深堀してみます。

GCP - access from API Gateway to Google Cloud Run backend
In my GCP project, I have a python API running in a docker container (using connexion). I want to ex...

Cloud Runの「上り(内向き)の制御が内部のみ」の場合は「プロジェクトの VPC または VPC SC 境界から送信されるリクエストのみを受け入れる」ことを意味します。以下の図のように、APIGatewayはGoogle管理のVPCにあるため、Cloud Runはアクセスを拒否するみたいです。

そういう場合はVPCコネクタを使用するのですが、APIGatewayはVPCコネクタに接続できないため、Cloud Runの「上り(内向き)の制御」を「すべて」にする必要があります。

Cloud Runに接続する場合は、role/run.invokerのロールが付与されたサービスアカウントから接続する必要があります。つまり、認証および認可されたアカウントのみしか、Cloud Runにアクセスすることが出来ないため、公開したとしてもIAMで保護されているというわけです。

タイトルとURLをコピーしました