Comienza a usar Terraform y Firebase

Firebase comenzará a ser compatible con Terraform. Si perteneces a un equipo que desea automatizar y estandarizar la creación de proyectos de Firebase con recursos específicos aprovisionados y servicios habilitados, usar Terraform con Firebase es una buena opción para ti.

El flujo de trabajo básico para usar Terraform con Firebase incluye las siguientes tareas:

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

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

¿Qué puedes hacer con Terraform y Firebase?

El ejemplo de flujo de trabajo generalizado en esta guía consiste en crear un nuevo proyecto de Firebase con una app para Android. Sin embargo, puedes hacer mucho más con Terraform, por ejemplo:

  • Borrar y modificar la infraestructura existente con Terraform

  • Administrar parámetros de configuración y tareas específicas de productos con Terraform, como en los siguientes ejemplos:

    • Habilitar los proveedores de acceso de Firebase Authentication
    • Crear buckets de Cloud Storage o instancias de bases de datos y, luego, implementar reglas de seguridad de Firebase para ellos

Puedes usar comandos y archivos de configuración estándar de Terraform para realizar todas estas tareas. A fin de ayudarte 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 se supone que tienes conocimientos básicos sobre Terraform. Asegúrate de que cumples con los siguientes requisitos previos antes de comenzar este flujo de trabajo.

  • Instala Terraform y familiarízate con él mediante sus instructivos oficiales.

  • Instala Google Cloud CLI (gcloud CLI). Accede con una cuenta de usuario o una cuenta de servicio.


Paso 1: Crea y personaliza 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 una configuración de provider, sin importar los productos o servicios de Firebase que participen.

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

    En esta guía, usarás este archivo de configuración para especificar la configuración de provider y toda la infraestructura que deseas que cree Terraform. Sin embargo, ten en cuenta que tienes opciones para incluir la configuración del proveedor.

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

    Debes usar el proveedor google-beta porque esta es una versión beta de cómo usar Firebase con Terraform. Ten cuidado cuando lo uses 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
    }
    

    Obtén más información sobre los diferentes tipos de atributos relacionados con el proyecto (incluido lo que en esta guía se llama el “proyecto de verificación de cuotas”) cuando usas Terraform con Firebase.

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

Especifica qué infraestructura crear con bloques resource

En tu archivo de configuración de Terraform (para esta guía, tu archivo main.tf), debes especificar toda la infraestructura que deseas que Terraform cree (es decir, todos los recursos que deseas aprovisionar y todos los servicios que deseas habilitar). En esta guía, encontrarás una lista completa de todos los recursos de Firebase que son compatibles con Terraform.

  1. Abre el archivo main.tf.

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

    En este ejemplo básico, se crea un proyecto de Firebase nuevo y, luego, una app para Android de Firebase 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: Ejecuta los comandos de Terraform para crear la infraestructura especificada

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

  1. Si es la primera vez que ejecutas comandos de Terraform en el directorio, debes inicializar el directorio de configuración y, luego, instalar el proveedor de Google Terraform. Para ello, ejecuta el siguiente comando:

    terraform init
  2. Ejecuta el siguiente comando para crear la infraestructura especificada en el archivo main.tf:

    terraform apply
  3. Confirma que todo esté aprovisionado o habilitado como se esperaba:

    • Opción 1: Ejecuta el siguiente comando para ver la configuración impresa en la terminal:

      terraform show
    • Opción 2: Consulta el proyecto de Firebase en Firebase console.



Recursos de Firebase compatibles con Terraform

Los siguientes recursos de Firebase y Google son compatibles con Terraform. Además, agregamos más recursos todo el tiempo. Por lo tanto, si no ves el recurso que quieres administrar con Terraform, vuelve a consultar pronto para ver si está disponible o solicítalo presentando un problema en el repositorio de GitHub.


Administración de apps y proyectos de Firebase

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

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

  • Apps de Firebase


Firebase Authentication

Aún no se admite:

  • Configurar la autenticación de varios factores (MFA) con Terraform
  • Configurar funciones de bloqueo mediante Terraform

Firebase Realtime Database

Aún no se admite:

  • Implementar reglas de seguridad de Firebase Realtime Database mediante Terraform (obtén información para implementar estas reglas con otras herramientas, incluidas las opciones programáticas)

Cloud Firestore

  • google_firestore_database: Crea una instancia de Cloud Firestore

  • google_firestore_index: Habilita consultas eficaces para Cloud Firestore.

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

    Importante: No uses datos reales de usuario final o de producción en este documento de origen.


Cloud Storage para Firebase


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

Ten en cuenta que Firebase Realtime Database usa 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 bucket de Cloud Storage.

  • google_firebaserules_release: Implementa conjuntos de reglas específicos en la instancia de Cloud Firestore o en un bucket de Cloud Storage.



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



Solución de problemas y preguntas frecuentes