Comience con Terraform y Firebase

Firebase está comenzando a admitir Terraform . Si estás en un equipo que desea automatizar y estandarizar la creación de proyectos de Firebase con recursos específicos aprovisionados y servicios habilitados, entonces usar Terraform con Firebase puede ser una buena opción para ti.

El flujo de trabajo básico para usar Terraform con Firebase incluye lo siguiente:

  • Crear y personalizar un archivo de configuración de Terraform (un archivo .tf ) que especifica la infraestructura que desea aprovisionar (es decir, los recursos que desea aprovisionar y los servicios que desea habilitar).

  • Usar comandos de la CLI de gCloud que interactúen con Terraform para aprovisionar la infraestructura especificada en el archivo .tf .

¿Qué puedes hacer con Terraform y Firebase?

El flujo de trabajo generalizado de ejemplo en esta guía es la creación de un nuevo proyecto de Firebase con una aplicación de Android. Pero puedes hacer mucho más con Terraform, como por ejemplo:

  • Elimine y modifique la infraestructura existente utilizando Terraform.

  • Administre la configuración y las tareas específicas del producto utilizando Terraform, como:

    • Habilitar proveedores de inicio de sesión de Firebase Authentication.
    • Crear depósitos de Cloud Storage o instancias de bases de datos e implementar reglas de seguridad de Firebase para ellos.

Puede utilizar archivos de configuración y comandos estándar de Terraform para realizar todas estas tareas. Y para ayudarle con esto, proporcionamos archivos de configuración de Terraform de muestra para varios casos de uso comunes.



Flujo de trabajo generalizado para usar Terraform con Firebase

Requisitos previos

Esta guía es una introducción al uso de Terraform con Firebase, por lo que supone un dominio básico de Terraform. Asegúrese de haber completado los siguientes requisitos previos antes de iniciar este flujo de trabajo.

  • Instale Terraform y familiarícese con Terraform utilizando sus tutoriales oficiales.

  • Instale la CLI de Google Cloud (gCloud CLI). Inicie sesión utilizando una cuenta de usuario o una cuenta de servicio .


Paso 1: crear y personalizar un archivo de configuración de Terraform

Un archivo de configuración de Terraform necesita dos secciones principales (que se describen en detalle a continuación):

Configura tu provider

Se requiere la configuración de un provider sin importar qué productos o servicios de Firebase estén involucrados.

  1. Cree un archivo de configuración de Terraform (como el archivo main.tf ) en su directorio local.

    En esta guía, utilizará este archivo de configuración para especificar tanto la configuración del provider como toda la infraestructura que desea que cree Terraform. Sin embargo, tenga en cuenta que tiene opciones sobre cómo incluir la configuración del proveedor.

  2. Incluya la siguiente configuración provider en la parte superior del archivo main.tf

    Debe utilizar el proveedor google-beta porque esta es una versión beta del uso de Firebase con Terraform. Tenga cuidado al utilizarlo en producción.

    # Terraform configuration to set up providers by version.
    terraform {
      required_providers {
        google-beta = {
          source  = "hashicorp/google-beta"
          version = "~> 4.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
    }
    

    Obtenga más información sobre los diferentes tipos de atributos relacionados con el proyecto (incluido lo que esta guía llama "proyecto de verificación de cuotas") cuando utilice Terraform con Firebase.

  3. Continúe con la siguiente sección para completar su archivo de configuración y especificar qué infraestructura crear.

Especificar qué infraestructura crear utilizando bloques resource

En su archivo de configuración de Terraform (para esta guía, su archivo main.tf ), debe especificar toda la infraestructura que desea que Terraform cree (es decir, todos los recursos que desea aprovisionar y todos los servicios que desea habilitar). En esta guía, encontrará una lista completa de todos los recursos de Firebase que admiten Terraform .

  1. Abra su archivo main.tf

  2. En la configuración del provider , incluya la siguiente configuración de bloques resource .

    Este ejemplo básico crea un nuevo proyecto de Firebase y luego crea una aplicación Firebase para Android dentro de ese proyecto.

    # 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,
      ]
    }
    


Paso 2: Ejecute los comandos de Terraform para crear la infraestructura especificada

Para aprovisionar los recursos y habilitar los servicios especificados en su archivo main.tf , ejecute los siguientes comandos desde el mismo directorio que su archivo main.tf Para obtener información detallada sobre estos comandos, consulte la documentación de Terraform .

  1. Si es la primera vez que ejecuta comandos de Terraform en el directorio, debe inicializar el directorio de configuración e instalar el proveedor de Google Terraform. Haga esto ejecutando el siguiente comando:

    terraform init
  2. Cree la infraestructura especificada en su archivo main.tf ejecutando el siguiente comando:

    terraform apply
  3. Confirme que todo fue aprovisionado o habilitado como se esperaba:

    • Opción 1: Vea la configuración impresa en su terminal ejecutando el siguiente comando:

      terraform show
    • Opción 2: ver tu proyecto de Firebase en Firebase console .



Recursos de Firebase con soporte Terraform

Los siguientes recursos de Firebase y Google son compatibles con Terraform. ¡Y estamos agregando más recursos todo el tiempo! Entonces, si no ve el recurso que desea administrar con Terraform, vuelva pronto para ver si está disponible o solicítelo presentando un problema en el repositorio de GitHub .


Gestión de proyectos y aplicaciones de Firebase

  • google_firebase_project : habilita los servicios de Firebase en un proyecto de Google Cloud existente

  • google_firebase_project_location : establece la ubicación de los recursos predeterminados de Google Cloud del proyecto.

  • Aplicaciones de base de fuego


Autenticación de base de fuego

Aún no compatible:

  • Configuración de la autenticación multifactor (MFA) a través de Terraform

Base de datos en tiempo real de Firebase

Aún no compatible:

  • Implementación de reglas de seguridad de bases de datos en tiempo real de Firebase a través de Terraform (aprenda cómo implementar estas reglas utilizando otras herramientas, incluidas opciones programáticas)

Tienda de fuego en la nube

  • google_firestore_database : crea una instancia de Cloud Firestore

  • google_firestore_index : habilita consultas eficientes para Cloud Firestore

  • google_firestore_document : genera una instancia de Cloud Firestore con un documento específico en una colección

    Importante: No utilice datos reales del usuario final o de producción en este documento inicial.


Almacenamiento en la nube para Firebase


Reglas de seguridad de Firebase (para Cloud Firestore y Cloud Storage)

Tenga en cuenta que Firebase Realtime Database utiliza un sistema de aprovisionamiento diferente para sus reglas de seguridad de Firebase.

  • google_firebaserules_ruleset : define las reglas de seguridad de Firebase que se aplican a la instancia de Cloud Firestore o a un depósito de Cloud Storage.

  • google_firebaserules_release : implementa conjuntos de reglas específicos en la instancia de Cloud Firestore o en un depósito de Cloud Storage


Verificación de la aplicación Firebase


Extensiones de base de fuego



Archivos de configuración de Terraform de muestra para casos de uso comunes



Solución de problemas y preguntas frecuentes