Inizia con Terraform e Firebase

Firebase sta iniziando a supportare Terraform . Se fai parte di un team che desidera automatizzare e standardizzare la creazione di progetti Firebase con risorse specifiche fornite e servizi abilitati, l'utilizzo di Terraform con Firebase può essere una buona soluzione per te.

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

  • Creazione e personalizzazione di un file di configurazione Terraform (un file .tf ) che specifica l'infrastruttura di cui desideri fornire (ovvero, le risorse di cui desideri fornire e i servizi che desideri abilitare).

  • Utilizzo dei comandi CLI di gCloud che si interfacciano con Terraform per effettuare il provisioning dell'infrastruttura specificata nel file .tf .

Cosa puoi fare con Terraform e Firebase?

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

  • Elimina e modifica l'infrastruttura esistente utilizzando Terraform.

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

    • Abilitazione dei provider di accesso per l'autenticazione Firebase.
    • Creazione di bucket Cloud Storage o istanze di database e distribuzione delle regole di sicurezza Firebase per essi.

Puoi utilizzare file di configurazione e comandi Terraform standard per eseguire tutte queste attività. E per aiutarti in questo, abbiamo fornito file di configurazione Terraform di esempio per diversi casi d'uso 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. Assicurati di aver completato i seguenti prerequisiti prima di iniziare questo flusso di lavoro.

  • Installa Terraform e acquisisci familiarità con Terraform utilizzando i tutorial ufficiali.

  • Installa la CLI di Google Cloud (CLI di gCloud). 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 necessita di due sezioni principali (descritte in dettaglio di seguito):

Configura il tuo provider

È necessaria la configurazione di un provider , indipendentemente dai prodotti o servizi Firebase coinvolti.

  1. Crea un file di configurazione Terraform (come il file main.tf ) nella directory locale.

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

  2. Includere 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. Prestare attenzione durante l'utilizzo in produzione.

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

    Scopri di più sui diversi tipi di attributi relativi al progetto (incluso quello che questa guida chiama il "progetto di controllo delle quote") quando utilizzi Terraform con Firebase.

  3. Passa alla sezione successiva per completare il file di configurazione e specificare quale infrastruttura creare.

Specifica quale infrastruttura creare utilizzando i blocchi resource

Nel file di configurazione Terraform (per questa guida, il file main.tf ), devi specificare tutta l'infrastruttura che desideri che Terraform crei (ovvero tutte le risorse di cui desideri fornire e tutti i servizi che desideri abilitare). In questa guida trovi un elenco completo di tutte le risorse Firebase che supportano Terraform .

  1. Apri il file main.tf

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

    Questo esempio di base crea un nuovo progetto Firebase e quindi crea un'app Android Firebase all'interno di quel 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 effettuare il provisioning delle risorse e abilitare 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 Google Terraform. Fallo eseguendo il seguente comando:

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

    terraform apply
  3. Conferma che tutto sia stato sottoposto a provisioning o abilitato come previsto:

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

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



Risorse Firebase con supporto Terraform

Le seguenti risorse Firebase e Google supportano Terraform. E aggiungiamo sempre più risorse! Pertanto, se non vedi la risorsa che desideri gestire con Terraform, controlla presto per vedere se è disponibile o richiedila segnalando un problema nel repository GitHub .


Gestione di progetti e app Firebase

  • google_firebase_project : abilita i servizi Firebase su un progetto Google Cloud esistente

  • google_firebase_project_location : imposta la posizione per le risorse Google Cloud predefinite del progetto

  • App Firebase


Autenticazione Firebase

Non ancora supportato:

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

Database in tempo reale Firebase

Non ancora supportato:

  • Distribuzione delle regole di sicurezza del database Firebase Realtime tramite Terraform (scopri come distribuire queste regole utilizzando altri strumenti, incluse le opzioni programmatiche)

Cloud Fire Store

  • google_firestore_database : crea un'istanza Cloud Firestore

  • google_firestore_index : abilita query efficienti per Cloud Firestore

  • google_firestore_document : invia un seed a un'istanza Cloud Firestore con un documento specifico in una raccolta

    Importante: non utilizzare dati reali relativi all'utente finale o alla produzione in questo documento seed.


Archiviazione nel cloud per Firebase


Regole di sicurezza Firebase (per Cloud Firestore e Cloud Storage)

Tieni presente che Firebase Realtime Database utilizza un sistema di provisioning diverso per le sue regole di sicurezza Firebase.

  • google_firebaserules_ruleset : definisce le regole di sicurezza Firebase che si applicano all'istanza Cloud Firestore o a un bucket Cloud Storage

  • google_firebaserules_release : distribuisci set di regole specifici sull'istanza Cloud Firestore o su un bucket Cloud Storage


Controllo dell'app Firebase


Estensioni Firebase



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



Risoluzione dei problemi e domande frequenti