トップ/記事一覧
Cloud Functions のコールドスタート問題でハマった(Error: Could not load the default credentials. )
📆2020/01/03(最終更新日:2020/11/23)🔖 Firebase
⚠ この記事は最終更新日から1年以上が経過しています。内容が古い箇所がある可能性があるためご注意ください。
以下のエラーが出てハマりました。Firebase Functions の API を叩いて、メール送信したり、Slack に通知飛ばしたり、DB に書き込みに行ったりする処理をしている関数でこのエラーが発生。僕の環境では、コールドスタンバイ状態になると、これが発生してしまっていました。(夜は正常に動作していたけど、朝実行するとエラー、再度実行すると正常に動作、という事象でした。)
JavaScript
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/googleapis-common/node_modules/google-auth-library/build/src/auth/googleauth.js:159:19) at <anonymous> at process._tickDomainCallback (internal/process/next_tick.js:229:7)
結論、 GCP のバグっぽくて、(このブログを書いている 2020 年 1 月 3 日時点では)まだ解決されてない問題だと Google の方も言っています。
https://github.com/googleapis/google-auth-library-nodejs/issues/798#issuecomment-544764448
とりあえず暫定的な解決策もこの Issue に載っています。僕たちも、キーをアップロードし、起動時に以下のように環境変数に読み込ませるという手段で対応することにしました。(キーのアップロードが必要なので、GitHub の公開リポジトリでは行わないように注意してください)
JavaScript
process.env.GOOGLE_APPLICATION_CREDENTIALS = './key.json';
これでエラーが出なくなったのでひとまず大丈夫そう。この問題でだいぶハマってしまったので、同じエラーが出て困っている人の参考になればと思います。