🦔

Firebase FunctionsのDeployをGitHub Actionsで行う際の環境変数問題について

2022/09/30に公開

ローカルでは問題なくできていた Firebase Functions のデプロイですが、GitHu b Actions だと以下のようなエラーが起きました。

✔  functions: Finished running predeploy script.
i  functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i  functions: ensuring required API cloudbuild.googleapis.com is enabled...
i  artifactregistry: ensuring required API artifactregistry.googleapis.com is enabled...
✔  artifactregistry: required API artifactregistry.googleapis.com is enabled
✔  functions: required API cloudbuild.googleapis.com is enabled
✔  functions: required API cloudfunctions.googleapis.com is enabled
i  functions: preparing codebase default for deployment
i  functions: Loaded environment variables from .env.

Error: Failed to load function definition from source: Failed to generate manifest from function source: Error: Failed to parse private key: Error: Only 8, 16, 24, or 32 bits supported: 528

問題の箇所はここです。

Failed to load function definition from source: Failed to generate manifest from function source: Error: Failed to parse private key: Error: Only 8, 16, 24, or 32 bits supported: 528

環境変数は、GitHub Secrets から読み取っております。
.env の環境変数を読み込んだあとにエラーが起きており、エラー分を見るとFailed to parse private keyと書いているため、private key周りが問題だとわかります。

結論

以下のようなprivate keyを環境変数内で取り扱っている場合、セミコロンを外せば解決します。

-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n

考察

エラー文にも書いてあるとおり、エラーの原因はprivate keyの JSON パースに失敗したからです。
GitHub Actions 上ではprivate keyにセミコロンをつけることで JSON として認識することできなくなったのではないかと考えてます。

https://stackoverflow.com/questions/50299329/node-js-firebase-service-account-private-key-wont-parse

まとめ

Firebase Functions を使って開発する際、GCP のサービスアカウントキーを扱うことが多々あります。そのキー内のprivate key単体で扱うときは注意しましょう!

Firebase Functions 内で環境変数を扱う方法は、公式ドキュメントにしっかり書かれてます。
https://firebase.google.com/docs/functions/config-env?hl=ja#managing_secrets

GitHubで編集を提案
YOSHINANI

Discussion