Начните работу с 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 .

Для выполнения всех этих задач вы можете использовать стандартные файлы конфигурации и команды 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 = "~> 5.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

Следующие ресурсы Firebase и Google поддерживают Terraform. И мы постоянно добавляем больше ресурсов! Поэтому, если вы не видите ресурс, которым хотите управлять с помощью 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. Обязательно просмотрите образец файла .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

Еще не поддерживается:

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

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



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