Premiers pas avec Terraform et Firebase
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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 ?
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.
Afficher les exigences concernant les comptes utilisateur et les comptes de service
Si vous utilisez un compte utilisateur, vous devez avoir accepté les conditions d'utilisation de Firebase. Vous avez accepté les conditions d'utilisation de Firebase si vous pouvez afficher un projet Firebase dans la console Firebase.
Pour que Terraform puisse effectuer certaines actions (par exemple, créer des projets), les conditions suivantes doivent être remplies :
L'utilisateur ou le compte de service doit disposer de l'accès IAM applicable pour ces actions.
Si l'utilisateur ou le compte de service fait partie d'une organisation Google Cloud, les règles d'administration doivent autoriser le compte à effectuer ces actions.
É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) :
Une configuration provider est requise, quels que soient les produits ou services Firebase concernés.
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.
Afficher les options permettant d'inclure la configuration de provider
Vous disposez des options suivantes pour inclure une configuration provider au reste de votre configuration Terraform :
Option 1 : incluez-le en haut d'un seul fichier de configuration Terraform .tf (comme indiqué dans ce guide).
Utilisez cette option si vous débutez avec Terraform ou si vous essayez simplement Terraform avec Firebase.
Option 2 : incluez-le dans un fichier .tf distinct (comme un fichier provider.tf), en dehors du fichier .tf dans lequel vous spécifiez l'infrastructure à créer (comme un fichier main.tf).
Utilisez cette option si vous faites partie d'une équipe plus importante qui doit standardiser la configuration.
Lors de l'exécution des commandes Terraform, les fichiers provider.tf et main.tf doivent se trouver dans le même répertoire.
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.
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.
Ouvrez votre fichier main.tf.
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_overridename="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_overrideproject=google_project.default.project_idfor_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-betaproject=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-betaproject=google_project.default.project_iddisplay_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,]}
Afficher une version très annotée de cet exemple de fichier de configuration
Si vous ne connaissez pas l'infrastructure des projets et des applications en tant que ressources, consultez la documentation suivante :
# 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"{ # Use the provider that enables the setup of quota checks for a new projectprovider=google-beta.no_user_project_overridename="Project Display Name" // learn more about the project nameproject_id="project-id-for-new-project" // learn more about the project ID # 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" // learn more about the Firebase-enabled label}}# Enables required APIs.resource"google_project_service""default"{ # Use the provider without quota checks for enabling APISprovider=google-beta.no_user_project_overrideproject=google_project.default.project_idfor_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.# This action essentially "creates a Firebase project" and allows the project to use# Firebase services (like Firebase Authentication) and# Firebase tooling (like the Firebase console).# Learn more about the relationship between Firebase projects and Google Cloud.resource"google_firebase_project""default"{ # Use the provider that performs quota checks from now onprovider=google-betaproject=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.# Learn more about the relationship between Firebase Apps and Firebase projects.resource"google_firebase_android_app""default"{provider=google-betaproject=google_project.default.project_iddisplay_name="My Awesome Android app" # learn more about an app's display namepackage_name="awesome.package.name" # learn more about an app's 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.
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
Créez l'infrastructure spécifiée dans votre fichier main.tf en exécutant la commande suivante :
terraform apply
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.
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.
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.
Configurer l'authentification multifacteur (MFA) via Terraform
Firebase App Hosting
google_firebase_app_hosting_backend : créez et gérez un backend Firebase App Hosting, y compris sa connexion au dépôt GitHub et sa branche active pour le déploiement continu.
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)
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
Exemples de fichiers de configuration Terraform pour des cas d'utilisation courants
Configurer Firebase Authentication avec GCIP
Cette configuration crée un projet Google Cloud, l'associe à un compte Cloud Billing (le forfait Blaze est requis pour Firebase Authentication avec GCIP), active les services Firebase pour le projet, configure Firebase Authentication avec GCIP et enregistre trois types d'applications différents avec le projet.
Notez que l'activation de GCIP est requise pour configurer Firebase Authentication via Terraform.
# Creates a new Google Cloud project.resource"google_project""auth"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for Firebase Authentication with GCIP).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""auth"{provider=google-beta.no_user_project_overrideproject=google_project.auth.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","identitytoolkit.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""auth"{provider=google-betaproject=google_project.auth.project_iddepends_on=[google_project_service.auth,]}# Creates an Identity Platform config.# Also enables Firebase Authentication with Identity Platform in the project if not.resource"google_identity_platform_config""auth"{provider=google-betaproject=google_firebase_project.auth.project # Auto-deletes anonymous usersautodelete_anonymous_users=true # Configures local sign-in methods, like anonymous, email/password, and phone authentication.sign_in{allow_duplicate_emails=trueanonymous{enabled=true}email{enabled=truepassword_required=false}phone_number{enabled=truetest_phone_numbers={"+11231231234"="000000"}}} # Sets an SMS region policy.sms_region_config{allowlist_only{allowed_regions=["US","CA",]}} # Configures blocking functions.blocking_functions{triggers{event_type="beforeSignIn"function_uri="https://us-east1-${google_project.auth.project_id}.cloudfunctions.net/before-sign-in"}forward_inbound_credentials{refresh_token=trueaccess_token=trueid_token=true}} # Configures a temporary quota for new signups for anonymous, email/password, and phone number.quota{sign_up_quota_config{quota=1000start_time=""quota_duration="7200s"}} # Configures authorized domains.authorized_domains=["localhost","${google_project.auth.project_id}.firebaseapp.com","${google_project.auth.project_id}.web.app",]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Web app"}
Provisionner un service Firebase SQL Connect
Cette configuration crée un projet Google Cloud, active les services Firebase pour le projet et provisionne un service SQL Connect.
# Creates a new Google Cloud project.resource"google_project""dataconnect"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Data Connect).billing_account="000000-000000-000000" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.dataconnect.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedataconnect.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 earlier.resource"google_firebase_project""dataconnect"{provider=google-betaproject=google_project.dataconnect.project_iddepends_on=[google_project_service.services]}# Create a Firebase Data Connect serviceresource"google_firebase_data_connect_service""dataconnect-default"{project=google_firebase_project.dataconnect.projectlocation="name-of-region-for-service"service_id="${google_firebase_project.dataconnect.project}-default-fdc"deletion_policy="DEFAULT"}
Provisionner l'instance Firebase Realtime Database par défaut
Cette configuration crée un projet Google Cloud, active les services Firebase pour le projet, provisionne l'instance Realtime Database par défaut du projet et enregistre trois types d'applications différents avec le projet.
# Creates a new Google Cloud project.resource"google_project""rtdb"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""rtdb"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.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""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddepends_on=[google_project_service.rtdb]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database"{provider=google-betaproject=google_firebase_project.rtdb.project # See available locations: https://firebase.google.com/docs/database/locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb.project_id}-default-rtdb"type="DEFAULT_DATABASE"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Web app"}
Provisionner plusieurs instances Firebase Realtime Database
Cette configuration crée un projet Google Cloud, l'associe à un compte Cloud Billing (le forfait Blaze est requis pour plusieurs instances Realtime Database), active les services Firebase pour le projet, provisionne plusieurs instances Realtime Database (y compris l'instance Realtime Database par défaut du projet) et enregistre trois types d'applications différents dans le projet.
# Creates a new Google Cloud project.resource"google_project""rtdb-multi"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for multiple Realtime Database instances).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""rtdb-multi"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.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""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddepends_on=[google_project_service.rtdb-multi]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database-default"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # See available locations: https://firebase.google.com/docs/database/locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb-multi.project_id}-default-rtdb"type="DEFAULT_DATABASE"}# Provisions an additional Realtime Database instance.resource"google_firebase_database_instance""database-additional"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations # This location doesn't need to be the same as the default database instance.region="name-of-region" # This value will become the first segment of the database's URL.instance_id="name-of-additional-database-instance"type="USER_DATABASE"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Web app"}
Provisionner l'instance Cloud Firestore par défaut
Cette configuration crée un projet Google Cloud, active les services Firebase pour le projet, provisionne l'instance Cloud Firestore par défaut du projet et enregistre trois types d'applications différents avec le projet.
Il provisionne également Firebase Security Rules pour l'instance Cloud Firestore par défaut, crée un index Cloud Firestore et ajoute un document Cloud Firestore avec des données de départ.
# Creates a new Google Cloud project.resource"google_project""firestore"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""firestore"{provider=google-beta.no_user_project_overrideproject=google_project.firestore.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firestore.googleapis.com","firebaserules.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""firestore"{provider=google-betaproject=google_project.firestore.project_iddepends_on=[google_project_service.firestore]}# Provisions the Firestore database instance.resource"google_firestore_database""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectname="(default)" # See available locations: https://firebase.google.com/docs/firestore/locationslocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC"}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore"{provider=google-betaproject=google_firestore_database.firestore.projectsource{files{name="firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-startedcontent=file("firestore.rules")}}}# Releases the ruleset for the Firestore instance.resource"google_firebaserules_release""firestore"{provider=google-betaname="cloud.firestore" # must be cloud.firestoreruleset_name=google_firebaserules_ruleset.firestore.nameproject=google_firestore_database.firestore.project}# Adds a new Firestore index.resource"google_firestore_index""indexes"{provider=google-betaproject=google_firestore_database.firestore.projectcollection="quiz"query_scope="COLLECTION"fields{field_path="question"order="ASCENDING"}fields{field_path="answer"order="ASCENDING"}}# Adds a new Firestore document with seed data.# Don't use real end-user or production data in this seed document.resource"google_firestore_document""doc"{provider=google-betaproject=google_firestore_database.firestore.projectcollection="quiz"document_id="question-1"fields="{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Web app"}
Il s'agit de l'ensemble de règles de Cloud Firestore Security Rules qui doit se trouver dans un fichier local nommé firestore.rules.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /some_collection/{document} {
allow read, create, update: if request.auth != null;
}
}
}
Provisionner le bucket Cloud Storage par défaut
Provisionner des buckets Cloud Storage supplémentaires
Cette configuration crée un projet Google Cloud, l'associe à un compte Cloud Billing (le forfait Blaze est requis pour les buckets supplémentaires), active les services Firebase pour le projet, provisionne des buckets Cloud Storage supplémentaires non définis par défaut et enregistre trois types d'applications différents dans le projet.
Il provisionne également Firebase Security Rules pour chaque bucket Cloud Storage et importe un fichier dans l'un des buckets Cloud Storage.
# Creates a new Google Cloud project.resource"google_project""storage-multi"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for multiple Cloud Storage buckets).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""storage-multi"{provider=google-beta.no_user_project_overrideproject=google_project.storage-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.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""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddepends_on=[google_project_service.storage-multi]}# Provisions a Cloud Storage bucket.resource"google_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locationslocation="name-of-region-for-bucket"}# Provisions an additional Cloud Storage bucket.resource"google_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-additional-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locations # This location does not need to be the same as the existing Storage bucket.location="name-of-region-for-additional-bucket"}# Makes the first Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-1.name}# Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-2.name}# Creates a ruleset of Firebase Security Rules from a local file.resource"google_firebaserules_ruleset""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectsource{files{ # Write security rules in a local file named "storage.rules" # Learn more: https://firebase.google.com/docs/storage/security/get-startedname="storage.rules"content=file("storage.rules")}}}# Releases the ruleset to the first Storage bucket.resource"google_firebaserules_release""bucket-1"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-1.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Releases the ruleset to the additional Storage bucket.resource"google_firebaserules_release""bucket-2"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-2.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Uploads a new file to the first Storage bucket.# Do not use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture-multi"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_storage_bucket.bucket-1.name}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Web app"}
Il s'agit de l'ensemble de règles de Cloud Storage Security Rules qui doit se trouver dans un fichier local nommé storage.rules.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /some_folder/{fileName} {
allow read, write: if request.auth != null;
}
}
}
Protéger une ressource d'API avec Firebase App Check
Cette configuration crée un projet Google Cloud, active les services Firebase pour le projet, puis configure et active l'application de Firebase App Check pour Cloud Firestore afin qu'il ne soit accessible que depuis votre application Android.
# Creates a new Google Cloud project.resource"google_project""appcheck"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.appcheck.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseappcheck.googleapis.com","firestore.googleapis.com","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 earlier.resource"google_firebase_project""appcheck"{provider=google-betaproject=google_project.appcheck.project_iddepends_on=[google_project_service.services]}# Provisions the Firestore database instance.resource"google_firestore_database""database"{provider=google-betaproject=google_firebase_project.appcheck.projectname="(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-locationlocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectdisplay_name="Play Integrity app"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Register the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectapp_id=google_firebase_android_app.appcheck.app_iddepends_on=[google_firestore_database.database]lifecycle{precondition{condition=length(google_firebase_android_app.appcheck.sha256_hashes) > 0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}}# Enable enforcement of App Check for Firestoreresource"google_firebase_app_check_service_config""firestore"{provider=google-betaproject=google_firebase_project.appcheck.projectservice_id="firestore.googleapis.com"depends_on=[google_project_service.services]}
Installer une instance d'un Firebase Extension
Cette configuration crée un projet Google Cloud, active les services Firebase pour le projet et installe une nouvelle instance de Firebase Extension dans le projet. Si l'instance existe déjà, ses paramètres sont mis à jour en fonction des valeurs fournies dans la configuration.
# Creates a new Google Cloud project.resource"google_project""extensions"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Extensions).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""extensions"{provider=google-beta.no_user_project_overrideproject=google_project.extensions.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firebase.googleapis.com","firebaseextensions.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""extensions"{provider=google-betaproject=google_project.extensions.project_iddepends_on=[google_project_service.extensions,]}# Installs an instance of the "Translate Text in Firestore" extension.# Or updates the extension if the specified instance already exists.resource"google_firebase_extensions_instance""translation"{provider=google-betaproject=google_firebase_project.extensions.projectinstance_id="translate-text-in-firestore"config{extension_ref="firebase/firestore-translate-text"params={COLLECTION_PATH="posts/comments/translations"DO_BACKFILL=trueLANGUAGES="ar,en,es,de,fr"INPUT_FIELD_NAME="input"LANGUAGES_FIELD_NAME="languages"OUTPUT_FIELD_NAME="translated"}system_params={"firebaseextensions.v1beta.function/location"="us-central1""firebaseextensions.v1beta.function/memory"="256""firebaseextensions.v1beta.function/minInstances"="0""firebaseextensions.v1beta.function/vpcConnectorEgressSettings"="VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED"}}}
Activer et protéger Firebase AI Logic
Cette configuration crée un projet Google Cloud, active les services Firebase pour le projet, y compris Firebase AI Logic, et configure et active l'application de Firebase App Check pour Firebase AI Logic afin qu'il ne soit accessible qu'à partir de vos applications.
# Creates a new Google Cloud project.resource"google_project""vertex"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for Vertex AI in Firebase).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.vertex.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","serviceusage.googleapis.com", # Required APIs for Vertex AI in Firebase"aiplatform.googleapis.com","firebasevertexai.googleapis.com", # App Check is recommended to protect Vertex AI in Firebase from abuse"firebaseappcheck.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 earlier.resource"google_firebase_project""vertex"{provider=google-betaproject=google_project.vertex.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Web App"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Android App"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Creates a Firebase Apple App in the new project created earlier.resource"google_firebase_apple_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Apple App"bundle_id="bundle.id"team_id="1234567890"}### Protects Vertex AI in Firebase with App Check.# Turns on enforcement for Vertex AI in Firebaseresource"google_firebase_app_check_service_config""vertex"{provider=google-betaproject=google_firebase_project.vertex.projectservice_id="firebaseml.googleapis.com"enforcement_mode="ENFORCED"}# Enables the reCAPTCHA Enterprise APIresource"google_project_service""recaptcha_enterprise"{provider=google-betaproject=google_firebase_project.vertex.projectservice="recaptchaenterprise.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables the Play Integrity APIresource"google_project_service""play_integrity"{provider=google-betaproject=google_firebase_project.vertex.projectservice="playintegrity.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Allows the web app to use reCAPTCHA Enterprise with App Checkresource"google_firebase_app_check_recaptcha_enterprise_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_web_app.app.app_idsite_key="your site key"token_ttl="7200s" # Optionaldepends_on=[google_project_service.recaptcha_enterprise]}# Registers the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_android_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=length(google_firebase_android_app.app.sha256_hashes) > 0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}depends_on=[google_project_service.play_integrity]}# Registers the Apple app with the AppAttest providerresource"google_firebase_app_check_app_attest_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_apple_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=google_firebase_apple_app.app.team_id!=""error_message="Provide a Team ID on the Apple App to use App Check"}}}
Provisionner manuellement un backend App Hosting
Cette configuration montre comment provisionner manuellement un backend App Hosting à l'aide de Terraform. Cette approche vous permet de contrôler précisément les ressources créées, mais vous oblige à définir chaque ressource individuellement. Cela est utile lorsque vous devez personnaliser le backend au-delà des options par défaut.
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","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 earlier.resource"google_firebase_project""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}# Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS"service_account=google_service_account.service_account.email}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Creates a Buildresource"google_firebase_app_hosting_build""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idbuild_id="my-build"source{container{ # TODO: use your own imageimage="us-docker.pkg.dev/cloudrun/container/hello"}}}# Rolls out the Buildresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idtarget{splits{build=google_firebase_app_hosting_build.example.namepercent=100}}}
Provisionner un backend App Hosting à l'aide de GitHub
Cette configuration montre comment provisionner un backend App Hosting à l'aide du code d'application stocké dans un dépôt GitHub. Cette approche vous permet de gérer et de mettre à jour votre infrastructure via des demandes d'extraction GitHub et des pipelines CI/CD, conformément au modèle standard pour les déploiements App Hosting.
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","serviceusage.googleapis.com","developerconnect.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 earlier.resource"google_firebase_project""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}### Setting up Firebase App Hosting #### Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS"service_account=google_service_account.service_account.emailcodebase{repository=google_developer_connect_git_repository_link.my-repository.nameroot_directory="/"}}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/developerconnect.readTokenAccessor","roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Configures auto rollout from GitHubresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idrollout_policy{codebase_branch="main" # Or another branch}}###### Setting up a connection to GitHub #### Provisions Service Agent for Developer Connectresource"google_project_service_identity""devconnect-p4sa"{provider=google-betaproject=google_firebase_project.apphosting.projectservice="developerconnect.googleapis.com"}# Adds permission to Developer Connect Service Agent to manager GitHub tokensresource"google_project_iam_member""devconnect-secret"{provider=google-betaproject=google_firebase_project.apphosting.projectrole="roles/secretmanager.admin"member=google_project_service_identity.devconnect-p4sa.member}# Connects to a GitHub accountresource"google_developer_connect_connection""my-connection"{provider=google-betaproject=google_firebase_project.apphosting.project # Must match the google_firebase_app_hosting_backend's locationlocation="name-of-region-for-service" # Must be `firebase-app-hosting-github-oauth`connection_id="firebase-app-hosting-github-oauth"github_config{github_app="FIREBASE"}depends_on=[google_project_iam_member.devconnect-secret]}# Follow the next steps to set up the GitHub connection# Tip: Run terraform refresh to obtain the outputoutput"next_steps"{description="Follow the action_uri if present to continue setup"value=google_developer_connect_connection.my-connection.installation_state}# Links a GitHub repo to the projectresource"google_developer_connect_git_repository_link""my-repository"{provider=google-betaproject=google_firebase_project.apphosting.projectlocation=google_developer_connect_connection.my-connection.locationgit_repository_link_id="my-repo-id"parent_connection=google_developer_connect_connection.my-connection.connection_idclone_uri="https://github.com/myuser/myrepo.git"}###
Dépannage et FAQ
Vous souhaitez en savoir plus sur les différents attributs liés au projet (comme project et user_project_override).
Ce guide utilise les attributs Terraform suivants lorsque vous travaillez avec des "projets".
project dans un bloc resource
Recommandé : dans la mesure du possible, incluez l'attribut project dans chaque bloc resource.
En incluant un attribut de projet, Terraform créera l'infrastructure spécifiée dans le bloc de ressources du projet spécifié. Ce guide et nos exemples de fichiers de configuration utilisent tous cette pratique.
Consultez la documentation officielle de Terraform sur project.
user_project_override dans le bloc provider
Pour provisionner la plupart des ressources, vous devez utiliser user_project_override = true, ce qui signifie que vous devez vérifier le quota par rapport à votre propre projet Firebase. Toutefois, pour configurer votre nouveau projet afin qu'il puisse accepter les vérifications de quota, vous devez d'abord utiliser user_project_override = false.
L'erreur suivante s'affiche : generic::permission_denied: Firebase Tos Not Accepted.
Assurez-vous que le compte utilisateur que vous utilisez pour exécuter les commandes gcloud CLI a accepté les conditions d'utilisation de Firebase.
Pour ce faire, vous pouvez utiliser un navigateur connecté au compte utilisateur et essayer d'afficher un projet Firebase existant dans la console Firebase. Si vous pouvez afficher un projet Firebase existant, cela signifie que le compte utilisateur a accepté les conditions d'utilisation de Firebase.
Si vous ne voyez aucun projet Firebase existant, cela signifie probablement que le compte utilisateur n'a pas accepté les conditions d'utilisation de Firebase. Pour résoudre ce problème, créez un projet Firebase via la console Firebase et acceptez les conditions d'utilisation de Firebase lors de la création du projet. Vous pouvez supprimer immédiatement ce projet via les paramètres du projet dans la console.
Après avoir exécuté terraform apply, vous obtenez l'erreur suivante : generic::permission_denied: IAM authority does not have the
permission.
Patientez quelques minutes, puis réessayez d'exécuter terraform apply.
La création d'une ressource a échoué, mais lorsque vous exécutez à nouveau terraform apply, le message ALREADY_EXISTS s'affiche.
Cela peut être dû à un délai de propagation dans différents systèmes. Essayez de résoudre ce problème en important la ressource dans l'état Terraform en exécutant terraform import. Ensuite, essayez d'exécuter terraform apply à nouveau.
Lorsque vous travaillez avec Cloud Firestore, vous obtenez l'erreur suivante : Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
Comme l'erreur le suggère, Terraform essaie peut-être de provisionner plusieurs index et/ou de créer un document en même temps, et a rencontré une erreur de simultanéité.
Essayez d'exécuter terraform apply à nouveau.
Vous obtenez l'erreur suivante : "you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes".
Cette erreur signifie que Terraform ne sait pas quel projet utiliser pour vérifier le quota. Pour résoudre le problème, vérifiez les points suivants dans le bloc resource :
Assurez-vous d'avoir spécifié une valeur pour l'attribut project.
Assurez-vous d'utiliser le fournisseur avec user_project_override = true (sans alias), qui est google-beta dans les exemples Firebase.
Lorsque vous créez un projet Google Cloud, vous obtenez une erreur indiquant que l'ID du projet spécifié pour le nouveau projet existe déjà.
Voici les raisons possibles pour lesquelles l'ID du projet peut déjà exister :
Le projet associé à cet ID appartient à quelqu'un d'autre.
Pour résoudre le problème : choisissez un autre ID de projet.
Le projet associé à cet ID a été récemment supprimé (état de suppression réversible).
Pour résoudre le problème : si vous pensez que le projet associé à l'ID vous appartient, vérifiez l'état du projet à l'aide de l'API REST projects.get.
Le projet associé à cet ID existe bien sous l'utilisateur actuel. Une cause possible de l'erreur peut être l'interruption d'une commande terraform apply précédente.
Pour résoudre le problème, exécutez les commandes suivantes : terraform import google_project.default PROJECT_ID
puis terraform import google_firebase_project.default PROJECT_ID
Pourquoi devez-vous provisionner l'instance Cloud Firestore par défaut avant le bucket Cloud Storage par défaut ?
Si vous avez provisionné votre bucket Cloud Storage par défaut (via google_app_engine_application) avant d'essayer de provisionner votre instance Cloud Firestore par défaut, vous constaterez que votre instance Cloud Firestore par défaut a déjà été provisionnée. Notez que l'instance de base de données provisionnée est en mode Datastore, ce qui signifie qu'elle n'est pas accessible aux SDK Firebase, à l'authentification ou à Firebase Security Rules. Si vous souhaitez utiliser Cloud Firestore avec ces services Firebase, vous devez vider la base de données, puis modifier son type dans la console Google Cloud.
Lorsque vous essayez de provisionner Cloud Storage (via google_app_engine_application), puis votre instance Cloud Firestore par défaut, vous obtenez l'erreur suivante : Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
Lorsque vous provisionnez le bucket Cloud Storage par défaut d'un projet (via google_app_engine_application) et que le projet ne dispose pas encore de son instance Cloud Firestore par défaut, google_app_engine_application provisionne automatiquement l'instance Cloud Firestore par défaut du projet.
Par conséquent, étant donné que l'instance Cloud Firestore par défaut de votre projet est déjà provisionnée, google_firestore_database génère une erreur si vous essayez de provisionner explicitement cette instance par défaut.
Une fois l'instance Cloud Firestore par défaut du projet provisionnée, vous ne pouvez pas la "reprovisionner" ni modifier son emplacement. Notez que l'instance de base de données provisionnée est en mode Datastore, ce qui signifie qu'elle n'est pas accessible aux SDK Firebase, à l'authentification ou à Firebase Security Rules. Si vous souhaitez utiliser Cloud Firestore avec ces services Firebase, vous devez vider la base de données, puis modifier son type dans la console Google Cloud.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2026/11/05 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2026/11/05 (UTC)."],[],[]]