Начало работы с 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, а затем в нем создается приложение Android для Firebase.

    # 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

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


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

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

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

    • google_firebase_apple_app – создание приложений Firebase для платформ Apple и управление ими.
    • google_firebase_android_app – создание приложений Firebase для Android и управление ими.
    • google_firebase_web_app – создание веб-приложения Firebase и управление им.

Firebase Authentication

  • google_identity_platform_config – включите Google Cloud Identity Platform (GCIP), который является серверной частью для Firebase Authentication, и задайте настройки аутентификации на уровне проекта.

    • Чтобы настроить Firebase Authentication через Terraform, необходимо включить GCIP. Чтобы узнать, как настроить Firebase Authentication, изучите пример файла .tf.

    • Проект, в котором 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.

  • 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 SQL 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 доступным для 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 для распространенных сценариев использования



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