みかづきブログ・カスタム

基本的にはちょちょいのほいです。

Cloud Functionsのリージョンは簡単に変更できるが、Firebase Hostingと組み合わせて動的なHTMLを返そうとすると変更すると問題が出てくる 🌍

Firebase

すべてはドキュメントに書いてあることではあるのですが、週末にほんのりはまったのでメモを残しておきます。


Cloud Functionsとは

Google Cloud Functions は軽量なコンピューティング ソリューションであり、デベロッパーはサーバーやランタイム環境を管理することなく、Cloud イベントに応答する単一目的のスタンドアロン関数を作成できます。

https://cloud.google.com/functions/docs?hl=ja より引用

AWSでいうところのLambdaのようなサービスです。


Cloud Functionsのリージョンの変更方法

デフォルトではリージョンが us-central1 となっており、アイオアで実行されます。
これまで特にリージョンを気にしたことはなかったのですが、よくよく考えると、日本からアクセスしてもアイオアで実行されるのは、ちょっとした海外旅行になるので、どうにかして東京リージョンで実行できないものかと調べてみたところ、

exports.myStorageFunction = functions
    .region('asia-northeast1')
    .storage
    .object()
    .onFinalize((object) => {
      // ...
    });

こんな感じで、 region の引数にStringでリージョン名を渡してあげるだけで、OKということを知りました。手軽です。
ドキュメントにはなんでも書いてありますね。ちなみに asia-northeast1 というのが、東京リージョンです。


リージョンを切り替えた時に起こったこと

僕はCloudFunctionsでExpressを動かし、Firebase Hostingと組み合わせることで、動的にHTMLを返してもらっていたのですが、リージョンを東京に切り替えると、

  1. Googleアカウントでログインを求められる
  2. アイオアっぽいドメインにリダイレクトされる

という現象が発生しました。なぜだ!


原因

よくよく調べると、これもドキュメントにしっかり書いてありました。

★ 重要: HTTP 関数を使用して Firebase Hosting で動的コンテンツを提供するには、us-central1 を使用する必要があります。

https://cloud.google.com/functions/docs?hl=ja より引用

しっかり、 重要 って書いてあるにもかかわらず、完全に見逃してました。
そして、リージョンをアイオアに戻すと元の挙動に戻ったので一安心です。


まとめ

  • Cloud Functionsのリージョンは管理画面ではなくコードで切り替える
  • HTTP関数を利用してFirebase Hosting で動的コンテンツを提供するにはデフォルトのリージョン(アイオア)で動かす

こちらからは以上です。