ログにエラーが出力されず厄介な問題だったため共有します。
概要
GCPのCloud Run上にデプロイしたRuby on RailsのAPIサーバーにて、リクエストボディを含むGETリクエストのAPIを叩いたところ
Your client has issued a malformed or illegal request
と記載されたHTMLが返ってきました。以下HTMLを表示した画面です。
エラー詳細
ローカルでは問題なく動いており、Cloud Runにデプロイした本番環境のみで上記エラーが起こります。
Cloud Run上のログにはAPIが叩かれたことすら表示されていなく、リクエストボディを空にすると初めてログが表示されます。
原因
Cloud Runのようなクラウド上に構築されたサーバーを使用する場合、REST APIの原則に基づいて不自然なリクエストを弾く仕様がAPIサーバーでのリクエスト前段に構築されているようです。
今回の場合は、
GETリクエストはURIに組み込まれた情報のみを使用するべきであり、リクエストボディ等を含むべきではない
という思想に基づいた仕様がGCP上で適用されており、自身で構築したAPIサーバーに到達する前に弾かれていたことになります。
リクエストボディを含む場合はPOSTリクエストとしてAPIを作成しましょう。
参考
python 3.x - デプロイされたサービスに到達せずに Cloud Run リクエストがエラー 400 をトリガーする