開始使用 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 設定檔範例



疑難排解與常見問題