Firebase inizierà a supportare
Terraform.
Se fai parte di un team che vuole automatizzare e standardizzare la creazione di Firebase
per i quali è stato eseguito il provisioning di risorse specifiche e servizi abilitati, quindi l'uso
Terraform con Firebase può fare al caso tuo.
Il flusso di lavoro di base per l'utilizzo di Terraform con Firebase include quanto segue:
Creazione e personalizzazione di un file di configurazione Terraform (un file .tf), che
specifica l'infrastruttura di cui eseguire il provisioning, ovvero
vuoi eseguire il provisioning e i servizi che vuoi abilitare).
L'utilizzo dei comandi gcloud CLI che si interfacciano con Terraform per
eseguire il provisioning dell'infrastruttura specificata nel file .tf.
Eliminare e modificare l'infrastruttura esistente utilizzando Terraform.
Gestisci la configurazione e le attività specifiche del prodotto utilizzando Terraform, ad esempio:
Abilitazione di Firebase Authentication provider di accesso.
Creazione di Cloud Storage bucket o istanze di database e deployment
Firebase Security Rules per loro.
Per eseguire tutte queste operazioni, puoi usare i file e i comandi di configurazione standard di Terraform
attività di machine learning. Per aiutarti, ti abbiamo fornito
file di configurazione Terraform di esempio per diversi usi comuni
d'uso diversi.
Flusso di lavoro generalizzato per l'utilizzo di Terraform con Firebase
Prerequisiti
Questa guida è un'introduzione all'utilizzo di Terraform con Firebase, pertanto presuppone
una conoscenza di base di Terraform. Assicurati di aver completato quanto segue
prerequisiti prima di iniziare questo flusso di lavoro.
Installa Terraform
e acquisire familiarità con Terraform grazie ai tutorial ufficiali.
Visualizza i requisiti per gli account utente e gli account di servizio
Se utilizzi un account utente, devi aver accettato i Termini di Firebase
servizio (TdS di Firebase). Hai accettato i TdS di Firebase, se puoi visualizzare
un progetto Firebase
Console Firebase
Per consentire a Terraform di eseguire determinate azioni (ad esempio, creare progetti),
deve essere vero:
L'account utente o di servizio deve disporre dell'accesso IAM applicabile
queste azioni.
Se l'account utente o di servizio fa parte di un'Google Cloud organizzazione,
i criteri dell'organizzazione devono consentire all'account di eseguire queste azioni.
Passaggio 1: crea e personalizza un file di configurazione Terraform
Un file di configurazione Terraform richiede due sezioni principali (descritte in dettaglio di seguito):
È necessaria una configurazione di provider, indipendentemente dai prodotti o servizi Firebase
coinvolti.
Crea un file di configurazione Terraform (come un file main.tf) nella tua regione
.
In questa guida, utilizzerai questo file di configurazione per specificare provider
e tutta l'infrastruttura che vuoi che Terraform crei. Tieni presente che
hai però delle opzioni per includere la configurazione del provider.
Visualizza le opzioni per come
per includere la configurazione di provider
Per includere una configurazione provider nel resto della configurazione di Terraform, hai a disposizione le seguenti opzioni:
Opzione 1: includila nella parte superiore di una singola configurazione di Terraform .tf
(come illustrato in questa guida).
Utilizza questa opzione se stai appena iniziando a utilizzare Terraform o se stai solo provando Terraform con Firebase.
Opzione 2: includilo in un file .tf separato (ad esempio un file provider.tf), oltre al file .tf in cui specifichi l'infrastruttura da creare (ad esempio un file main.tf).
Utilizza questa opzione se fai parte di un team più grande che deve
standardizza la configurazione.
Durante l'esecuzione dei comandi Terraform, sia il file provider.tf che
Il file main.tf deve trovarsi nella stessa directory.
Includi la seguente configurazione di provider nella parte superiore del file main.tf.
Devi utilizzare il provider google-beta perché si tratta di una versione beta dell'utilizzo di Firebase con Terraform. Presta attenzione se utilizzi l'app in versione di produzione.
# 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}
Vai alla sezione successiva per completare il file di configurazione e specificare
l'infrastruttura da creare.
Specifica quale infrastruttura creare utilizzando i blocchi resource
Nel file di configurazione Terraform (per questa guida, il file main.tf), devi:
e specificare tutta l'infrastruttura da creare con Terraform (ovvero tutte le
le risorse di cui vuoi eseguire il provisioning e tutti i servizi che vuoi abilitare). Nel
questa guida, troverai un elenco completo di tutti
Risorse Firebase che supportano Terraform.
Apri il file main.tf.
Nella configurazione di provider, includi la seguente configurazione di resource
isolati.
Questo esempio di base crea un nuovo progetto Firebase e poi un'app Firebase per Android all'interno del progetto.
# Terraform configuration to set up providers by version....# Configures the provider to use the resource block's specified project for quota checks....# Configures the provider to not use the resource block's specified project for quota checks....# Creates a new Google Cloud project.resource"google_project""default"{provider=google-beta.no_user_project_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,]}
Visualizza un
versione annotata di questo file di configurazione di esempio
Se non hai dimestichezza con l'infrastruttura di progetti e app come risorse, consulta la seguente documentazione:
# 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,]}
Passaggio 2: esegui i comandi Terraform per creare l'infrastruttura specificata
Per eseguire il provisioning delle risorse e abilitare i servizi specificati in main.tf
esegui i comandi seguenti dalla stessa directory del file main.tf.
Per informazioni dettagliate su questi comandi, consulta
Documentazione di Terraform.
Se è la prima volta che esegui comandi Terraform nella
è necessario inizializzare la directory di configurazione e installare
il provider Google Terraform. Per farlo, esegui questo comando:
terraform init
Crea l'infrastruttura specificata nel file main.tf eseguendo il seguente comando:
terraform apply
Verifica che sia stato eseguito il provisioning o l'abilitazione di tutto come previsto:
Opzione 1: visualizza la configurazione stampata nel terminale eseguendo il seguente comando:
terraform show
Opzione 2: visualizza il tuo progetto Firebase in
Console Firebase.
Risorse Firebase con supporto Terraform
Le seguenti risorse Firebase e Google sono supportate da Terraform. e continuiamo ad aggiungere altre risorse. Pertanto, se non vedi la risorsa
gestire con Terraform, ricontrolla a breve per verificare se è disponibile o
richiedilo entro il giorno
la segnalazione di un problema nel repository GitHub.
google_identity_platform_config -
abilita Google Cloud Identity Platform (GCIP) (che è il backend per Firebase Authentication)
e definire impostazioni di autenticazione a livello di progetto
Il progetto in cui Terraform abiliterà GCIP e/o Firebase Authentication
deve essere incluso nel piano tariffario Blaze (il progetto deve disporre di un
account Cloud Billing associato). Puoi farlo in modo programmatico
l'impostazione
billing_account
nella risorsa google_project.
Questa risorsa abilita anche più configurazioni, come i metodi di accesso locale,
come autenticazione anonima, email/password e telefonica, nonché
funzioni di blocco e domini autorizzati.
Deployment di Firebase Realtime Database Security Rules tramite Terraform (scopri come
esegui il deployment di Rules
utilizzando altri strumenti, incluse le opzioni di pubblicità programmatica)
File di configurazione Terraform di esempio per casi d'uso comuni
Configura Firebase Authentication con
GCIP
Questa configurazione crea un nuovo progetto Google Cloud,
associa il progetto a un account Cloud Billing (il piano tariffario di Blaze
è obbligatorio per Firebase Authentication con GCIP),
abilita i servizi Firebase per il progetto,
configura Firebase Authentication con GCIP,
e registra tre diversi tipi di app con il progetto.
Tieni presente che è necessario abilitare GCIP per configurare Firebase Authentication tramite 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,]}
Esegui il provisioning
istanza Firebase Realtime Database predefinita
Questa configurazione crea un nuovo progetto Google Cloud,
abilita i servizi Firebase per il progetto,
esegue il provisioning dell'istanza Realtime Database predefinita del progetto,
e registra tre diversi tipi di app con il progetto.
# 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,]}
Esegui il provisioning di più elementi
Firebase Realtime Database istanza
Questa configurazione crea un nuovo progetto Google Cloud,
associa il progetto a un account Cloud Billing (il piano tariffario di Blaze
è obbligatorio per più istanze Realtime Database),
abilita i servizi Firebase per il progetto,
esegue il provisioning di più istanze Realtime Database
(inclusa l'istanza Realtime Database predefinita del progetto),
e registra tre diversi tipi di app con il progetto.
# 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,]}
Esegui il provisioning
Cloud Firestore istanza
Questa configurazione crea un nuovo progetto Google Cloud,
abilita i servizi Firebase per il progetto,
esegue il provisioning dell'istanza Cloud Firestore del progetto,
e registra tre diversi tipi di app con il progetto.
Esegue inoltre il provisioning di Firebase Security Rules per l'istanza Cloud Firestore,
crea un indice Cloud Firestore
e aggiunge un documento Cloud Firestore con i dati iniziali.
di Gemini Advanced.
# 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,]}
Questo è il set di regole di Cloud Firestore Security Rules che deve essere contenuto in un file locale
denominato firestore.rules.
Esegui il provisioning
Cloud Storage bucket predefinito
Questa configurazione crea un nuovo progetto Google Cloud,
abilita i servizi Firebase per il progetto,
esegue il provisioning del bucket Cloud Storage predefinito del progetto,
e registra tre diversi tipi di app con il progetto.
Esegue inoltre il provisioning di Firebase Security Rules per il bucket Cloud Storage e carica un file nel bucket.
di Gemini Advanced.
# 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,]}
Questo è il set di regole di Cloud Storage Security Rules che deve essere contenuto in un file locale
denominato storage.rules.
Questa configurazione crea un nuovo progetto Google Cloud, associato a un account Cloud Billing (è necessario il piano tariffario Blaze per più bucket), attiva i servizi Firebase per il progetto, esegue il provisioning di più bucket Cloud Storage (incluso il bucket Cloud Storage predefinito del progetto) e registra tre diversi tipi di app con il progetto.
Inoltre, esegue il provisioning di Firebase Security Rules per i bucket Cloud Storage,
e carica un file nel bucket predefinito Cloud Storage.
di Gemini Advanced.
# 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,]}
Questo è il set di regole di Cloud Storage Security Rules che deve trovarsi in un file locale chiamato storage.rules.
Esegui il provisioning dell'istanza Cloud Firestore e del bucket Cloud Storage predefinito
Questa configurazione crea un nuovo progetto Google Cloud,
abilita i servizi Firebase per il progetto,
esegue il provisioning dell'istanza Cloud Firestore e
quindi esegue il provisioning del bucket Cloud Storage predefinito.
Esegue anche il provisioning di Firebase Security Rules per l'istanza Cloud Firestore e
Cloud Storage bucket.
# 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}
Questo è il set di regole di Cloud Firestore Security Rules che deve essere contenuto in un file locale
denominato firestore.rules.
Protezione di una risorsa API
con Firebase App Check
Questa configurazione crea un nuovo progetto Google Cloud,
attivi i servizi Firebase per il progetto
configura e consente l'applicazione forzata di Firebase App Check per Cloud Firestore
in modo che sia accessibile solo dalla tua app per 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]}
Installa un
istanza di un Firebase Extension
Questa configurazione crea un nuovo progetto Google Cloud, attiva i servizi Firebase per il progetto e installa una nuova istanza di un Firebase Extension nel progetto. Se l'istanza esiste già,
i suoi parametri vengono aggiornati in base ai valori forniti nella configurazione.
# 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"}}}
Risoluzione dei problemi e domande frequenti
Vuoi
per saperne di più su tutti i diversi attributi relativi al progetto (come
project e user_project_override)
Questa guida utilizza i seguenti attributi Terraform quando si lavora con "progetti".
project in un blocco resource
Consigliato: se possibile, includi l'attributo project in ogni
resource blocco
Includendo un attributo di progetto, Terraform creerà l'infrastruttura
specificato nel blocco di risorse all'interno del progetto specificato. Questa guida e i nostri file di configurazione di esempio utilizzano tutti questa pratica.
Consulta la documentazione ufficiale di Terraform su
project
user_project_override nel blocco provider
Per eseguire il provisioning della maggior parte delle risorse, devi utilizzare
user_project_override = true, il che significa che devi confrontare la quota con la tua.
progetto Firebase. Tuttavia, per configurare il nuovo progetto in modo che possa accettare
di quota, devi prima usare user_project_override = false.
Ricevi questo errore:
generic::permission_denied: Firebase Tos Not Accepted.
Assicurati che l'account utente che stai utilizzando per eseguire gcloud CLI
hanno accettato i Termini di servizio di Firebase (TdS di Firebase).
Puoi eseguire questa verifica utilizzando un browser su cui hai eseguito l'accesso all'account utente e
di visualizzare un progetto Firebase esistente
Console Firebase. Se puoi visualizzare
un progetto Firebase esistente, l'account utente ha accettato i
TdS di Firebase
Se non riesci a visualizzare il progetto Firebase esistente, significa che l'account utente
probabilmente non ha accettato i TdS di Firebase. Per risolvere il problema, crea un nuovo
progetto Firebase tramite
Console Firebase e accetta i
TdS Firebase nell'ambito della creazione del progetto. Puoi eliminarlo immediatamente
progetto tramite le impostazioni progetto nella console.
Dopo l'esecuzione
terraform apply, viene visualizzato questo errore:
generic::permission_denied: IAM authority does not have the
permission.
Attendi qualche minuto, quindi riprova a eseguire terraform apply.
La
creazione di una risorsa non è riuscita, ma quando esegui di nuovo terraform apply
viene visualizzato il messaggio ALREADY_EXISTS.
Ciò potrebbe essere dovuto a un ritardo nella propagazione in vari sistemi. Prova a risolvere il problema
importando la risorsa nello stato di Terraform eseguendo
terraform import. Quindi prova a eseguire di nuovo terraform apply.
Quando si lavora con
Cloud Firestore, viene visualizzato questo errore: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
Come suggerito dall'errore, Terraform potrebbe tentare di eseguire il provisioning di più indici
e/o la creazione di un documento contemporaneamente e si è verificato un errore di contemporaneità.
Prova a eseguire di nuovo terraform apply.
Riceverai
questo errore:
"you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes".
Questo errore significa che Terraform non sa quale progetto controllare la quota.
contro i guasti. Per risolvere il problema, controlla quanto segue nel blocco resource:
Assicurati di aver specificato un valore per l'attributo project.
Assicurati di utilizzare il fornitore con user_project_override = true
(nessun alias), che negli esempi di Firebase è google-beta.
Quando crei un nuovo progetto Google Cloud, viene visualizzato l'errore che indica che l'ID progetto specificato per il nuovo progetto esiste già.
Ecco i possibili motivi per cui l'ID progetto potrebbe già esistere:
Il progetto associato a quell'ID appartiene a un'altra persona.
Per risolvere il problema: scegli un altro ID progetto.
Il progetto associato a questo ID è stato eliminato di recente (in stato di eliminazione soft).
Soluzione: se ritieni che il progetto associato all'ID appartenga all'ID
quindi puoi controllare lo stato del progetto utilizzando
API REST projects.get.
Il progetto associato a questo ID esiste correttamente per l'utente corrente. R
la possibile causa dell'errore potrebbe essere che un terraform apply precedente
interrotto.
Per risolvere il problema: esegui i seguenti comandi: terraform import google_project.default PROJECT_ID
e poi terraform import google_firebase_project.default PROJECT_ID
Quando
tentativo di eseguire il provisioning di Cloud Firestore e poi di Cloud Storage (tramite
google_app_engine_application), viene visualizzato questo errore:
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.
Un'applicazione App Engine richiede un'istanza Cloud Firestore, ma puoi avere solo un'istanza Cloud Firestore per progetto. Quindi, come suggerisce il messaggio di errore,
se hai già eseguito il provisioning dell'istanza Cloud Firestore del progetto in una
posizione, App Engine ti invierà un errore se tenti di eseguire il provisioning di un Cloud Firestore
in una località diversa. App Engine pensa che tu stia cercando di
"riesecuzione del provisioning" per l'istanza Cloud Firestore già esistente.
Per risolvere questo errore, utilizza la stessa posizione sia per Cloud Firestore sia per
Applicazione App Engine. Se hai bisogno di un bucket Cloud Storage in una località diversa da Cloud Firestore, puoi eseguire il provisioning di altri bucket (consulta la configurazione di esempio per la creazione di più bucket Cloud Storage).
Quando
tentativo di eseguire il provisioning di Cloud Storage (tramite
google_app_engine_application) e poi Cloud Firestore, ottieni
questo errore:
Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
Quando esegui il provisioning del bucket Cloud Storage predefinito di un progetto (tramite
google_app_engine_application) e il progetto non ha ancora
Cloud Firestore istanza, poi google_app_engine_application automaticamente
esegue il provisioning dell'istanza Cloud Firestore del progetto.
Pertanto, se è già stato eseguito il provisioning dell'istanza Cloud Firestore del progetto,
Se tenti di eseguire esplicitamente il provisioning di un elemento pubblicitario, verrà visualizzato un errore di google_firestore_databaseCloud Firestore istanza.
Una volta eseguito il provisioning dell'istanza Cloud Firestore del progetto, non puoi eseguire nuovamente il provisioning o modificarne la posizione. Per evitare che si verifichi questo errore,
rimuovi il blocco di risorse google_firestore_database dal file di configurazione.
Tieni presente, tuttavia, che ti consigliamo di eseguire il provisioning di Cloud Firestore prima
bucket Cloud Storage predefinito del progetto (vedi di seguito per scoprire perché).