ふり返る暇なんて無いね

日々のメモ書きをつらつらと。メインブログに書くほどでもないことを流してます

未解決: Google Cloud Storageの静的配信でnginxで言うところのtry_files的なことをしたかった。。。。

結論から言うと、ページとしては想定のものが返ってきてるが、status code 404が返るようになってうまくいってないです。

nginxだと下記の様に設定すると、指定されたファイルを探して見つからなかったら/index.htmlを返す(それもなかったら404を返す)。ということをしてくれます。

try_files $uri /index.html =404;

シングルページアプリとかだと返して欲しいhtmlはindex.htmlだけど、パスに応じて挙動を変えるみたいなことをしてると思います。これに対応するために上記の設定をしています。

もともとNginxをCloudRunで動かして、これをやっていたのですが、どうせ静的配信しかしないならCloud Storageでいいのでは?となって移行しようとしています。

これと同等のことCloud Storageでやるには、NotFoundPage = index.htmlを指定するとよさそうです。terraformで書くとこんな感じになります。

resource "google_storage_bucket" "website" {
  name          = "${local.name}-site"
  location      = "ASIA1"
  storage_class = "MULTI_REGIONAL"

  website {
    main_page_suffix = "index.html"
    not_found_page   = "index.html"
  }

ページの表示としてはうまくいったのですが、status codeが404で返ってきてしまいます。これをうまく200で返す手段がCloud Storageとロードバランサの組み合わせでは見つかりませんでした。

CloudFunctionsでうまくごにょごにょすれば良いかもですが、だったらCloud RunでNginxをサーブする方がシンプルにできそうで良いのでは?と言う気持ちになってます。なにかシンプルなうまい方法ないですかね?

参考: