us-central1
以外でもrewriteできるようになってない? という話です。
今まで(の認識)
Hostingで動的なページを表示する際などにFunctionsへrewriteするってことがありますが、ここにあるように
Firebase Hosting の動的コンテンツを提供するために HTTP 関数を使用している場合は、 us-central1を使用する必要があります。
という縛りがあるので
export const hoge = functions.region('asia-northeast1').onRequest(app)
"hosting": {
"rewrites": [
{
"source": "/hoge",
"function": "hoge"
}
]
}
みたいな形にすると動かなかったんですよね。
少なくとも1年くらい前はus-central1
じゃないとダメだったような記憶・・・。
今(2022/12/07)
なんですが、ドキュメントを見ていたら
regionがhosting構成から省略されている場合、Firebase CLI は関数のソース コードからリージョンを自動的に検出しようとします。指定されていない場合は、デフォルトでus-central1ます。ソース コードが利用できない場合、CLI はデプロイされた関数からリージョンを検出しようとします。関数が複数のリージョンにある場合、CLI では、 hosting構成でregionを指定する必要があります。
あれ、この記述って前からあったっけ・・・。
あったような気もするし、その上で動かなかった気もするしどうだったっけ?
ともやもやしたので
"hosting": {
"rewrites": [
{
"source": "/hoge",
"function": "hoge",
"region": "asia-northeast1"
}
]
}
としてfirebase serve
したところ・・・あれ? 動いてね?
Firebase CLIのバージョンは10.2.2
と割と古いままなので、ここの問題でもなさそう。
ならばということでデプロイしたところ・・・やっぱり動いてね?
何かのあれでFunctionsがus-central1
にデプロイされてたりするのか? と思い、FunctionsのURLを直接叩くも、us-cental1
はダメで、asia-northeast1
だとちゃんと動く。
ダッシュボードを見ても確かにasia-northeast1
だし。
同名の関数なのが微妙だったかと思い別名の関数でデプロイしてみてもやっぱり動く・・・。
以前試したときに動かなかったのは、何か設定がおかしかった(firebase.json
にregion
指定してなかったとか)だけで、実は前からリージョン指定可能だったんだろうか?
それともどこかで仕様変更あったんだろうか?
ちなみに
Functionsをasia-northeast1
にした場合、firebase.json
のregion
を未指定にすると動きません。
(devtoolsをみる感じus-central1
に繋がってるっぽい)
なので
regionがhosting構成から省略されている場合、Firebase CLI は関数のソース コードからリージョンを自動的に検出しようとします。指定されていない場合は、デフォルトでus-central1ます。ソース コードが利用できない場合、CLI はデプロイされた関数からリージョンを検出しようとします。
にある「リージョンを検出しようとする~」のくだりはアテにしないほうがよさそうです。
そもそもCLIに言及してるから、localでの話なのかも?
終わりに
もし本当に勘違いとかでなくus-central1
縛りがなくなったのだとしたら、Functionsでweb APIを作るときにプロジェクトID露出させなくて済むな~とか。
近いリージョンだけでやろうとすると、どうしても直アクセスになってたんですよね。
そしてドキュメントちゃんと更新してほしい・・・。