FirebaseのCloud FunctionsでAPI キーなどの大事な情報を環境変数で構成・取得する方法を説明します。
CloudFunctionsで環境変数を使用するにはいくつかの方法がサポートされています。
firebase-functions/params経由での読み込み
.envファイルを使用したdotenv経由での読み込み
functions.config経由での読み込み(現在は非推奨)**
ということで1か2になるのですが、ここはFirebaseのドキュメントでほとんどのシナリオで推奨と書いてある1のfirebase-functions/paramsを使用します。
どちらの方法も、機密性の高い情報をCloudSecretManagerから取得することが可能です。
なので結論としてはfirebase-functions/params と CloudSecretManagerを使用して、Apiキーを安全に読み込んでいくことになります。
使い方
CloudSecretManagerでシークレットを登録する
今回管理したいSecretの名前はAPI_KEY
とします。
Cloud Functionsのルートディレクトリで以下を実行。
firebase functions:secrets:set API_KEY
おそらくプロジェクトで初めてfunctions:secretsを実行すると以下のようなエラーが出ると思います。
Error: HTTP Error: 403, Secret Manager API has not been used in project before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/secretmanager.googleapis.com/overview?project= then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
コンソールに表示されているURLにアクセスするとSecret Manager APIを有効にする画面になるので、そこで「有効」を押してから再度コマンドを実行します。
入力を受け付けるコマンドが出たら、入力すれば完了です。
正しく入力されたかを確認したい場合は、以下のコマンドを実行します。
firebase functions:secrets:access API_KEY
表示されればOK。
これでSecretは設定できたので、次はコード側から呼び出します。
CloudFunctions(TypeScript)側から呼び出す
Cloud Functions側からSecretManagerで設定した値を呼び出します。
import {defineSecret} from "firebase-functions/params"; const apiKey = defineSecret('API_KEY'); const key = apiKey.value(); console.log(key);
これでSecretが読み込めていることが確認できました。