開始使用 Terraform 和 Firebase

Firebase 開始支援 Terraform。如果您的團隊希望自動化及標準化 Firebase 專案建立作業,並提供特定資源和啟用服務,建議您使用 Firebase 搭配 Terraform 使用。

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

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

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

Terraform 和 Firebase 提供哪些功能?

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

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

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

    • 啟用 Firebase Authentication 登入資訊提供者。
    • 建立 Cloud Storage 儲存桶或資料庫執行個體,並為其部署 Firebase Security Rules

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



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

必要條件

本指南介紹如何在 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 供應工具,因為這是使用 Firebase 與 Terraform 的 Beta 版。在實際工作環境中使用時,請務必謹慎小心。

    # Terraform configuration to set up providers by version.
    terraform {
      required_providers {
        google-beta = {
          source  = "hashicorp/google-beta"
          version = "~> 5.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
    }
    

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

  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 Realtime Database

尚未支援:


Cloud Firestore

  • google_firestore_database - 建立 Cloud Firestore 例項

  • google_firestore_index:啟用 Cloud Firestore 的效率查詢

  • google_firestore_document:使用集合中的特定文件為 Cloud Firestore 例項播種

    重要事項:請勿在這個種子文件中使用實際的使用者或正式版資料。


Cloud Storage for Firebase

  • google_firebase_storage_bucket:讓現有的 Cloud Storage 儲存體可供 Firebase SDK、驗證和 Firebase Security Rules 存取

  • google_storage_bucket_object:將物件新增至 Cloud Storage 值區

    重要事項:請勿在這個檔案中使用實際的使用者或實際生產資料。


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 設定檔範例



疑難排解與常見問題