Начните работу с 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 и ознакомьтесь с его возможностями, используя официальные руководства.

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


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

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

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

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

  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 = "~> 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 будет включать GCIP и/или 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

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

  • Настройка многофакторной аутентификации (МФА) с помощью 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 (узнайте, как развернуть эти 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 доступным для SDK Firebase, аутентификации и 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 для распространенных сценариев использования.



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