発生した事象
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で保護されているというわけです。