Premiers pas avec Terraform et Firebase

Firebase commence à prendre en charge Terraform. Si vous faites partie d'une équipe qui souhaite automatiser et standardiser la création de projets Firebase avec des ressources spécifiques provisionnées et des services activés, l'utilisation de Terraform avec Firebase peut vous convenir.

Le workflow de base pour utiliser Terraform avec Firebase comprend les éléments suivants :

  • Créer et personnaliser un fichier de configuration Terraform (un fichier .tf) qui spécifie l'infrastructure que vous souhaitez provisionner (c'est-à-dire les ressources que vous souhaitez provisionner et les services que vous souhaitez activer).

  • Utiliser des commandes gcloud CLI qui s'interfacent avec Terraform pour provisionner l'infrastructure spécifiée dans le fichier .tf.

Que pouvez-vous faire avec Terraform et Firebase ?

L'exemple de workflow généralisé de ce guide crée un projet Firebase avec une application Android. Mais vous pouvez faire bien plus avec Terraform, par exemple :

  • Supprimer et modifier une infrastructure existante à l'aide de Terraform

  • Gérer la configuration et les tâches spécifiques à un produit à l'aide de Terraform, par exemple :

    • Activation des fournisseurs de connexion Firebase Authentication…
    • Créer des buckets ou des instances de base de données Cloud Storage et déployer Firebase Security Rules pour eux.
    • Création de backends, de builds et d'autres ressources associées Firebase App Hosting.

Vous pouvez utiliser des fichiers de configuration et des commandes Terraform standards pour effectuer toutes ces tâches. Pour vous aider, nous vous fournissons des exemples de fichiers de configuration Terraform pour plusieurs cas d'utilisation courants.



Workflow généralisé pour l'utilisation de Terraform avec Firebase

Conditions préalables

Ce guide est une introduction à l'utilisation de Terraform avec Firebase. Il suppose donc que vous maîtrisez les bases de Terraform. Assurez-vous d'avoir rempli les conditions préalables suivantes avant de commencer ce workflow.

  • Installez Terraform et familiarisez-vous avec Terraform à l'aide des tutoriels officiels.

  • Installez Google Cloud CLI (gcloud CLI). Connectez-vous à l'aide d'un compte utilisateur ou d'un compte de service.


Étape 1 : Créez et personnalisez un fichier de configuration Terraform

Un fichier de configuration Terraform nécessite deux sections principales (décrites en détail ci-dessous) :

Configurer votre provider

Une configuration provider est requise, quels que soient les produits ou services Firebase concernés.

  1. Créez un fichier de configuration Terraform (comme un fichier main.tf) dans votre répertoire local.

    Dans ce guide, vous allez utiliser ce fichier de configuration pour spécifier la configuration de provider et l'ensemble de l'infrastructure que vous souhaitez que Terraform crée. Notez toutefois que vous pouvez inclure la configuration du fournisseur de différentes manières.

  2. Incluez la configuration provider suivante en haut du fichier main.tf.

    Vous devez utiliser le fournisseur google-beta, car il s'agit d'une version bêta de l'utilisation de Firebase avec Terraform. Faites preuve de prudence lorsque vous l'utilisez en production.

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

    En savoir plus sur les différents types d'attributs liés au projet (y compris ce que ce guide appelle le "projet de vérification des quotas") lorsque vous utilisez Terraform avec Firebase.

  3. Passez à la section suivante pour compléter votre fichier de configuration et spécifier l'infrastructure à créer.

Spécifier l'infrastructure à créer à l'aide de blocs resource

Dans votre fichier de configuration Terraform (pour ce guide, votre fichier main.tf), vous devez spécifier toute l'infrastructure que vous souhaitez que Terraform crée (c'est-à-dire toutes les ressources que vous souhaitez provisionner et tous les services que vous souhaitez activer). Ce guide contient la liste complète de toutes les ressources Firebase compatibles avec Terraform.

  1. Ouvrez votre fichier main.tf.

  2. Sous la configuration provider, incluez la configuration suivante des blocs resource.

    Cet exemple de base crée un projet Firebase, puis une application Android Firebase dans ce projet.

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


Étape 2 : Exécutez des commandes Terraform pour créer l'infrastructure spécifiée

