🦔

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

2022/09/30に公開

ローカルでは問題なくできていたFirebase Functionsのデプロイですが、GitHub 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で編集を提案

Discussion