🥵

サーバーレスVPCアクセスを利用してハマったこと

2023/09/03に公開

結論

Cloud RunでサーバーレスVPCアクセスを利用する時は、Traffic routingの設定に注意する。

起きたこと

エラーメッセージ

retry failed with context deadline exceeded; last error: Post "https://storage.googleapis.com/upload/storage/v1/b/○○…..: context deadline exceeded

どうやらファイルをアップロードするときにタイムアウトが起きているらしい。
でも何で?

原因

  • Cloud RunのサーバーレスVPCアクセスのルーティングの設定で「すべてのトラフィックを VPC コネクタ経由でルーティングする」と設定していた。

このため、コネクタとGCSが同じVPC上になくルーティングができない=タイムアウトエラーとなっていた。

サーバーレスVPCアクセスを使っている理由

  • このプロジェクトではRDBとしてCloud SQLを利用しており、プライベートインスタンスにしている。
  • そのためCloud RunからCloud SQLに接続できるようサーバーレスVPCアクセスコネクタを利用。

図で表すとこんな感じ。

すべてのトラフィックを VPC コネクタ経由でルーティング

プライベート IP へのリクエストだけを VPC コネクタ経由でルーティング

まとめ

  • そもそもTraffic routingの設定項目があることを知らなかった。(いつの間にかすべてのトラフィックをVPCコネクタ経由でルーティングするようにしていたらしい)
  • エラーメッセージからタイムアウトが起きていることは分かったが、何故タイムアウトが起きているか理由までは読み取れなかった。

→上記の理由からエラーを解消するのに時間がかかってしまった。

ローカル環境では成功、リモート環境では失敗しているので、ローカルとリモートの違い(リモートではDBはプライベートインスタンスにしている)を考えてみることによって最終的にエラーの原因に辿り着けた。

エラー内容をググってもヒットしなかったので、今後同じようなエラーに引っかかった際にどなたかの参考になれば嬉しいです!

Discussion