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 être une bonne solution pour vous.

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

  • Créez et personnalisez un fichier de configuration Terraform (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 les commandes gcloud CLI qui interagissent 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. Toutefois, vous pouvez faire beaucoup plus avec Terraform, par exemple :

  • Supprimez et modifiez l'infrastructure existante à l'aide de Terraform.

  • Gérez la configuration et les tâches spécifiques aux produits à l'aide de Terraform, par exemple :

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

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



Workflow généralisé pour utiliser 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 cet outil à l'aide de ses 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 doit comporter 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 (tel qu'un fichier main.tf) dans votre répertoire local.

    Dans ce guide, vous utiliserez ce fichier de configuration pour spécifier à la fois la configuration provider et toute l'infrastructure que vous souhaitez que Terraform crée. Notez toutefois que vous avez le choix de la manière dont vous incluez la configuration du fournisseur.

  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. Soyez prudent 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 aux projets (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 finaliser 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 (main.tf pour ce guide), 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 les 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 dans le répertoire pour la première fois, 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. Nous ajoutons des ressources en permanence. Par conséquent, 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 avec Terraform, vous devez activer GCIP. Veillez à consulter 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é à la formule tarifaire Blaze (c'est-à-dire que le projet doit être associé à un compte Cloud Billing). Vous pouvez le faire de manière programmatique en définissant l'attribut billing_account dans la ressource google_project.

    • Cette ressource permet également d'effectuer davantage de configurations, comme les méthodes de connexion locales (authentification anonyme, par 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 les fournisseurs d'identité fédérée courants, comme Google, Facebook ou Apple.

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

  • google_identity_platform_inbound_saml_config : configurer les intégrations SAML

Pas encore compatible :

  • Configurer l'authentification multifacteur (MFA) avec Terraform

Firebase App Hosting


Firebase Data Connect


Firebase Realtime Database

Pas encore compatible :

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

Cloud Firestore

  • google_firestore_database : créez une instance Cloud Firestore.

  • google_firestore_index : permet d'effectuer des requêtes efficaces pour Cloud Firestore

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

    Important : N'utilisez pas de données de production ni de données réelles d'utilisateur final dans ce document de départ.


Cloud Storage for Firebase

  • google_firebase_storage_bucket : rendre un bucket Cloud Storage existant accessible aux 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 de production ni de données d'utilisateurs finaux réelles 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 ses Firebase Security Rules.

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

  • google_firebaserules_release : déployer 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 questions fréquentes