- Webエンジニア
- アウトバウンド営業
- Webエンジニア(経験者)
- 他19件の職種
- 開発
- ビジネス
はじめに
私たちのチームでは、長年稼働してきた巨大なモノリシックシステムを段階的にリプレースしています。
Next.js(App Router構成)を使ったフロントと、GraphQL APIを備えた新しいバックエンドを少しずつCloud Runへ移行中です。
LB(ロードバランサ)でパスを切り分け、旧システム(Compute Engine上)と新システム(Cloud Run上)を共存させる形で運用しています。
この段階的リプレースは順調に見えましたが、ある日、リリースのたびに大量のネットワークエラーが発生するようになりました。
発生したエラー
エラーの内容はこのようなものです
[Network e]: TypeError: fetch failed
[Network e]: Error: {"message":"Upstream returned 504. body={\"code\":504,\"message\":\"upstream request timeout\"}"}
新しいリビジョンをデプロイした直後の15分ほどだけ大量発生。
時間が経つと収まる——でも、リリースのたびにユーザー影響が出る。
「これは絶対に潰さなければ」とチーム全員で調査が始まりました。
再現と原因の手がかり
ローカルではもちろん再現しません。
Cloud Runのリビジョン切り替え時にしか起きないため、実際にCloud環境+負荷付きで検証する必要がありました。
ApatchBenchで負荷をかけつつ、リビジョンを切り替えてみると——見事に再現。
モニタリング指標を追うと、同時期にCloud NATの接続エラーが記録されていました。
これがすべての鍵でした。
Cloud RunのVPC接続の仕組みを理解する
Cloud RunからVPC(内部ネットワーク)に出ていく経路には、実は2つの方法があります。
🔹 Direct VPC egress(推奨)
Cloud Runのインスタンス自身にVPCネットワークインタフェースがつき、直接VPCを経由して通信します。
余計な中継がなく、低遅延・高スループット・追加コストなしが魅力。
通信の種類を
private-ranges-only(プライベート IP へのリクエストのみを VPC にルーティングする)all-traffic(すべてのトラフィックを VPC にルーティングする)
から選べます。
🔹 Serverless VPC Access コネクタ
一方で古くからある方式がこれ。
Cloud Run → VPCの間に専用の中継VMを立てる構成です。
運用や費用は増えますが、IP枯渇を避けたいなどの特殊なケースではまだ使われます。私たちのプロジェクトでも以前は使用していました。
NATにすべてが集中していた
私たちのAPIサービスは外部APIにもアクセスしていたため、Direct VPC egressをall-traffic設定で運用していました。
つまり、あらゆる通信がCloud NATを経由していました。
リリース直後、同時に大量のインスタンスが立ち上がり、外部APIやDBにアクセスしようとします。
NATゲートウェイの接続上限に達すると、新しい通信はドロップされ、結果的にfetch failedや504が返ってくる。
これがエラーの正体でした。
NAT負荷を減らすための工夫
まずはDB接続を見直しました。
Cloud SQLを利用していたため、接続方式を「ソケット」から「ホスト(Private IP)」に変更。
Public経由ではなくVPC内部のPrivate IPでつなぐことで、NATを経由しない通信にできました。
補足:
NATを回避できるかどうかは「socketかhost」ではなく「宛先がPrivate IPかPublic IPか」で決まります。
今回は宛先をPrivate IPに変えたことで、NAT負荷を減らすことができました。
フロントエンド側でも同様に
フロント(Next.js)も同じようにall-traffic設定でした。
ここをprivate-ranges-onlyに切り替えてNAT負荷を軽くしようとしましたが、問題発生。
ページがエラーになり、ヘルスチェックも通らない。
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/53926
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
フリーランスエンジニア大募集中!
現在、「WEBエンジニア」「フロントエンジニア」「データサイエンティスト」など、様々な職種のフリーランスエンジニア様を募集中です。まずは以下よりお気軽にご応募ください!
採用ページはこちら:https://itanken.com/register
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。
Wantedly:https://www.wantedly.com/companies/rightcode
コーポレート:https://rightcode.co.jp/