【備忘録】CloudRunにFastly CDNを噛ますときはセッション アフィニティをOFFにしないとキャッシュされない

Cloud Run には セッション アフィニティ という機能があります。説明には

同じクライアントからのリクエストを可能な限り同じコンテナ インスタンスにルーティング。

とあるように、Cloud Runで複数のインスタンスが立ち上がっている状態でも可能な限り同一のインスタンスにアクセスされるようになる設定です。

cloud.google.com

この仕組みは簡単で、GAESAという名前のCookieを初回アクセス時に付与してこの値を見てインスタンスを振り分けているようです。

実際に自分の公開しているAPIで試してみた

しかし、FastlyなどのCDNなどを噛まして配信している場合はどうなるかというとレスポンスヘッダーにSet-Cookieがあるためキャッシュされません。そのため、CDNがあるのに毎回PASSされてしまいオリジンに到達してしまうという状態になってしまいます。

CDNを噛ますのであれば、そもそもこの機能はOFFで問題ないためOFFにしてしまいましょう。私はこれで数時間溶かしてしまったので皆さんお気をつけください。

参考

stackoverflow.com