開始使用 Terraform 和 Firebase

Firebase 即將開始支援 Terraform。 如果團隊成員想自動化及標準化建立 Firebase 方法是使用 Terraform 搭配 Firebase 是相當理想的選擇。

以下是搭配 Firebase 使用 Terraform 的基本工作流程:

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

  • 使用 gcloud CLI 指令介面搭配 Terraform 執行以下動作: 佈建 .tf 檔案中指定的基礎架構。

,瞭解如何調查及移除這項存取權。

Terraform 和 Firebase 的用途

本指南中的一般工作流程範例 使用 Android 應用程式建立新的 Firebase 專案。但您可以做許多事 例如:

  • 使用 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 供應商,因為這是下列應用程式的 Beta 版: 搭配 Terraform 運用 Firebase在實際工作環境中使用時,請務必謹慎。

    # 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
    }

    如想進一步瞭解來電目錄、轉接和錄音服務政策, 不同類型的專案相關屬性 (包括本指南稱之「配額檢查專案」的內容) 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 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 執行個體的 Firebase Security Rules Cloud Storage 個值區

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


Firebase App Check


Firebase Extensions



常見用途的 Terraform 設定檔範例



疑難排解與常見問題