脱力駆動開発記

ゲームアプリを作るエンジニアの技術メモ

MENU

【Cloud Functions】シークレットな環境変数を構成・取得する

FirebaseのCloud FunctionsでAPI キーなどの大事な情報を環境変数で構成・取得する方法を説明します。

CloudFunctionsで環境変数を使用するにはいくつかの方法がサポートされています。

  1. firebase-functions/params経由での読み込み

  2. .envファイルを使用したdotenv経由での読み込み

  3. 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が読み込めていることが確認できました。

参考

firebase.google.com