Начните работу с Terraform и Firebase

Firebase начинает поддерживать Terraform . Если вы работаете в команде, которая хочет автоматизировать и стандартизировать создание проектов Firebase с предоставлением определенных ресурсов и включенными службами, то использование Terraform с Firebase может вам подойти.

Базовый рабочий процесс использования Terraform с Firebase включает следующее:

  • Создание и настройка файла конфигурации Terraform (файла .tf ), в котором указывается инфраструктура, которую вы хотите предоставить (то есть ресурсы, которые вы хотите предоставить, и службы, которые вы хотите включить).

  • Использование команд gcloud CLI , которые взаимодействуют с Terraform для предоставления инфраструктуры, указанной в файле .tf .

Что можно сделать с помощью Terraform и Firebase?

Пример обобщенного рабочего процесса в этом руководстве — создание нового проекта Firebase с приложением Android. Но с Terraform вы можете сделать гораздо больше, например:

  • Удаляйте и изменяйте существующую инфраструктуру с помощью Terraform.

  • Управляйте конфигурацией и задачами, связанными с конкретным продуктом, с помощью Terraform, например:

    • Включение поставщиков Firebase Authentication .
    • Создание контейнеров Cloud Storage или экземпляров базы данных и развертывание для них Firebase Security Rules .
    • Создание бэкэндов, сборок и других связанных ресурсов Firebase App Hosting .

Вы можете использовать стандартные файлы конфигурации Terraform и команды для выполнения всех этих задач. И чтобы помочь вам в этом, мы предоставили примеры файлов конфигурации Terraform для нескольких распространенных вариантов использования.



Обобщенный рабочий процесс использования Terraform с Firebase

Предпосылки

Это руководство представляет собой введение в использование Terraform с Firebase, поэтому оно предполагает базовые навыки работы с Terraform. Убедитесь, что вы выполнили следующие предварительные условия, прежде чем приступить к этому рабочему процессу.

  • Установите Terraform и ознакомьтесь с Terraform, используя официальные руководства.

  • Установите Google Cloud CLI ( gcloud CLI ). Войдите, используя учетную запись пользователя или учетную запись службы .


Шаг 1: Создайте и настройте файл конфигурации Terraform

Файл конфигурации Terraform должен состоять из двух основных разделов (которые подробно описаны ниже):

Настройте своего provider

Настройка provider обязательна независимо от того, какие продукты или службы Firebase используются.

  1. Создайте файл конфигурации Terraform (например, файл main.tf ) в локальном каталоге.

    В этом руководстве вы будете использовать этот файл конфигурации для указания как настройки provider , так и всей инфраструктуры, которую вы хотите, чтобы создал Terraform. Обратите внимание, однако, что у вас есть варианты включения настройки провайдера.

  2. Включите следующую настройку provider в начало файла main.tf

    Вам необходимо использовать провайдера google-beta поскольку это бета-версия использования Firebase с Terraform. Соблюдайте осторожность при использовании в производстве.

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

  3. Перейдите к следующему разделу, чтобы завершить файл конфигурации и указать, какую инфраструктуру следует создать.

Укажите, какую инфраструктуру создать с использованием блоков resource

В вашем файле конфигурации Terraform (в этом руководстве — файл main.tf ) вам необходимо указать всю инфраструктуру, которую вы хотите создать с помощью Terraform (то есть все ресурсы, которые вы хотите предоставить, и все службы, которые вы хотите включить). В этом руководстве вы найдете полный список всех ресурсов Firebase, которые поддерживают Terraform .

  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 .



Ресурсы Firebase с поддержкой Terraform

Следующие ресурсы Firebase и Google поддерживают Terraform. И мы постоянно добавляем новые ресурсы! Так что если вы не видите ресурс, которым хотите управлять с помощью Terraform, то проверьте позже, доступен ли он, или запросите его , отправив запрос в репозиторий GitHub .


Управление проектами и приложениями Firebase

  • google_firebase_project — включить службы Firebase в существующем проекте Google Cloud

  • Приложения Firebase


Firebase Authentication

  • google_identity_platform_config — включить Google Cloud Identity Platform (GCIP) (являющуюся бэкэндом для Firebase Authentication ) и указать параметры аутентификации на уровне проекта

    • Настройка Firebase Authentication через Terraform требует включения GCIP. Обязательно ознакомьтесь с образцом файла .tf , чтобы узнать, как настроить Firebase Authentication .

    • Проект, в котором Terraform включит Firebase Authentication должен быть на тарифном плане Blaze (то есть проект должен иметь связанный аккаунт Cloud Billing ). Это можно сделать программно, установив атрибут billing_account в ресурсе google_project .

    • Этот ресурс также позволяет настраивать больше конфигураций, например, локальные методы входа, такие как анонимный вход, аутентификация по электронной почте/паролю и телефону, а также функции блокировки и авторизованные домены.

  • google_identity_platform_default_supported_idp_config — настройка общих федеративных поставщиков удостоверений, таких как Google, Facebook или Apple

  • identity_platform_oauth_idp_config — настройка произвольных источников поставщика удостоверений OAuth (IdP)

  • google_identity_platform_inbound_saml_config — настройка интеграции SAML

Пока не поддерживается:

  • Настройка многофакторной аутентификации (MFA) через Terraform

Firebase App Hosting

  • google_firebase_app_hosting_backend — создание и управление бэкэндом Firebase App Hosting , включая подключение к репозиторию GitHub и активную ветку для непрерывного развертывания.

  • google_firebase_app_hosting_build — создать сборку для бэкэнда в определенной точке тега ссылки на кодовую базу и в определенный момент времени.

  • google_firebase_app_hosting_traffic — разверните сборку или настройте непрерывное развертывание GitHub.


Firebase Data Connect


Firebase Realtime Database

Пока не поддерживается:

  • Развертывание Firebase Realtime Database Security Rules через Terraform (узнайте, как развернуть эти 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 — определяет Firebase Security Rules , которые применяются к экземпляру Cloud Firestore или контейнеру Cloud Storage

  • google_firebaserules_release — развертывание определенных наборов правил в экземпляре Cloud Firestore или контейнере Cloud Storage


Firebase App Check


Firebase Extensions



Примеры файлов конфигурации Terraform для распространенных случаев использования



Устранение неполадок и часто задаваемые вопросы