【Cloud Functions】Error: Could not load the default credentials. は認証情報を追加して対応

Cloud Functions でエラーが出てバッチ処理がうまくいかない😥と相談を受けたので、関数のログを見てみると、、、ふむふむ。

Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.
    at GoogleAuth.getApplicationDefaultAsync (/srv/node_modules/google-auth-library/build/src/auth/googleauth.js:160:19)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)

翻訳してみると、認証情報が読み込めないとのこと。

さっそくググってみると以下の情報が役に立ちそうなことがわかりました。

Firebase – 環境の構成
https://firebase.google.com/docs/functions/config-env?hl=ja

Cloud IAM – サービス アカウント キーの作成と管理
https://cloud.google.com/iam/docs/creating-managing-service-account-keys

要は、サービスアカウントのキーを作成し、これをFunctionsで初期化のさいに読み込ませれば良いということか。

さっそく手順通りにサービスアカウントのキーを作成します。
ボタンからCloud IAMに移動し、サービスアカウントタブを開き、

Firebase Admin SDK のキー(鍵)を作成します。

今回は「JSON」を選択。

作成されたキーは自動的にダウンロードされます。

このファイルを、Functionsの作業ディレクトリにコピー。

/functions
  - foo-project-01234-0123456789abc.json
  - index.js
  ...そのほかのファイル

今度は「Firebase – 環境の構成」を参考に index.js を編集します。

/functions
  - foo-project-01234-0123456789abc.json
  - index.js
  ...そのほかのファイル

上記を参考に、書き換えます。

この際、キーファイル名は管理しやすいファイル名にリネームしておきます。
今回は例に倣って foo-project-01234-0123456789abc.json を serviceAccount.json にリネームしました。

const serviceAccount = require('./serviceAccount.json')

const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG)
adminConfig.credential = admin.credential.cert(serviceAccount)

admin.initializeApp(adminConfig)

これで解決するはず。
デプロイしてみます。

$ firebase deploy --only functions

実際に関数を動かしてみます。

無事エラーも消えたようですね!🙌

最後にキーファイルをうっかりコミットしないよう、.gitignore に追記しておきます。

serviceAccount.json

これで問題解決しました。
お疲れ様でした。

ご相談をお待ちしております

エクスコード株式会社は、次のようなご要望やお悩みを持つお客様に寄り添い、ご期待に応えます。

  • なるべく早くプロトタイプを作って、動かしてみたい。
  • ホームページやアプリを作ってみたいが、やり方も予算感も全く分からない。
  • 話をきちんと聞いて、意見を反映させたホームページやアプリを作って欲しい。

ご相談・お見積もりはこちら

メニュー