Firebase wird bald unterstützt
Terraform:
Wenn Sie in einem Team arbeiten, das das Erstellen von Firebase-Projekten mit bestimmten bereitgestellten Ressourcen und aktivierten Diensten automatisieren und standardisieren möchte, ist die Verwendung von Terraform mit Firebase eine gute Lösung.
Der grundlegende Workflow für die Verwendung von Terraform mit Firebase umfasst Folgendes:
Erstellen und Anpassen einer Terraform-Konfigurationsdatei (.tf-Datei), in der die zu bereitstellende Infrastruktur angegeben ist (d. h. die zu bereitstellenden Ressourcen und die zu aktivierenden Dienste).
Mit gcloud CLI-Befehlen, die als Schnittstelle zu Terraform dienen,
die in der Datei .tf angegebene Infrastruktur bereitstellen.
Löschen und ändern Sie die vorhandene Infrastruktur mit Terraform.
Verwalten Sie produktspezifische Konfigurationen und Aufgaben mit Terraform, z. B.:
Firebase Authentication-Anmeldeanbieter werden aktiviert.
Cloud Storage Buckets oder Datenbankinstanzen werden erstellt und bereitgestellt
Firebase Security Rules.
Mit den standardmäßigen Terraform-Konfigurationsdateien und -Befehlen können Sie all diese Schritte ausführen.
Aufgaben. Um Ihnen dabei zu helfen, haben wir
Terraform-Konfigurationsdateien für verschiedene häufige Anwendungsfälle
Cases.
Allgemeiner Workflow für die Verwendung von Terraform mit Firebase
Voraussetzungen
Dieser Leitfaden ist eine Einführung in die Verwendung von Terraform mit Firebase. Es wird also davon ausgegangen,
Grundkenntnisse in Terraform. Prüfen Sie, ob Sie die folgenden Schritte ausgeführt haben:
Voraussetzungen erfüllt, bevor Sie diesen Workflow starten.
Terraform installieren
und sich mithilfe der offiziellen Anleitungen mit Terraform vertraut machen.
Anforderungen für Nutzerkonten und Dienstkonten ansehen
Wenn Sie ein Nutzerkonto verwenden, müssen Sie die Firebase-Nutzungsbedingungen von
Dienst (Firebase-Nutzungsbedingungen). Sie haben die Firebase-Nutzungsbedingungen akzeptiert, wenn Sie ein Firebase-Projekt in der Firebase Console aufrufen können.
Damit Terraform bestimmte Aktionen ausführen kann (z. B. Projekte erstellen), gilt Folgendes:
muss Folgendes zutreffen:
Das Nutzer- oder Dienstkonto muss die entsprechenden IAM-Zugriffsrechte für
diese Aktionen durchführen.
Wenn der Nutzer oder das Dienstkonto zu einer Google Cloud-Organisation gehört,
müssen die Organisationsrichtlinien es dem Konto erlauben, diese Aktionen auszuführen.
Schritt 1: Terraform-Konfigurationsdatei erstellen und anpassen
Eine Terraform-Konfigurationsdatei benötigt zwei Hauptabschnitte, die ausführlich beschrieben werden.
unten)
provider muss eingerichtet werden, unabhängig davon, welche Firebase-Produkte oder -Dienste
beteiligt sind.
Terraform-Konfigurationsdatei (z. B. main.tf-Datei) lokal erstellen
-Verzeichnis.
In dieser Anleitung verwenden Sie diese Konfigurationsdatei, um sowohl das provider
und die Infrastruktur, die Sie mit Terraform erstellen möchten. Hinweis:
Es gibt jedoch Optionen, wie Sie die Anbietereinrichtung einbinden können.
Optionen für die Vorgehensweise anzeigen
um provider-Einrichtung aufzunehmen
Sie haben folgende Möglichkeiten, eine provider-Einrichtung in die restliche Terraform-Konfiguration einzubinden:
Option 1: Fügen Sie den Code am Anfang einer einzelnen Terraform-.tf-Konfiguration ein.
(wie in diesem Leitfaden gezeigt).
Verwenden Sie diese Option, wenn Sie Terraform gerade erst nutzen
Terraform mit Firebase auszuprobieren.
Option 2: Fügen Sie den Code in eine separate .tf-Datei ein (z. B. ein provider.tf-Objekt).
.tf-Datei), in der Sie die Infrastruktur angeben,
erstellen (z. B. eine main.tf-Datei).
Verwenden Sie diese Option, wenn Sie Teil eines größeren Teams sind,
Standardisierung der Einrichtung.
Beim Ausführen von Terraform-Befehlen werden sowohl die provider.tf-Datei als auch die
Die Datei main.tf muss sich im selben Verzeichnis befinden.
Fügen Sie das folgende provider-Setup am Anfang der Datei main.tf ein.
Sie müssen den Anbieter google-beta verwenden, da dies ein Betarelease der Verwendung von Firebase mit Terraform ist. Seien Sie bei der Verwendung in der Produktion vorsichtig.
# 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}
Weitere Informationen zu den verschiedenen Arten von projektbezogenen Attributen (einschließlich des in diesem Leitfaden als „Quota-Check-Projekt“ bezeichneten Projekts) bei der Verwendung von Terraform mit Firebase
Fahren Sie mit dem nächsten Abschnitt fort, um die Konfigurationsdatei zu vervollständigen
Infrastruktur erstellen.
Mit resource-Blöcken angeben, welche Infrastruktur erstellt werden soll
In Ihrer Terraform-Konfigurationsdatei (für diese Anleitung die Datei main.tf) müssen Sie Folgendes tun:
geben Sie die gesamte Infrastruktur an, die Terraform erstellen soll (d. h. alle
Ressourcen, die Sie bereitstellen möchten, und alle Dienste, die Sie aktivieren möchten. In
finden Sie eine vollständige Liste aller
Firebase-Ressourcen, die Terraform unterstützen
Öffnen Sie Ihre main.tf-Datei.
Fügen Sie in der provider-Einrichtung die folgende Konfiguration von resource-Blöcken ein.
In diesem einfachen Beispiel wird ein neues Firebase-Projekt erstellt und dann eine Firebase-Android-App in diesem Projekt.
# 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,]}
Sehen Sie sich
annotierte Version dieser Beispielkonfigurationsdatei
Wenn Sie mit der Infrastruktur von Projekten und Anwendungen
finden Sie in der folgenden Dokumentation:
# 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,]}
Schritt 2:Terraform-Befehle ausführen, um die angegebene Infrastruktur zu erstellen
So stellen Sie die Ressourcen bereit und aktivieren die in der main.tf angegebenen Dienste:
-Datei, führen Sie die folgenden Befehle im selben Verzeichnis wie Ihre main.tf-Datei aus.
Detaillierte Informationen zu diesen Befehlen finden Sie in der
Terraform-Dokumentation
Wenn Sie zum ersten Mal Terraform-Befehle in der
müssen Sie das Konfigurationsverzeichnis initialisieren und
Terraform-Anbieter von Google. Führen Sie dazu den folgenden Befehl aus:
terraform init
Erstellen Sie die in der main.tf-Datei angegebene Infrastruktur, indem Sie den
folgenden Befehl:
terraform apply
Prüfen Sie, ob alles wie erwartet bereitgestellt oder aktiviert wurde:
Option 1: Sehen Sie sich die Konfiguration an, die in Ihrem Terminal ausgegeben wird, indem Sie den
folgenden Befehl:
terraform show
Option 2: Sehen Sie sich Ihr Firebase-Projekt in der
Firebase-Konsole.
Firebase-Ressourcen mit Terraform-Unterstützung
Die folgenden Firebase- und Google-Ressourcen unterstützen Terraform. Und wir
und fügen ständig neue Ressourcen hinzu. Wenn Sie also die Ressource, die Sie
die Sie mit Terraform verwalten möchten,
sehen Sie später noch einmal nach,
anfordern bis
Ein Problem im GitHub-Repository melden
Firebase-Projekt- und App-Verwaltung
google_firebase_project –
Firebase-Dienste für ein vorhandenes Google Cloud-Projekt aktivieren
google_identity_platform_config –
Google Cloud Identity Platform (GCIP) aktivieren (das Back-End für Firebase Authentication)
und Authentifizierungseinstellungen auf Projektebene angeben,
Zum Konfigurieren von Firebase Authentication über Terraform muss GCIP aktiviert sein. In der Beispieldatei .tf finden Sie Informationen zum Einrichten von Firebase Authentication.
Das Projekt, in dem Terraform GCIP und/oder Firebase Authentication aktiviert
muss das Blaze-Preismodell nutzen (d. h., das Projekt muss ein
verknüpftes Cloud Billing-Konto). Sie können dies programmatisch tun, indem Sie
das Festlegen der
billing_account
in der Ressource google_project.
Diese Ressource ermöglicht
auch weitere Konfigurationen, z. B. lokale Anmeldemethoden,
z. B. anonym, E-Mail-Adresse/Passwort und Telefonauthentifizierung, sowie
Blockierfunktionen und autorisierte Domains.
Firebase Realtime Database Security Rules über Terraform bereitstellen (Informationen zum
diese Rules bereitstellen
andere Tools verwenden, z. B. programmatische Optionen)
Terraform-Konfigurationsdateien für häufige Anwendungsfälle
Firebase Authentication einrichten mit
GCIP
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, das Projekt mit einem Cloud Billing-Konto verknüpft (der Blaze-Preisplan ist für Firebase Authentication mit GCIP erforderlich), Firebase-Dienste für das Projekt aktiviert, Firebase Authentication mit GCIP eingerichtet und drei verschiedene App-Typen beim Projekt registriert.
Hinweis: Sie müssen GCIP aktivieren, um Firebase Authentication über Terraform einzurichten.
# 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,]}
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt.
Firebase-Dienste für das Projekt aktiviert,
stellt die standardmäßige Realtime Database-Instanz des Projekts bereit,
und registriert drei verschiedene App-Typen für das Projekt.
# 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,]}
Mehrere bereitstellen
Firebase Realtime Database Instanz
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt.
verknüpft das Projekt mit einem Cloud Billing-Konto (dem Blaze-Preismodell)
ist für mehrere Realtime Database-Instanzen erforderlich),
Firebase-Dienste für das Projekt aktiviert,
stellt mehrere Realtime Database-Instanzen bereit
(einschließlich der standardmäßigen Realtime Database-Instanz des Projekts)
und registriert drei verschiedene App-Typen für das Projekt.
# 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,]}
Stellen Sie den
Cloud Firestore Instanz
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt.
Firebase-Dienste für das Projekt aktiviert,
stellt die Cloud Firestore-Instanz des Projekts bereit,
und registriert drei verschiedene App-Typen für das Projekt.
Außerdem wird Firebase Security Rules für die Instanz Cloud Firestore bereitgestellt.
einen Cloud Firestore-Index erstellt,
und fügt ein Cloud Firestore-Dokument mit Seed-Daten hinzu.
# 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,]}
Dies ist der Regelsatz von Cloud Firestore Security Rules, der in einer lokalen Datei vorhanden sein sollte
mit dem Namen firestore.rules.
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt.
Firebase-Dienste für das Projekt aktiviert,
stellt den standardmäßigen Cloud Storage-Bucket des Projekts bereit.
und registriert drei verschiedene App-Typen für das Projekt.
Außerdem wird Firebase Security Rules für den Bucket Cloud Storage bereitgestellt.
und lädt eine Datei in den Bucket hoch.
# 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,]}
Dies ist der Regelsatz von Cloud Storage Security Rules, der in einer lokalen Datei vorhanden sein sollte
mit dem Namen storage.rules.
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt.
verknüpft das Projekt mit einem Cloud Billing-Konto (dem Blaze-Preismodell)
ist für mehrere Buckets erforderlich),
Firebase-Dienste für das Projekt aktiviert,
stellt mehrere Cloud Storage-Buckets bereit
(einschließlich des Standard-Buckets Cloud Storage des Projekts)
und registriert drei verschiedene App-Typen für das Projekt.
Außerdem wird Firebase Security Rules für die Cloud Storage-Buckets bereitgestellt.
und lädt eine Datei in den Standard-Bucket Cloud Storage hoch.
# 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,]}
Dies ist der Regelsatz von Cloud Storage Security Rules, der in einer lokalen Datei vorhanden sein sollte
mit dem Namen storage.rules.
Stellen Sie den
Cloud Firestore-Instanz und der Standard-Cloud Storage-Bucket
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt.
Firebase-Dienste für das Projekt aktiviert,
stellt die Instanz Cloud Firestore bereit und
stellt dann den Standard-Bucket Cloud Storage bereit.
Außerdem wird Firebase Security Rules für die Instanz Cloud Firestore und die Standardeinstellung bereitgestellt.
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}
Dies ist die Regelsammlung von Cloud Firestore Security Rules, die sich in einer lokalen Datei namens firestore.rules befinden sollte.
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, Firebase-Dienste für das Projekt aktiviert und Firebase App Check für Cloud Firestore eingerichtet und erzwungen, sodass nur über Ihre Android-App darauf zugegriffen werden kann.
# 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]}
Installieren Sie ein
Instanz von Firebase Extension
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt.
aktiviert Firebase-Dienste für das Projekt und
Installiert eine neue Instanz von Firebase Extension
am Projekt beteiligt. Wenn die Instanz bereits vorhanden ist,
Die Parameter werden anhand der in der Konfiguration angegebenen Werte aktualisiert.
# 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"}}}
Fehlerbehebung und häufig gestellte Fragen
Sie möchten
um mehr über die verschiedenen projektbezogenen Attribute (wie
project und user_project_override)
In dieser Anleitung werden die folgenden Terraform-Attribute für die Arbeit mit Projekten verwendet.
project innerhalb eines resource-Blocks
Empfohlen: Fügen Sie nach Möglichkeit jeweils das Attribut project in jedes Element ein.
resource Block
Durch Hinzufügen eines Projektattributs erstellt Terraform die Infrastruktur.
der im Ressourcenblock innerhalb des angegebenen Projekts angegeben ist. Dieser Leitfaden und
In unseren Beispielkonfigurationsdateien wird diese Vorgehensweise verwendet.
Weitere Informationen finden Sie in der offiziellen Terraform-Dokumentation zu
project
user_project_override innerhalb des provider-Blocks
Für die Bereitstellung der meisten Ressourcen sollten Sie Folgendes verwenden:
user_project_override = true, was bedeutet, dass Sie das Kontingent mit Ihrem eigenen vergleichen
Firebase-Projekt Um Ihr neues Projekt jedoch so einzurichten, dass es
Kontingentprüfungen ausführen, müssen Sie zuerst user_project_override = false verwenden.
Weitere Informationen finden Sie in der offiziellen Terraform-Dokumentation zu
user_project_override
Sie erhalten diesen Fehler:
generic::permission_denied: Firebase Tos Not Accepted
Prüfen Sie, ob das Nutzerkonto, das Sie zum Ausführen von gcloud CLI verwenden,
die Firebase-Nutzungsbedingungen akzeptiert haben.
Dazu können Sie einen Browser verwenden, der im Nutzerkonto angemeldet ist,
ein vorhandenes Firebase-Projekt im
Firebase-Konsole. Wenn Sie
ein vorhandenes Firebase-Projekt erstellt haben, hat das Nutzerkonto die
Nutzungsbedingungen von Firebase
Wenn Sie keine vorhandenen Firebase-Projekte aufrufen können, hat das Nutzerkonto
den Nutzungsbedingungen von Firebase
nicht zugestimmt hat. Erstellen Sie ein neues, um das Problem zu beheben.
Firebase-Projekt über das
Firebase-Konsole und akzeptieren Sie die
Nutzungsbedingungen von Firebase im Rahmen der Projekterstellung Sie können dieses Projekt sofort über die Projekteinstellungen in der Console löschen.
Nach der Ausführung
terraform apply, Sie erhalten diesen Fehler:
generic::permission_denied: IAM authority does not have the
permission.
Warten Sie einige Minuten und versuchen Sie dann noch einmal, terraform apply auszuführen.
Die
Erstellen einer Ressource fehlgeschlagen, aber beim Ausführen von terraform apply
wieder ALREADY_EXISTS.
Das kann an einer Verzögerung bei der Weitergabe in verschiedenen Systemen liegen. Versuchen Sie, dieses Problem zu beheben.
indem Sie die Ressource in den Terraform-Zustand importieren, indem Sie
terraform import Versuchen Sie dann noch einmal, terraform apply auszuführen.
Wenn Sie mit
Cloud Firestore, Sie erhalten diesen Fehler: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
Wie der Fehler andeutet, versucht Terraform möglicherweise, mehrere Indizes bereitzustellen.
und/oder beim Erstellen eines Dokuments. Dabei trat ein Nebenläufigkeitsfehler auf.
Versuchen Sie, terraform apply noch einmal auszuführen.
Sie erhalten
diesen Fehler:
"you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes"
Dieser Fehler bedeutet, dass Terraform nicht weiß, welches Projekt das Kontingent prüfen soll
zu vergleichen. Prüfen Sie zur Fehlerbehebung Folgendes im resource-Block:
Achten Sie darauf, dass Sie einen Wert für das Attribut project angegeben haben.
Achten Sie darauf, dass Sie den Anbieter mit user_project_override = true verwenden
(kein Alias). In den Firebase-Beispielen ist das google-beta.
Beim Erstellen einer
neues Google Cloud-Projekt erstellen, wird der Fehler angezeigt, dass die für das Projekt angegebene
das neue Projekt bereits vorhanden ist.
Dies kann folgende Gründe haben:
Das mit dieser ID verknüpfte Projekt gehört einer anderen Person.
Lösung: Wählen Sie eine andere Projekt-ID aus.
Das mit dieser ID verknüpfte Projekt wurde vor Kurzem gelöscht (vorläufiges Löschen)
Bundesland).
Lösung: Wenn Sie der Meinung sind, dass das mit der ID verknüpfte Projekt gehört
und überprüfen Sie den Status des Projekts mithilfe der
projects.get REST API.
Das mit dieser ID verknüpfte Projekt ist unter dem aktuellen Nutzer korrekt vorhanden. A
Mögliche Ursache für den Fehler könnte sein, dass eine vorherige terraform apply
unterbrochen.
So beheben Sie das Problem:Führen Sie die folgenden Befehle aus: terraform import google_project.default PROJECT_ID
und dann terraform import google_firebase_project.default PROJECT_ID
Wann?
versuchen, Cloud Firestore und dann Cloud Storage (über
google_app_engine_application) erhalten, erhalten Sie diesen Fehler:
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.
Für eine App Engine-Anwendung ist eine Cloud Firestore-Instanz erforderlich. Sie können aber nur
haben eine Cloud Firestore-Instanz pro Projekt. Wie in der Fehlermeldung angegeben, erhalten Sie von App Engine eine Fehlermeldung, wenn Sie versuchen, eine Cloud Firestore-Instanz an einem anderen Ort bereitzustellen, wenn Sie die Cloud Firestore-Instanz des Projekts bereits an einem anderen Ort bereitgestellt haben. App Engine denkt, dass Sie versuchen,
„wieder bereitstellen“ die bereits vorhandene Cloud Firestore-Instanz.
Verwenden Sie für Cloud Firestore und das Attribut
App Engine-Anwendung. Wenn Sie einen Cloud Storage-Bucket in einem
anderen Standort als Cloud Firestore, können Sie weitere Buckets bereitstellen
(siehe
Beispielkonfiguration zum Erstellen mehrerer Cloud Storage
Buckets).
Beim Versuch, Cloud Storage (über google_app_engine_application) und dann Cloud Firestore zu provisionieren, wird folgende Fehlermeldung angezeigt: Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
Wenn Sie den Standard-Bucket Cloud Storage eines Projekts (über
google_app_engine_application) und das Projekt hat noch keine
Cloud Firestore Instanz, dann automatisch google_app_engine_application
stellt die Cloud Firestore-Instanz des Projekts bereit.
Wenn also die Cloud Firestore-Instanz Ihres Projekts bereits bereitgestellt ist,
google_firestore_database führt zu einem Fehler, wenn Sie versuchen, einen expliziten
Cloud Firestore-Instanz.
Sobald die Cloud Firestore-Instanz des Projekts bereitgestellt wurde, ist Folgendes nicht mehr möglich:
„wieder bereitstellen“ oder ihre Position ändern. Entfernen Sie den Ressourcenblock google_firestore_database aus der Konfigurationsdatei, um den Fehler zu vermeiden.
Wir empfehlen jedoch, Cloud Firestore vor dem
Cloud Storage-Standard-Bucket des Projekts (Informationen zu den Gründen unten)