Firebase Cloud Functionsを利用しているプロジェクトでは、以前は各開発者のローカル環境からデプロイを行っていました。
firebase deploy --only functions
手軽な方法ではありましたが、
- 開発者ごとに環境が異なる
- Firebase CLIのバージョン差異
- 誰がデプロイしたか分かりづらい
- 認証情報を各PCで管理する必要がある
といった課題がありました。
そこで、Cloud Buildを利用してCloud Functionsのデプロイを自動化し、認証情報もSecret Managerで管理する構成へ変更しました。
導入前
以前はローカルPCから直接デプロイしていました。
GitHub
↓
ローカルPC
↓
firebase deploy
↓
Cloud Functions
開発者ごとにFirebase CLIのセットアップや認証が必要で、デプロイ方法も個人の環境に依存していました。
導入後
現在はCloud Buildからデプロイしています。
GitHub
↓
Cloud Build Trigger
↓
Cloud Build
↓
Cloud Functions
リポジトリへPushするとCloud Buildが起動し、Cloud Functionsまでデプロイします。
Secret Managerで認証情報を管理
ローカルでは
firebase login
したユーザー情報を利用していました。
現在は、認証情報をSecret Managerで管理し、Cloud Buildから取得しています。
Secret Manager
↓
Cloud Build
↓
Firebase CLI
秘密情報をリポジトリや開発者のPCへ保存する必要がなくなりました。
cloudbuild.yaml
Cloud BuildではSecret Managerから認証情報を取得しています。
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/firebase-token/versions/latest
env: FIREBASE_TOKEN
steps:
- name: node:20
entrypoint: bash
args:
- -c
- |
npm ci
npm install -g firebase-tools
- name: node:20
entrypoint: bash
secretEnv:
- FIREBASE_TOKEN
args:
- -c
- |
firebase deploy \
--only functions \
--project ${PROJECT_ID} \
--token "$FIREBASE_TOKEN"
options:
logging: CLOUD_LOGGING_ONLY
Cloud Build実行時だけ環境変数へ展開されます。
Cloud Buildのサービスアカウント
Cloud Buildのサービスアカウントには、
- Cloud Functions Developer
- Secret Manager Secret Accessor
- Cloud Build Editor
- Service Account User
など、必要最小限の権限を付与しています。
特にSecret Managerは、
Secret Accessor
権限がないと取得できません。
Cloud Build Trigger
GitHubと連携し、
例えば
- main
- release/*
へのPushで自動実行しています。
GitHub Push
↓
Cloud Build Trigger
↓
Cloud Build
↓
Deploy
手動でFirebase CLIを実行することはなくなりました。
Secret Managerを使って良かったこと
以前は、
- 開発者PC
- CI環境
それぞれで認証情報を管理していました。
現在はSecret Managerで一元管理しています。
認証情報を変更する場合も、
Secret Managerを更新するだけで済むため、
リポジトリの修正や再配布は不要になりました。
導入して感じたこと
Cloud Buildへ移行したことで、
デプロイ作業が個人のPCから切り離されました。
さらにSecret Managerを利用することで、
認証情報もコードやローカル環境へ置かなくなり、
運用もしやすくなりました。
デプロイ手順も
Push
↓
Cloud Build
↓
Deploy
とシンプルになり、
誰が実行しても同じ環境・同じ手順でデプロイできるようになっています。
まとめ
今回の構成では、
- GitHub PushでCloud Buildを起動
- Secret Managerから認証情報を取得
- Cloud Functionsを自動デプロイ
- Cloud Buildに実行履歴を保存
という流れにしました。
以前のようにローカルPCからfirebase deployを実行する運用と比べ、
- 環境差異がなくなった
- 認証情報を一元管理できるようになった
- デプロイの再現性が向上した
といったメリットを感じています。
特に、Secret Managerを組み合わせることで、デプロイだけでなく認証情報の管理も含めて、安全な運用ができるようになりました。