🦔
Firebase FunctionsのDeployをGitHub Actionsで行う際の環境変数問題について
ローカルでは問題なくできていた 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 として認識することできなくなったのではないかと考えてます。
まとめ
Firebase Functions を使って開発する際、GCP のサービスアカウントキーを扱うことが多々あります。そのキー内のprivate key
単体で扱うときは注意しましょう!
Firebase Functions 内で環境変数を扱う方法は、公式ドキュメントにしっかり書かれてます。
Discussion