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 Firebase
avec des ressources spécifiques provisionnées et des services activés,
Terraform avec Firebase peut vous convenir.
Le workflow de base pour utiliser Terraform avec Firebase inclut les éléments suivants:
créer et personnaliser un fichier de configuration Terraform (un fichier .tf), qui
spécifie l'infrastructure à provisionner (c'est-à-dire les ressources que vous
et les services que vous souhaitez activer).
À l'aide de 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. Mais vous pouvez
faire beaucoup de choses
d'autres fonctionnalités de 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 et déployer Cloud Storage buckets ou instances de base de données
Firebase Security Rules.
Vous pouvez utiliser des fichiers de configuration et des commandes Terraform standards pour effectuer toutes ces
tâches. Pour vous aider, nous vous proposons
exemples de fichiers de configuration Terraform pour plusieurs cas d'utilisation courants
cas d'utilisation.
Workflow généralisé pour l'utilisation de Terraform avec Firebase
Prérequis
Ce guide est une introduction à l'utilisation de Terraform avec Firebase. Il suppose donc que vous avez des connaissances de base sur Terraform. Assurez-vous d'avoir effectué les opérations suivantes
les prérequis avant de commencer ce workflow.
Installez Terraform et familiarisez-vous avec Terraform à l'aide de ses 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
(Conditions d'utilisation de Firebase). Vous avez accepté les conditions d'utilisation de Firebase si vous pouvez consulter
un projet Firebase dans
Console Firebase
Pour que Terraform effectue certaines actions (créer des projets, par exemple),
ce qui suit doit être vrai:
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 de l'organisation 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 de provider est requise, quels que soient les produits ou services Firebase
impliqués.
Créez un fichier de configuration Terraform (comme un fichier main.tf) dans votre répertoire local.
Dans ce guide, vous utiliserez ce fichier de configuration pour spécifier à la fois provider
et toute l'infrastructure que Terraform doit créer. Remarque :
mais que vous avez la possibilité d'inclure
la configuration du fournisseur.
Afficher les options
pour inclure la configuration provider
Vous disposez des options suivantes pour inclure une configuration provider pour
le reste de votre configuration Terraform:
Option 1 : incluez-le en haut d'un seul fichier de configuration .tf Terraform (comme indiqué dans ce guide).
Utilisez cette option si vous débutez avec Terraform ou si vous
à tester Terraform avec Firebase.
Option 2:incluez-la dans un fichier .tf distinct (comme provider.tf
), à l'exception 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 a besoin de
et standardiser la configuration.
Lorsque vous exécutez des commandes Terraform, le fichier provider.tf et le fichier 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'aide 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="~> 5.0"}}}# Configures the provider to use the resource block's specified project for quota checks.provider"google-beta"{user_project_override=true}# Configures the provider to not use the resource block's specified project for quota checks.# This provider should only be used during project creation and initializing services.provider"google-beta"{alias="no_user_project_override"user_project_override=false}
Découvrez 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 créer le fichier de configuration et spécifier les éléments
de l'infrastructure à créer.
Spécifier l'infrastructure à créer à l'aide de blocs resource
Dans votre fichier de configuration Terraform (dans ce guide, il s'agit de votre fichier main.tf), vous devez :
spécifie toute l'infrastructure que Terraform doit créer (c'est-à-dire toutes les
ressources à provisionner et tous les services à activer). Dans ce guide, vous trouverez la liste complète de toutes les ressources Firebase compatibles avec Terraform.
Ouvrez votre fichier main.tf.
Dans la configuration provider, incluez la configuration suivante des blocs resource.
Cet exemple de base crée un projet Firebase, puis crée
l'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,]}
Consultez un
version annotée de cet exemple de fichier de configuration
Si vous n'êtes pas familier avec 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écuter les commandes Terraform pour créer l'infrastructure spécifiée
Pour provisionner les ressources et activer les services spécifiés dans votre 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
vous devez initialiser le répertoire de configuration et installer
le fournisseur Terraform pour Google. 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
la commande suivante:
terraform apply
Vérifiez que tout a été provisionné ou activé comme prévu:
Option 1:Consultez la configuration imprimée dans votre terminal en exécutant la commande
la commande suivante:
Les ressources Firebase et Google suivantes sont compatibles avec Terraform. Nous allons
ajoutant des ressources
en permanence ! Si vous ne voyez pas la ressource
que vous souhaitez gérer avec Terraform, puis revenez bientôt pour voir s'il est disponible ou
demandez-le par
en signalant un problème dans le dépôt GitHub.
google_identity_platform_config :
activer Google Cloud Identity Platform (GCIP) (le backend de Firebase Authentication) ;
et définir des paramètres d'authentification au niveau du projet
Projet dans lequel Terraform activera GCIP et/ou Firebase Authentication
être inclus dans la formule Blaze (le projet doit disposer d'un
compte Cloud Billing associé). Vous pouvez le faire
de manière programmatique en
en paramétrant le
billing_account
dans la ressource google_project.
Cette ressource active également d'autres configurations, telles que des méthodes de connexion locale,
telles que l'authentification anonyme, par e-mail/mot de passe ou par téléphone, ainsi que
les fonctions de blocage et les domaines autorisés.
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)
Exemples de fichiers de configuration Terraform pour les cas d'utilisation courants
Configurer Firebase Authentication avec
GCIP
Cette configuration crée un projet Google Cloud,
associe le projet à un compte Cloud Billing (forfait Blaze
est obligatoire 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 dans le projet.
Notez que l'activation de GCIP est nécessaire 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_project.auth.project_id # 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",] # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication.depends_on=[google_project_service.auth,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""auth"{provider=google-betaproject=google_project.auth.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.auth,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""auth"{provider=google-betaproject=google_project.auth.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.auth,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""auth"{provider=google-betaproject=google_project.auth.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.auth,]}
Provisionnez le
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 dans 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_id}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database"{provider=google-betaproject=google_project.rtdb.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database.depends_on=[google_firebase_project.rtdb,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb,]}
Provisionner plusieurs
Firebase Realtime Database d'instances
Cette configuration crée un projet Google Cloud,
associe le projet à un compte Cloud Billing (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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_id}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database-default"{provider=google-betaproject=google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database.depends_on=[google_firebase_project.rtdb-multi,]}# Provisions an additional Realtime Database instance.resource"google_firebase_database_instance""database-additional"{provider=google-betaproject=google_project.rtdb-multi.project_id # 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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database.depends_on=[google_firebase_project.rtdb-multi,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb-multi,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb-multi,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb-multi,]}
Provisionnez le
Cloud Firestore instance
Cette configuration crée un projet Google Cloud,
active les services Firebase pour le projet,
provisionne l'instance Cloud Firestore du projet
et enregistre trois types d'applications différents dans le projet.
Il provisionne également Firebase Security Rules pour l'instance Cloud Firestore.
crée un index Cloud Firestore,
et ajoute un document Cloud Firestore avec des données sources.
# 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_id}# Provisions the Firestore database instance.resource"google_firestore_database""firestore"{provider=google-betaproject=google_project.firestore.project_idname="(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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore.depends_on=[google_firebase_project.firestore,]}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore"{provider=google-betaproject=google_project.firestore.project_idsource{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")}} # Wait for Firestore to be provisioned before creating this ruleset.depends_on=[google_firestore_database.firestore,]}# 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_project.firestore.project_id # Wait for Firestore to be provisioned before releasing the ruleset.depends_on=[google_firestore_database.firestore,]}# Adds a new Firestore index.resource"google_firestore_index""indexes"{provider=google-betaproject=google_project.firestore.project_idcollection="quiz"query_scope="COLLECTION"fields{field_path="question"order="ASCENDING"}fields{field_path="answer"order="ASCENDING"} # Wait for Firestore to be provisioned before adding this index.depends_on=[google_firestore_database.firestore,]}# 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_project.firestore.project_idcollection="quiz"document_id="question-1"fields="{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}" # Wait for Firestore to be provisioned before adding this document.depends_on=[google_firestore_database.firestore,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""firestore"{provider=google-betaproject=google_project.firestore.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.firestore,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""firestore"{provider=google-betaproject=google_project.firestore.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.firestore,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""firestore"{provider=google-betaproject=google_project.firestore.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.firestore,]}
Il s'agit du jeu de règles de Cloud Firestore Security Rules qui doit se trouver dans un fichier local nommé firestore.rules.
Cette configuration crée un projet Google Cloud,
active les services Firebase pour le projet,
provisionne le bucket Cloud Storage par défaut du projet
et enregistre trois types d'applications différents dans le projet.
Elle provisionne également Firebase Security Rules pour le bucket Cloud Storage.
et importe un fichier dans le bucket.
# Creates a new Google Cloud project.resource"google_project""storage"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""storage"{provider=google-beta.no_user_project_overrideproject=google_project.storage.project_idfor_each=toset(["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"{provider=google-betaproject=google_project.storage.project_id}# Provisions the default Cloud Storage bucket for the project via Google App Engine.resource"google_app_engine_application""default"{provider=google-betaproject=google_project.storage.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App.location_id="name-of-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ]}# Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""default-bucket"{provider=google-betaproject=google_project.storage.project_idbucket_id=google_app_engine_application.default.default_bucket}# Creates a ruleset of Cloud Storage Security Rules from a local file.resource"google_firebaserules_ruleset""storage"{provider=google-betaproject=google_project.storage.project_idsource{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")}} # Wait for the default Storage bucket to be provisioned before creating this ruleset.depends_on=[google_firebase_project.storage,]}# Releases the ruleset to the default Storage bucket.resource"google_firebaserules_release""default-bucket"{provider=google-betaname="firebase.storage/${google_app_engine_application.default.default_bucket}"ruleset_name="projects/${google_project.storage.project_id}/rulesets/${google_firebaserules_ruleset.storage.name}"project=google_project.storage.project_id}# Uploads a new file to the default Storage bucket.# Don't use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_app_engine_application.default.default_bucket}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage"{provider=google-betaproject=google_project.storage.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage"{provider=google-betaproject=google_project.storage.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage"{provider=google-betaproject=google_project.storage.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage,]}
Il s'agit de l'ensemble de règles de Cloud Storage Security Rules qui doit se trouver dans un fichier local.
nommée storage.rules.
Cette configuration crée un projet Google Cloud,
associe le projet à un compte Cloud Billing (forfait Blaze
est requis pour plusieurs buckets),
active les services Firebase pour le projet,
provisionne plusieurs buckets Cloud Storage
(y compris le bucket Cloud Storage par défaut du projet),
et enregistre trois types d'applications différents dans le projet.
Elle provisionne également Firebase Security Rules pour les buckets Cloud Storage.
et importe un fichier dans le bucket Cloud Storage par défaut.
# 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_id}# Provisions the default Cloud Storage bucket for the project via Google App Engine.resource"google_app_engine_application""default-multi"{provider=google-betaproject=google_project.storage-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App.location_id="name-of-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ]}# Provisions an additional Cloud Storage bucket.# Additional Cloud Storage buckets are not provisioned via App Engine.resource"google_storage_bucket""bucket-multi"{provider=google-betaproject=google_project.storage-multi.project_idname="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 default Storage bucket.location="name-of-region-for-additional-bucket"}# Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""default-bucket-multi"{provider=google-betaproject=google_project.storage-multi.project_idbucket_id=google_app_engine_application.default-multi.default_bucket}# Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-multi"{provider=google-betaproject=google_project.storage-multi.project_idbucket_id=google_storage_bucket.bucket-multi.name}# Creates a ruleset of Firebase Security Rules from a local file.resource"google_firebaserules_ruleset""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_idsource{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")}} # Wait for the Storage buckets to be provisioned before creating this ruleset.depends_on=[google_firebase_project.storage-multi,]}# Releases the ruleset to the default Storage bucket.resource"google_firebaserules_release""default-bucket-multi"{provider=google-betaname="firebase.storage/${google_app_engine_application.default-multi.default_bucket}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_project.storage-multi.project_id}# Releases the ruleset to the additional Storage bucket.resource"google_firebaserules_release""bucket-multi"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-multi.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_project.storage-multi.project_id}# Uploads a new file to the default 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_app_engine_application.default-multi.default_bucket}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage-multi,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage-multi,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage-multi,]}
Il s'agit de l'ensemble de règles de Cloud Storage Security Rules qui doit se trouver dans un fichier local.
nommée storage.rules.
Provisionnez le
Instance Cloud Firestore et bucket Cloud Storage par défaut
Cette configuration crée un projet Google Cloud,
active les services Firebase pour le projet,
provisionne l'instance Cloud Firestore.
puis provisionne le bucket Cloud Storage par défaut.
Il provisionne également Firebase Security Rules pour l'instance Cloud Firestore et l'accès par défaut
Cloud Storage.
# Creates a new Google Cloud project.resource"google_project""fs"{ # fs = Firestore + Storageprovider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""fs"{provider=google-beta.no_user_project_overrideproject=google_project.fs.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.googleapis.com","firestore.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accidentdisable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""fs"{provider=google-betaproject=google_project.fs.project_id}#### Set up Firestore before default Cloud Storage bucket ##### Provisions the Firestore database instance.resource"google_firestore_database""firestore-fs"{provider=google-betaproject=google_project.fs.project_idname="(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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore.depends_on=[google_firebase_project.fs,]}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore-fs"{provider=google-betaproject=google_project.fs.project_idsource{files{ # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-startedname="firestore.rules"content=file("firestore.rules")}} # Wait for Firestore to be provisioned before creating this ruleset.depends_on=[google_firestore_database.firestore-fs]}# Releases the ruleset for the Firestore instance.resource"google_firebaserules_release""firestore-fs"{provider=google-betaname="cloud.firestore" # must be cloud.firestoreruleset_name=google_firebaserules_ruleset.firestore-fs.nameproject=google_project.fs.project_id # Wait for Firestore to be provisioned before releasing the ruleset.depends_on=[google_firestore_database.firestore-fs,]}#### Set up default Cloud Storage default bucket after Firestore ##### Provisions the default Cloud Storage bucket for the project via Google App Engine.resource"google_app_engine_application""default-bucket-fs"{provider=google-betaproject=google_project.fs.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App.location_id="name-of-region" # Must be in the same location as Firestore (above) # Wait for Firestore to be provisioned first. # Otherwise, the Firestore instance will be provisioned in Datastore mode (unusable by Firebase).depends_on=[google_firestore_database.firestore-fs,]}# Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""default-bucket-fs"{provider=google-betaproject=google_project.fs.project_idbucket_id=google_app_engine_application.default-bucket-fs.default_bucket}# Creates a ruleset of Cloud Storage Security Rules from a local file.resource"google_firebaserules_ruleset""default-bucket-fs"{provider=google-betaproject=google_project.fs.project_idsource{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")}} # Wait for the Cloud Storage bucket to be provisioned before creating this ruleset.depends_on=[google_firebase_project.fs,]}# Releases the ruleset to the default Storage bucket.resource"google_firebaserules_release""default-bucket-fs"{provider=google-betaname="firebase.storage/${google_app_engine_application.default-bucket-fs.default_bucket}"ruleset_name="projects/${google_project.fs.project_id}/rulesets/${google_firebaserules_ruleset.default-bucket-fs.name}"project=google_project.fs.project_id}
Il s'agit de l'ensemble de règles de Cloud Firestore Security Rules qui doit se trouver dans un fichier local.
nommée firestore.rules.
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, et 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" # 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.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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore.depends_on=[google_firebase_project.appcheck,]}# 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]}# It takes a while for App Check to recognize the new app# If your app already exists, you don't have to wait 30 seconds.resource"time_sleep""wait_30s"{depends_on=[google_firebase_android_app.appcheck]create_duration="30s"}# 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=[time_sleep.wait_30s,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]}
Installez un
instance de Firebase Extension
Cette configuration crée un projet Google Cloud,
active les services Firebase pour le projet ;
installe une nouvelle instance d'un 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_project.extensions.project_idinstance_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"}}}
Dépannage et questions fréquentes
Vous voulez
pour en savoir plus sur tous 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
Recommandation: Lorsque c'est possible, ajoutez l'attribut project dans chaque
Bloc resource
Si vous incluez un attribut de projet, Terraform créera l'infrastructure
spécifié dans le bloc "resource" du projet spécifié. Ce guide et nos exemples de fichiers de configuration utilisent tous cette pratique.
Consultez la documentation Terraform officielle
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 comparer votre quota au vôtre
projet Firebase. Cependant, pour configurer votre nouveau projet afin qu'il puisse accepter
de quotas, vous devez d'abord utiliser user_project_override = false.
Vous obtenez ce message d'erreur:
generic::permission_denied: Firebase Tos Not Accepted
Assurez-vous que le compte utilisateur que vous utilisez pour exécuter des commandes gcloud CLI a accepté les conditions d'utilisation de Firebase.
Vous pouvez le faire en utilisant un navigateur
connecté au compte utilisateur et en
lorsque vous essayez d'afficher un projet Firebase existant
Console Firebase. Si vous voyez
un projet Firebase existant, cela signifie que le compte utilisateur a accepté
Conditions d'utilisation de Firebase
Si vous ne voyez aucun projet Firebase existant, le compte utilisateur
n'a probablement pas accepté les conditions d'utilisation de Firebase. Pour résoudre ce problème, créez
projet Firebase via le
console Firebase et acceptez les
Conditions d'utilisation de Firebase lors de la création d'un projet Vous pouvez supprimer immédiatement ce projet via les paramètres du projet dans la console.
Après l'exécution
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
la création d'une ressource a échoué, mais lorsque vous exécutez terraform applyALREADY_EXISTS s'affiche à nouveau.
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. Réessayez ensuite d'exécuter terraform apply.
Lorsque vous travaillez avec
Cloud Firestore, vous obtenez l'erreur suivante: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
Comme l'indique l'erreur, Terraform tente peut-être de provisionner plusieurs index
et/ou en créant un document en même temps
et a rencontré une erreur de simultanéité.
Essayez d'exécuter terraform apply à nouveau.
L'erreur suivante s'affiche : "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 vérifier. 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
(aucun alias), soit google-beta dans les exemples Firebase.
Lors de la création d'un
dans le nouveau projet Google Cloud, vous obtenez l'erreur que l'ID de projet a spécifié
le nouveau projet existe déjà.
Voici les raisons pour lesquelles l'ID de projet peut déjà exister:
Le projet associé à cet ID appartient à quelqu'un d'autre.
Pour résoudre le problème : sélectionnez un autre ID de projet.
Le projet associé à cet ID a été récemment supprimé (dans le cadre de la suppression réversible
état actuel).
Pour résoudre le problème:si vous pensez que le projet associé à l'ID appartient
puis vérifiez l'état du projet à l'aide du
API REST projects.get :
Le projet associé à cet ID existe correctement sous l'utilisateur actuel. A
l'erreur est peut-être causée par un terraform apply précédent
sans interruption.
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
", car elle existe déjà à l'emplacement "", alreadyExists. " id="faq-error-location-mismatch-firestore-then-gae" tabindex="-1">Lorsque vous essayez de provisionner Cloud Firestore, puis Cloud Storage (via google_app_engine_application), le message d'erreur suivant s'affiche : Error: Error creating App Engine application: googleapi: Error 409:
Cannot create Firestore database resource <resource-name> since it
already exists at location <location-id>, alreadyExists.
Une application App Engine nécessite une instance Cloud Firestore, mais vous ne pouvez
une instance Cloud Firestore par projet. Comme l'indique le message d'erreur,
si vous avez déjà provisionné l'instance Cloud Firestore du projet dans un
emplacement, App Engine générera une erreur si vous essayez de provisionner un Cloud Firestore
une instance à un autre emplacement. App Engine pense que vous essayez de
"réapprovisionner" l'instance Cloud Firestore existante.
Pour résoudre cette erreur, utilisez le même emplacement pour Cloud Firestore et l'application App Engine. Si vous avez besoin d'un bucket Cloud Storage dans un
emplacement différent de Cloud Firestore, vous pouvez provisionner des buckets supplémentaires
(consultez les
Exemple de configuration permettant de créer plusieurs Cloud Storage
des buckets).
Quand ?
de la tentative de provisionnement de Cloud Storage (via
google_app_engine_application), puis Cloud Firestore, vous obtenez
cette erreur:
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 d'instance Cloud Firestore, google_app_engine_application provisionne automatiquement l'instance Cloud Firestore du projet.
Ainsi, si l'instance Cloud Firestore de votre projet est déjà provisionnée,
google_firestore_database génère une erreur si vous essayez de provisionner explicitement
Instance Cloud Firestore.
Une fois l'instance Cloud Firestore du projet provisionnée, vous ne pouvez plus la "provisionner à nouveau" ni modifier son emplacement. Pour éviter que l'erreur ne se produise,
Supprimez le bloc "resource" google_firestore_database de votre fichier de configuration.
Notez toutefois que nous vous recommandons de provisionner Cloud Firestore avant le bucket Cloud Storage par défaut du projet (voir l'encadré ci-dessous pour en savoir plus).
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 2024/09/12 (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 2024/09/12 (UTC)."],[],[]]