Terraform 和 Firebase 入門

Firebase 開始支援Terraform 。如果您所在的團隊想要自動化和標準化建立 Firebase 專案並配置特定資源並啟用服務,那麼將 Terraform 與 Firebase 結合使用可能非常適合您。

將 Terraform 與 Firebase 結合使用的基本工作流程包括以下內容:

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

  • 使用與 Terraform 互動的 gCloud CLI 指令來設定.tf檔案中指定的基礎架構。

您可以使用 Terraform 和 Firebase 做什麼?

本指南中的範例通用工作流程是使用 Android 應用程式建立一個新的 Firebase 專案。但您可以使用 Terraform 做更多事情,例如:

  • 使用 Terraform 刪除和修改現有基礎設施。

  • 使用 Terraform 管理特定於產品的配置和任務,例如:

    • 啟用 Firebase 驗證登入提供者。
    • 建立 Cloud Storage 儲存桶或資料庫執行個體並為其部署 Firebase 安全性規則。

您可以使用標準 Terraform 設定檔和命令來完成所有這些任務。為了幫助您解決此問題,我們為幾個常見用例提供了範例 Terraform 設定檔



將 Terraform 與 Firebase 結合使用的通用工作流程

先決條件

本指南介紹如何將 Terraform 與 Firebase 結合使用,因此假設您已基本熟悉 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 結合使用的測試版。生產中使用時請務必小心。

    # Terraform configuration to set up providers by version.
    terraform {
      required_providers {
        google-beta = {
          source  = "hashicorp/google-beta"
          version = "~> 4.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 專案與應用程式管理


Firebase 身份驗證

尚不支持:

  • 透過 Terraform 配置多重驗證 (MFA)

Firebase 即時資料庫

尚不支持:

  • 透過 Terraform 部署 Firebase 即時資料庫安全規則(了解如何使用其他工具(包括程式選項)部署這些規則

雲端Firestore

  • google_firestore_database — 建立 Cloud Firestore 實例

  • google_firestore_index — 為 Cloud Firestore 啟用高效查詢

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

    重要提示:請勿在此種子文件中使用真實的最終使用者或生產資料。


Firebase 雲端儲存


Firebase 安全性規則(適用於 Cloud Firestore 和 Cloud Storage)

請注意,Firebase 即時資料庫對其 Firebase 安全性規則使用不同的設定係統。

  • google_firebaserules_ruleset — 定義適用於 Cloud Firestore 實例或 Cloud Storage 儲存分區的 Firebase 安全性規則

  • google_firebaserules_release — 將特定規則集部署到 Cloud Firestore 實例或 Cloud Storage 儲存桶


Firebase 應用程式檢查


Firebase 擴充



常見用例的 Terraform 設定檔範例



故障排除和常見問題解答