Inizia a utilizzare Terraform e Firebase

Firebase sta iniziando a supportare Terraform. Se fai parte di un team che vuole automatizzare e standardizzare la creazione di progetti Firebase con risorse specifiche di cui è stato eseguito il provisioning e servizi abilitati, l'utilizzo di Terraform con Firebase può essere una buona soluzione.

Il flusso di lavoro di base per l'utilizzo di Terraform con Firebase include quanto segue:

  • Creare e personalizzare un file di configurazione Terraform (un file .tf) che specifica l'infrastruttura da eseguire il provisioning (ovvero le risorse da eseguire il provisioning e i servizi da attivare).

  • Utilizzo dei comandi gcloud CLI che interagiscono con Terraform per eseguire il provisioning dell'infrastruttura specificata nel file .tf.

Che cosa puoi fare con Terraform e Firebase?

L'esempio di flusso di lavoro generalizzato in questa guida è la creazione di un nuovo progetto Firebase con un'app per Android. Tuttavia, puoi fare molto di più con Terraform, ad esempio:

  • Eliminare e modificare l'infrastruttura esistente utilizzando Terraform.

  • Gestisci la configurazione e le attività specifiche del prodotto utilizzando Terraform, ad esempio:

    • Attivazione dei provider di accesso Firebase Authentication.
    • Creazione di bucket o istanze di database Cloud Storage e relativo deployment Firebase Security Rules.

Puoi utilizzare i comandi e i file di configurazione Terraform standard per svolgere tutte queste attività. Per aiutarti, abbiamo fornito file di configurazione Terraform di esempio per diversi scenari di utilizzo comuni.



Flusso di lavoro generalizzato per l'utilizzo di Terraform con Firebase

Prerequisiti

Questa guida è un'introduzione all'utilizzo di Terraform con Firebase, pertanto presuppone una conoscenza di base di Terraform. Prima di iniziare questo flusso di lavoro, assicurati di aver completato i seguenti prerequisiti.

  • Installa Terraform e familiarizza con Terraform utilizzando i tutorial ufficiali.

  • Installa Google Cloud CLI (gcloud CLI). Accedi utilizzando un account utente o un account di servizio.


Passaggio 1: crea e personalizza un file di configurazione Terraform

Un file di configurazione Terraform richiede due sezioni principali (descritte in dettaglio di seguito):

Configurare provider

È necessaria una configurazione di provider indipendentemente dai prodotti o servizi Firebase coinvolti.

  1. Crea un file di configurazione Terraform (ad esempio un file main.tf) nella directory locale.

    In questa guida utilizzerai questo file di configurazione per specificare sia la provider configurazione sia tutta l'infrastruttura che vuoi che Terraform crei. Tieni presente, tuttavia, che hai a disposizione opzioni per includere la configurazione del fornitore.

  2. Includi la seguente configurazione provider nella parte superiore del file main.tf.

    Devi utilizzare il provider google-beta perché si tratta di una versione beta dell'utilizzo di Firebase con Terraform. Presta attenzione durante l'utilizzo in produzione.

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

    Scopri di più sui diversi tipi di attributi relativi al progetto (incluso quello che questa guida definisce "progetto di controllo della quota") quando utilizzi Terraform con Firebase.

  3. Vai alla sezione successiva per completare il file di configurazione e specificare l'infrastruttura da creare.

Specificare l'infrastruttura da creare utilizzando i blocchi resource

Nel file di configurazione Terraform (per questa guida, il file main.tf), devi specificare tutta l'infrastruttura che vuoi che Terraform crei, ovvero tutte le risorse da eseguire il provisioning e tutti i servizi da attivare. In questa guida troverai un elenco completo di tutte le risorse Firebase che supportano Terraform.

  1. Apri il file main.tf.

  2. Nella configurazione di provider, includi la seguente configurazione di blocchi resource.

    Questo esempio di base crea un nuovo progetto Firebase e poi un'app Firebase per Android all'interno del progetto.

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


Passaggio 2: esegui i comandi Terraform per creare l'infrastruttura specificata

Per eseguire il provisioning delle risorse e attivare i servizi specificati nel file main.tf, esegui i seguenti comandi dalla stessa directory del file main.tf. Per informazioni dettagliate su questi comandi, consulta la documentazione di Terraform.

  1. Se è la prima volta che esegui comandi Terraform nella directory, devi inizializzare la directory di configurazione e installare il provider Terraform di Google. A tale scopo, esegui il seguente comando:

    terraform init
  2. Crea l'infrastruttura specificata nel file main.tf eseguendo il seguente comando:

    terraform apply
  3. Verifica che il provisioning o l'attivazione di tutti gli elementi sia stato eseguito come previsto:

    • Opzione 1: visualizza la configurazione stampata nel terminale eseguendo il seguente comando:

      terraform show
    • Opzione 2:visualizza il progetto Firebase nella console Firebase.



Risorse Firebase con supporto Terraform

Le seguenti risorse Firebase e Google sono supportate da Terraform. e ne stiamo aggiungendo di nuove ogni giorno. Pertanto, se non vedi la risorsa che vuoi gestire con Terraform, torna a controllare a breve per vedere se è disponibile o richiedila aprendo un problema nel repository GitHub.


Gestione di progetti e app Firebase

  • google_firebase_project: attiva i servizi Firebase in un progetto Google Cloud esistente

  • App Firebase


Firebase Authentication

Non ancora supportato:

  • Configurazione dell'autenticazione a più fattori (MFA) tramite Terraform

Firebase Realtime Database

Non ancora supportato:

  • Eseguire il deployment di Firebase Realtime Database Security Rules tramite Terraform (scopri come eseguire il deployment di questi Rules utilizzando altri strumenti, incluse le opzioni programmatiche)

Cloud Firestore

  • google_firestore_database: crea un'istanza Cloud Firestore

  • google_firestore_index: consente query efficienti per Cloud Firestore

  • google_firestore_document: inizializza un'istanza Cloud Firestore con un documento specifico in una raccolta

    Importante: non utilizzare dati di produzione o utente finale reali in questo documento di seed.


Cloud Storage for Firebase

  • google_firebase_storage_bucket: consenti di rendere accessibile un bucket Cloud Storage esistente per gli SDK Firebase, l'autenticazione e Firebase Security Rules

  • google_storage_bucket_object: aggiungi un oggetto a un bucket Cloud Storage

    Importante: non utilizzare dati di produzione o utente finale reali in questo file.


Firebase Security Rules (per Cloud Firestore e Cloud Storage)

Tieni presente che Firebase Realtime Database utilizza un sistema di provisioning diverso per il suo Firebase Security Rules.

  • google_firebaserules_ruleset: definisci i Firebase Security Rules da applicare a un'istanza Cloud Firestore o a un Cloud Storage bucket

  • google_firebaserules_release: implementa set di regole specifici in un'istanza Cloud Firestore o in un Cloud Storage bucket


Firebase App Check


Firebase Extensions



File di configurazione Terraform di esempio per casi d'uso comuni



Risoluzione dei problemi e domande frequenti