🐥

Google Load Balancingでリダイレクトしたかった時に困ったこと

2023/10/01に公開

Next.js + Rails + GCPで既存のアプリケーションのリプレイスをしており
一部はLoad Balancingを利用して、新しいアプリケーションにパスベースで振り分けている状態でした。

単純なホストとパスのルールで(以下の例はurlMapでの記述になります)
Cloud Run上で動いているNext.jsアプリケーションに向けるため以下のように例えばしていました。

pathRules:
- paths:
  - /columns/*
  service: projects/[project]/global/backendServices/[backend service name]
- paths:
  - /columns
  service: projects/[project]/global/backendServices/[backend service name]
- paths:
  - /_next/*
  service: projects/[project]/global/backendServices/[backend service name]

でこの状態で/columns/888は別のサイトにリダイレクトしたいよという要望がありました。
まあまあできるでしょと、ドキュメントのこのページを参照
https://cloud.google.com/load-balancing/docs/https/setting-up-global-traffic-mgmt?hl=ja#configure_a_url_redirect
はいはい、routeRulesねと。

しかし1つのパスマッチャーの中にpathRulesとrouteRulesが同居できないことが判明しました。
パスマッチャーのホストを*とhogehoge.jpで分けることでできるといえばできるけど、弊害が出そうなので、さらに探索すると。

https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps
pathRulesにもurlRedirectございました。

pathRules:
- paths:
  - /columns/*
  service: projects/[project]/global/backendServices/[backend service name]
- paths:
  - /columns
  service: projects/[project]/global/backendServices/[backend service name]
- paths:
  - /_next/*
  service: projects/[project]/global/backendServices/[backend service name]
- paths:
  - /columns/888
  urlRedirect:
    hostRedirect: corporatesite.hogehoge.com
    pathRedirect: /columns/888

routeRulesは細かいパスマッチを指定できるようです。headerの内容によるパスマッチとか。
しかし同居できないので、細かいパスマッチからのリダイレクトが必要になりそうなら最初からrouteRulesで記述しておくことが必要なんだろうか。

Discussion