Firebase Functionsを呼び出す際にregion指定するとEmulatorではなく本番に接続してしまう
Function定義
Firebase Functionsのリージョンはデフォルトでは us-central1
になっている。
Function定義時にregionを指定するとリージョン変更ができる。
例えば東京リージョンに切り替えたい場合は↓のように asia-northeast1
を指定する。
const someFunction = functions.region("asia-northeast1").https.onCall(async (data, context) => {
return { message: "ok" }
}
これでFunctionをデプロイすると東京リージョンに公開される。
Function呼び出し元
client側では↓のようにfunctionsの引数にregionを指定することで呼び出すregionを変更できる。
const functions = firebase.app().functions("asia-northeast1")
しかし、Local Emulator Suiteを使ってローカルで開発を行う際にregion指定すると本番環境のfunctionsに接続してしまうことが判明。
ローカル環境ではローカルのfunctionsに接続してほしかったので、エミュレータの場合はregionを指定しないようにした。
昨日の記事 の lib/firebaseHelpers.ts
に↓を追記。
export function getFunctions() {
const region = isEmulator() ? undefined : 'asia-northeast1'
return getApp().functions(region)
}
関数は↓のようにすれば呼び出せる。
import { getFunctions } from '@/lib/firebaseHelpers'
const someFunction = getFunctions().httpsCallable('someFunction')
const response = await someFunction()
これでローカルではローカルのFunctions、本番ではリージョン指定のFunctiionsが正しく呼び出せるようになった。