結論から言うと、ページとしては想定のものが返ってきてるが、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をサーブする方がシンプルにできそうで良いのでは?と言う気持ちになってます。なにかシンプルなうまい方法ないですかね?
参考: