フリーランチ食べたい

No Free Lunch in ML and Life. Pythonや機械学習のことを書きます。

Firebase Cloud Functionsの環境変数はRuntimeによって変わるので注意

タイトルで全部言ってしまっているのですが、ハマったので同じハマり方をしている方の検索用にメモっておきます。

自分がぶつかったのはGCLOUD_PROJECTでFirebaseのproject_idを取得して環境ごとに処理を切り分けたかったのですが、GCLOUD_PROJECTが何故か参照できなかったという問題でした。

2019-08-20現在の情報なので、時間が経過している場合は必ず公式ドキュメントを当たるようにしてください。

TL;DR

  • Node.js 10ではGCLOUD_PROJECT/GOOGLE_CLOUD_PROJECTは使えない
  • Node.js 10ではJSON.parse(process.env.FIREBASE_CONFIG)["projectId"]を使う
  • GCLOUD_PROJECTはdeprecatedなのでGOOGLE_CLOUD_PROJECTを使う

Node.js 6, Node.js 8, Python 3.7 and Go 1.11かNode.js 10で変わる

公式ドキュメントに記載があるのですが、Runtimeによって参照できる環境変数に違いがあります。

cloud.google.com

一応、現時点での参照できる環境変数の違いです。

Node.js 6, Node.js 8, Python 3.7 and Go 1.11

f:id:ikedaosushi:20190820113915p:plain

Node.js 10

f:id:ikedaosushi:20190820114007p:plain

Node.js 10を使う場合はFIREBASE_CONFIGを参照する

Node.js 10ではFirebaseのproject_idを確認できる環境変数がなく、「どうしたらいいの?」と思ったのですが、FIREBASE_CONFIGはRuntimeによらず参照できるようです。 FIREBASE_CONFIGはString形式で入っているのでJSON.parse(process.env.FIREBASE_CONFIG)["projectId"]のように参照しましょう。

firebase.google.com

{
  databaseURL: 'https://databaseName.firebaseio.com',
  storageBucket: 'projectId.appspot.com',
  projectId: 'projectId'
}

GCLOUD_PROJECTはdeprecated

もう一点、調べていて気付いたのですが、GCLOUD_PROJECTはdeprecatedになっているようです。代わりにGOOGLE_CLOUD_PROJECTを使いましょう。

下のIssueに上がっている通り、公式ドキュメント内でも古くなっている部分があるので注意が必要です。

github.com

さいごに

ドキュメント読んでいきましょう。