開始使用 Terraform 和 Firebase

Firebase 開始支援 Terraform。如果您所屬的團隊想自動建立 Firebase 專案,並標準化專案的建立程序,同時佈建特定資源及啟用服務,那麼使用 Terraform 搭配 Firebase 可能很適合您。

使用 Terraform 和 Firebase 的基本工作流程包括:

  • 建立及自訂 Terraform 設定檔 (.tf 檔案),指定要佈建的基礎架構 (即要佈建的資源和要啟用的服務)。

  • 使用與 Terraform 互動的 gcloud CLI 指令,佈建 .tf 檔案中指定的基礎架構。

Terraform 和 Firebase 搭配使用有哪些優點?

本指南中的一般工作流程範例是建立含有 Android 應用程式的新 Firebase 專案。不過,您可以使用 Terraform 執行更多操作,例如:

  • 使用 Terraform 刪除及修改現有基礎架構。

  • 使用 Terraform 管理產品專屬設定和工作,例如:

    • 啟用 Firebase Authentication 登入資訊提供者。
    • 建立 Cloud Storage 值區或資料庫執行個體,並為其部署 Firebase Security Rules
    • 建立 Firebase App Hosting 後端、建構作業和其他相關資源。

您可以使用標準 Terraform 設定檔和指令完成所有這些工作。為協助您完成這項作業,我們提供幾種常見用途的範例 Terraform 設定檔



使用 Terraform 搭配 Firebase 的一般工作流程

必要條件

本指南是 Firebase Terraform 使用入門,因此假設您已具備 Terraform 的基本能力。開始這個工作流程前,請務必完成下列必要條件。

  • 安裝 Terraform,並透過官方教學課程熟悉 Terraform。

  • 安裝 Google Cloud CLI (gcloud CLI)。使用使用者帳戶服務帳戶登入。


步驟 1:建立及自訂 Terraform 設定檔

Terraform 設定檔需要兩個主要部分 (詳情請見下文):

設定 provider

無論涉及哪些 Firebase 產品或服務,都必須進行 provider 設定。

  1. 在本地目錄中建立 Terraform 設定檔 (例如 main.tf 檔案)。

    在本指南中,您將使用這個設定檔指定provider設定,以及要 Terraform 建立的所有基礎架構。請注意,您可以選擇如何納入供應商設定。

  2. main.tf 檔案頂端加入下列 provider 設定。

    您必須使用 google-beta 提供者,因為這是透過 Terraform 使用 Firebase 的 Beta 版。在正式環境中使用時請務必謹慎。

    # Terraform configuration to set up providers by version. terraform {   required_providers {     google-beta = {       source  = "hashicorp/google-beta"       version = "~> 6.0"     }   } }  # Configures the provider to use the resource block's specified project for quota checks. provider "google-beta" {   user_project_override = true }  # Configures the provider to not use the resource block's specified project for quota checks. # This provider should only be used during project creation and initializing services. provider "google-beta" {   alias = "no_user_project_override"   user_project_override = false }

    進一步瞭解使用 Terraform 和 Firebase 時的不同專案相關屬性 (包括本指南中稱為「配額檢查專案」的屬性)。

  3. 請繼續前往下一節,完成設定檔並指定要建立的基礎架構。

使用 resource 區塊指定要建立的基礎架構

