Cloud Functionsの起動元の権限について
Cloud Functionsを呼び出せない
なんで...?(デプロイはちゃんとできているのに)
Firebaseでアプリを作っているときにCloud Functionsで対応する処理が作る必要が出てくることがあるがこの時、Cloud Functionsを呼び出せない時がある。
色々原因を調査してみると、
原因が、GCP側で管理しているCloud Functionsの権限に問題があった。
明確にいつからは分からないがちょっと前まではCloud Functionsの権限周りが 少し緩かったがGCP側がデフォルトの権限を強化したっぽい。
それにより新しくデプロイしたCloud Functionsの起動元の権限を変更しないとデプロイした関数を呼び出せなくなってしまった。
GCPをあまり使用した経験がなくFirebaseだけカジュアルにサービス開発していると面食らうな...(2時間ぐらい時間を溶かした)
Firebase側で権限を変更できたりコードベース上で変更できるようにしてくれよって思うけど現状の仕様とてきにCCPの管理画面で変更するしかなさそう。
Cloud Functionsの権限変更方法
上記でもごちゃごちゃ書いているが、Firebase Cloud Functionsを使っていても権限周りは現状、GCPで変更するしかないのでまず、GCPの管理画面を開く。
https://console.cloud.google.com
サイドバーから「Cloud Functions」を選択
関数一覧をダッシュボードで確認
「Authentication」が「未認証を許可」になっているかを確認。 なっていれば、問題なく起動できるが新しく関数をデプロイすると空欄になっているので権限を変更する必要がある。
権限を変更
下記のスクショんを参考に、「追加」をクリックすると権限設定ができるので「Cloud Functions」を選択。
権限について
allUsers
にすると、基本全てのユーザーが関数を実行できるようになるが認証済みユーザーのみに制限したい場合はallAuthenticatedUsers
にするとよい
上記の設定を諸々すると、Firebase Cloud Functionsでデプロイした関数が起動できるようになる。
めでたし、めでたし。