Pour provisionner les ressources et activer les services spécifiés dans votre fichier main.tf, exécutez les commandes suivantes à partir du même répertoire que votre fichier main.tf. Pour en savoir plus sur ces commandes, consultez la documentation Terraform.

  1. Si vous exécutez des commandes Terraform pour la première fois dans le répertoire, vous devez initialiser le répertoire de configuration et installer le fournisseur Google Terraform. Pour ce faire, exécutez la commande suivante :

    terraform init
  2. Créez l'infrastructure spécifiée dans votre fichier main.tf en exécutant la commande suivante :

    terraform apply
  3. Vérifiez que tout a été provisionné ou activé comme prévu :

    • Option 1 : affichez la configuration dans votre terminal en exécutant la commande suivante :

      terraform show
    • Option 2 : affichez votre projet Firebase dans la console Firebase.



Ressources Firebase compatibles avec Terraform

Les ressources Firebase et Google suivantes sont compatibles avec Terraform. Et nous en ajoutons de nouvelles en permanence. Si vous ne voyez pas la ressource que vous souhaitez gérer avec Terraform, revenez bientôt pour voir si elle est disponible ou demandez-la en signalant un problème dans le dépôt GitHub.


Gestion des projets et des applications Firebase

  • google_firebase_project : activez les services Firebase sur un projet Google Cloud existant.

  • Applications Firebase


Firebase Authentication

  • google_identity_platform_config : activez Google Cloud Identity Platform (GCIP) (qui est le backend de Firebase Authentication) et fournissez les paramètres d'authentification au niveau du projet.

    • Pour configurer Firebase Authentication via Terraform, vous devez activer GCIP. Consultez l'exemple de fichier .tf pour savoir comment configurer Firebase Authentication.

    • Le projet dans lequel Terraform activera GCIP et/ou Firebase Authentication doit être associé au forfait Blaze (autrement dit, le projet doit être associé à un compte Cloud Billing). Pour ce faire, vous pouvez définir l'attribut billing_account de manière programmatique dans la ressource google_project.

    • Cette ressource permet également d'autres configurations, comme les méthodes de connexion locales (authentification anonyme, par adresse e-mail/mot de passe et par téléphone), ainsi que les fonctions de blocage et les domaines autorisés.

  • google_identity_platform_default_supported_idp_config : configurez des fournisseurs d'identité fédérée courants, comme Google, Facebook ou Apple.

  • identity_platform_oauth_idp_config : configurez des sources de fournisseurs d'identité (IdP) OAuth arbitraires.

  • google_identity_platform_inbound_saml_config : configurer des intégrations SAML

Pas encore compatible :

  • Configurer l'authentification multifacteur (MFA) via Terraform

Firebase App Hosting


Firebase SQL Connect


Firebase Realtime Database

Pas encore compatible :

  • Déployer Firebase Realtime Database Security Rules via Terraform (découvrez comment déployer ces Security Rules à l'aide d'autres outils, y compris des options programmatiques)

Cloud Firestore

  • google_firestore_database : crée une instance Cloud Firestore.

  • google_firestore_index : activez les requêtes efficaces pour Cloud Firestore.

  • google_firestore_document : amorcer une instance Cloud Firestore avec un document spécifique d'une collection

    Important : N'utilisez pas de données réelles d'utilisateurs finaux ou de production dans ce document d'amorçage.


Cloud Storage for Firebase

  • google_firebase_storage_bucket : rendre un bucket Cloud Storage existant accessible pour les SDK Firebase, l'authentification et Firebase Security Rules

  • google_storage_bucket_object : ajoute un objet à un bucket Cloud Storage.

    Important : N'utilisez pas de données réelles d'utilisateurs finaux ni de données de production dans ce fichier.


Firebase Security Rules (pour Cloud Firestore et Cloud Storage)

Notez que Firebase Realtime Database utilise un système de provisionnement différent pour son Firebase Security Rules.

  • google_firebaserules_ruleset : définissez les Firebase Security Rules qui s'appliquent à une instance Cloud Firestore ou à un bucket Cloud Storage.

  • google_firebaserules_release : déployez des ensembles de règles spécifiques sur une instance Cloud Firestore ou un bucket Cloud Storage.


Firebase App Check


Firebase Extensions



Exemples de fichiers de configuration Terraform pour des cas d'utilisation courants



Dépannage et FAQ