在 Terraform 設定檔 (本指南中為 main.tf 檔案) 中,您需要指定要 Terraform 建立的所有基礎架構 (也就是要佈建的所有資源,以及要啟用的所有服務)。在本指南中,您可以找到支援 Terraform 的所有 Firebase 資源完整清單

  1. 開啟 main.tf 檔案。

  2. provider 設定下方,加入 resource 區塊的下列設定。

    這個基本範例會建立新的 Firebase 專案,然後在該專案中建立 Firebase Android 應用程式。

    # Terraform configuration to set up providers by version. ...  # Configures the provider to use the resource block's specified project for quota checks. ...  # Configures the provider to not use the resource block's specified project for quota checks. ...  # Creates a new Google Cloud project. resource "google_project" "default" {   provider   = google-beta.no_user_project_override    name       = "Project Display Name"   project_id = "project-id-for-new-project"   # Required for any service that requires the Blaze pricing plan   # (like Firebase Authentication with GCIP)   billing_account = "000000-000000-000000"    # Required for the project to display in any list of Firebase projects.   labels = {     "firebase" = "enabled"   } }  # Enables required APIs. resource "google_project_service" "default" {   provider = google-beta.no_user_project_override   project  = google_project.default.project_id   for_each = toset([     "cloudbilling.googleapis.com",     "cloudresourcemanager.googleapis.com",     "firebase.googleapis.com",     # Enabling the ServiceUsage API allows the new project to be quota checked from now on.     "serviceusage.googleapis.com",   ])   service = each.key    # Don't disable the service if the resource block is removed by accident.   disable_on_destroy = false }  # Enables Firebase services for the new project created above. resource "google_firebase_project" "default" {   provider = google-beta   project  = google_project.default.project_id    # Waits for the required APIs to be enabled.   depends_on = [     google_project_service.default   ] }  # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "default" {   provider = google-beta    project      = google_project.default.project_id   display_name = "My Awesome Android app"   package_name = "awesome.package.name"    # Wait for Firebase to be enabled in the Google Cloud project before creating this App.   depends_on = [     google_firebase_project.default,   ] }


步驟 2:執行 Terraform 指令,建立指定基礎架構

如要佈建資源並啟用 main.tf 檔案中指定的服務,請從 main.tf 檔案所在的目錄執行下列指令。如要進一步瞭解這些指令,請參閱 Terraform 說明文件

  1. 如果這是您第一次在目錄中執行 Terraform 指令,請先初始化設定目錄,並安裝 Google Terraform 供應商。如要執行這項操作,請執行下列指令:

    terraform init
  2. 執行下列指令,在 main.tf 檔案中建立指定的基礎架構:

    terraform apply
  3. 確認所有項目都已佈建或啟用:

    • 選項 1:執行下列指令,在終端機中查看列印的設定:

      terraform show
    • 選項 2:Firebase 控制台中查看 Firebase 專案。



支援 Terraform 的 Firebase 資源

下列 Firebase 和 Google 資源支援 Terraform。我們也會不斷新增資源!因此,如果找不到想透過 Terraform 管理的資源,請稍後再回來查看是否已推出,或在 GitHub 存放區中提出問題來要求。


Firebase 專案和應用程式管理

  • google_firebase_project:在現有的 Google Cloud 專案中啟用 Firebase 服務

  • Firebase 應用程式


Firebase Authentication

目前不支援:

  • 透過 Terraform 設定多重驗證 (MFA)

Firebase App Hosting


Firebase Data Connect


Firebase Realtime Database

目前不支援:

  • 透過 Terraform 部署 Firebase Realtime Database Security Rules (瞭解如何使用其他工具 (包括程式輔助選項) 部署這些 Rules)

Cloud Firestore

  • google_firestore_database:建立 Cloud Firestore 執行個體

  • google_firestore_index:可針對 Cloud Firestore 啟用有效率的查詢

  • google_firestore_document:使用集合中的特定文件,為 Cloud Firestore 執行個體提供種子

    重要事項:請勿在這個種子文件中使用真實的消費者或生產資料。


Cloud Storage for Firebase


Firebase Security Rules (適用於 Cloud FirestoreCloud Storage)

請注意,Firebase Realtime Database 使用的佈建系統與 Firebase Security Rules 不同。

  • google_firebaserules_ruleset:定義適用於 Cloud Firestore 例項或 Cloud Storage 值區的 Firebase Security Rules

  • google_firebaserules_release - 將特定規則集部署至 Cloud Firestore 執行個體或 Cloud Storage 值區

    ruleset

Firebase App Check


Firebase Extensions



常見用途的 Terraform 設定檔範例



疑難排解與常見問題