使用入门:将 Terraform 与 Firebase 搭配使用

Firebase 现在提供 Terraform 支持。如果您所在的团队想要用一套标准化的流程自动创建预配了特定资源并启用了相关服务的 Firebase 项目,那么将 Terraform 与 Firebase 搭配使用会非常有用。

若要将 Terraform 与 Firebase 搭配使用,需完成下面的基本工作流程:

  • 创建和自定义 Terraform 配置文件(一个 .tf 文件),用于指定您要预配的基础架构(即要预配的资源和要启用的服务)。

  • 使用与 Terraform 关联的 gCloud CLI 命令来预配 .tf 文件中指定的基础架构。

您可以使用 Terraform 和 Firebase 执行哪些操作?

本指南中的通用工作流示例会创建一个新的 Firebase 项目来提供 Android 应用。不过,您可以使用 Terraform 执行更多操作,例如:

  • 使用 Terraform 删除和修改现有基础架构。

  • 使用 Terraform 管理产品专用配置和任务,如:

    • 启用 Firebase Authentication 登录提供方。
    • 创建 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 搭配使用的支持尚处于 Beta 版阶段。若要在生产环境中实践,则需格外谨慎。

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

暂不支持以下功能:

  • 通过 Terraform 配置多重身份验证 (MFA)
  • 通过 Terraform 设置屏蔽函数

Firebase Realtime Database

暂不支持以下功能:

  • 通过 Terraform 部署 Firebase Realtime Database 安全规则(了解如何使用其他工具,包括通过编程方式,来部署这些规则

Cloud Firestore

  • google_firestore_database - 创建 Cloud Firestore 实例

  • google_firestore_index - 为 Cloud Firestore 实现高效查询

  • google_firestore_document - 使用集合中的特定文档初始化 Cloud Firestore 实例

    重要提示:请勿在此种子文档中使用真实的最终用户数据或生产数据。


Cloud Storage for Firebase


Firebase 安全规则(适用于 Cloud Firestore 和 Cloud Storage)

请注意,Firebase Realtime Database 的 Firebase 安全规则使用的是不同的预配系统。

  • google_firebaserules_ruleset - 定义要应用于 Cloud Firestore 实例或 Cloud Storage 存储桶的 Firebase 安全规则

  • google_firebaserules_release - 将特定规则集部署到 Cloud Firestore 实例或 Cloud Storage 存储桶



常见使用场景的 Terraform 示例配置文件



问题排查和常见问题解答