【メモ】Cloud Functions for Firebase用の関数をWSLでデバッグする際、認証情報を使う
概要
Google Cloud Functions for Firebaseでは
ローカルデバッグ用のエミュレータが利用できるようになっています。
このローカルデバッグ時に認証情報が必要な処理があった場合
認証エラーとなってしまう件についてのメモ。
いつも通り、WSLでのお話。
環境
OS: Windows 10 Pro 64bit(with WSL)
詳細
こちらのチュートリアル通りにすすめていくと、4. 必要なモジュールをインポートしてアプリを初期化する
の項で
firebase-admin
を使用する旨が書かれています。
この処理をデバッグ時に通すと認証エラーになってしまいます。
(tokenとか指定してないので当たり前なんですが・・・)
で、公式ドキュメントを漁ってみると・・・ありました。
手順通りにすすめてみる
ほうほう、まず秘密鍵ファイルを作成して、任意の場所に保存。
その後コンソールでexport GOOGLE_APPLICATION_CREDENTIALS="/path/to/hoge.json"
を実行しなさい、と。
(ただし一時的なもの=現在のコンソールでのセッションでのみ有効)
別途コード内にベタ書きする手法も書いてますが、推奨されてないみたいですね。
ではでは同様の手順を実行して、と・・・。
[yyyy-mm-ddThh:mm:ss.SssZ] @firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the \"credential\" property failed to fetch a valid Google OAuth2 access token with the following error: \"Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal metadata.google.internal:80. Error code: ENOTFOUND\"."}
うん、ダメやないかい
多分環境変数が読めてないんだろうな~
ってことで該当のnodeモジュール内にconsole.log
を仕込んでみることに。
えーと・・・firebase_admin/lib/auth/credential.js
・・・これかな。
getApplicationDefault
関数内で該当の環境変数を読み取ってそうなところがあったので、そこに仕込むと・・・
undefined
やっぱり。
他の手法を探す
- ホスト側(Windows)の環境変数に
GOOGLE_APPLICATION_CREDENTIALS
を設定してみる
→駄目。cmdやらPowerShellで実行するなら問題なさげですが・・・ node_modules
を削除して再度npm i
して実行
→駄目。今回の件には全く関係ない- 前回の記事通り、コマンド実行時に環境変数を定義して渡す。
→いけました。WSLだとこれじゃないと駄目?
※参考記事
この記事にあるように、以下コマンドを実行
GOOGLE_APPLICATION_CREDENTIALS="/path/to/hoge.json" npm run serve
(package.json
にscriptsがあったのでこのコマンド。恐らくfirebase emulators:start
でもOK)
やっと実行できましたね。
終わりに
今回はWSLでGCF for Firebaseのデバッグ実行について書きました。
強制的に環境変数を定義する手法でなんとかなりましたが、他にいい方法があれば
誰か教えていただけると助かります・・・。
とりあえず、これでWSLでのデバッグ実行は問題ないですね。
現場からは以上です。