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 Security Rules。
- 创建 Firebase App Hosting 后端、build 和其他相关资源。
您可以使用标准 Terraform 配置文件和命令来完成所有这些任务。另外,为了帮助您完成这些任务,我们针对几种常见的使用场景提供了 Terraform 示例配置文件。
将 Terraform 与 Firebase 搭配使用的通用工作流
前提条件
本指南介绍如何将 Terraform 与 Firebase 搭配使用,因此假定您已基本掌握 Terraform 的使用。在开始此工作流之前,请确保您已满足以下前提条件。
安装 Terraform 并通过官方教程熟悉 Terraform 的使用。
安装 Google Cloud CLI (gcloud CLI)。使用用户账号或服务账号登录。
第 1 步:创建和自定义 Terraform 配置文件
Terraform 配置文件需要有两个主要构成部分(详见下文):
设置您的 provider
无论涉及哪些 Firebase 产品或服务,都需要进行 provider 设置。
在您的本地目录中创建一个 Terraform 配置文件(如
main.tf文件)。在本指南中,您将使用此配置文件来指定
provider设置以及您希望 Terraform 创建的所有基础架构。但请注意,您可以自行选择添加该提供方设置的方法。在
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 = "~> 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 搭配使用时涉及的不同类型的项目相关特性(包括本指南中称为“配额检查项目”的内容)。
继续下一部分内容,完成配置文件并指定要创建的基础架构。
使用 resource 块指定要创建的基础架构
在 Terraform 配置文件(在本指南中,即为 main.tf 文件)中,需指定您想要 Terraform 创建的所有基础架构(即要预配的所有资源和要启用的所有服务)。本指南中提供了支持 Terraform 的所有 Firebase 资源的完整列表。
打开
main.tf文件。在
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 文档。
如果这是您首次在该目录中运行 Terraform 命令,您需要初始化配置目录并安装 Google Terraform 提供方。为此,请运行以下命令:
terraform init
运行以下命令,创建
main.tf文件中指定的基础架构:terraform apply
通过以下方法,确认所有内容均已按预期预配或启用:
方法 1:运行以下命令,查看在终端中显示的配置输出:
terraform show
方法 2:在 Firebase 控制台中查看您的 Firebase 项目。
支持 Terraform 的 Firebase 资源
以下 Firebase 和 Google 资源现在支持 Terraform。我们还在不断添加更多提供该支持的资源!因此,即便您现在没有看到自己想要通过 Terraform 管理的资源,您可以隔一段时间再来查看,也可以在 GitHub 代码库中提交问题,申请加速对该资源的支持。
Firebase 项目和应用管理
google_firebase_project- 在现有 Google Cloud 项目中启用 Firebase 服务Firebase 应用
google_firebase_apple_app- 创建或管理在 Apple 平台上运行的 Firebase 应用google_firebase_android_app- 创建或管理在 Android 平台上运行的 Firebase 应用google_firebase_web_app- 创建或管理 Web 版 Firebase 应用
Firebase Authentication
google_identity_platform_config- 启用 Google Cloud Identity Platform (GCIP)(即 Firebase Authentication 的后端),并提供项目级身份验证设置若要通过 Terraform 配置 Firebase Authentication,必须启用 GCIP。请务必查看
.tf示例文件,了解如何设置 Firebase Authentication。将要通过 Terraform 启用 GCIP 和/或 Firebase Authentication 的项目必须采用 Blaze 定价方案(也就是说,该项目必须具有关联的 Cloud Billing 账号)。您可以通过在
google_project资源中设置billing_account属性以编程方式关联此账号。此资源还支持更多配置,例如本地登录方法(如匿名、电子邮件地址/密码和电话身份验证),以及屏蔽函数和授权网域。
google_identity_platform_default_supported_idp_config- 配置常见的联合身份提供方(例如 Google、Facebook 或 Apple)identity_platform_oauth_idp_config- 配置任意 OAuth 身份提供方 (IdP) 来源google_identity_platform_inbound_saml_config- 配置 SAML 集成
暂不支持以下功能:
- 通过 Terraform 配置多重身份验证 (MFA)
Firebase App Hosting
google_firebase_app_hosting_backend- 创建和管理 Firebase App Hosting 后端,包括其 GitHub 代码库连接和用于持续部署的实时分支。google_firebase_app_hosting_build- 基于代码库的特定参考标签和时间点为后端创建 build。google_firebase_app_hosting_traffic- 发布 build 或配置持续 GitHub 部署。
Firebase Data Connect
google_firebase_data_connect_service— 创建 Data Connect 服务
Firebase Realtime Database
google_firebase_database_instance— 创建一个 Realtime Database 实例
暂不支持以下功能:
- 通过 Terraform 部署 Firebase Realtime Database Security Rules(了解如何使用其他工具,包括通过编程方式,来部署这些Security Rules)
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 Firestore 和 Cloud Storage)
请注意,Firebase Realtime Database 的 Firebase Security Rules使用的是不同的预配系统。
google_firebaserules_ruleset- 定义适用于 Cloud Firestore 实例或 Cloud Storage 存储桶的 Firebase Security Rulesgoogle_firebaserules_release- 将特定规则集部署到 Cloud Firestore 实例或 Cloud Storage 存储桶