Erste Schritte mit Terraform und Firebase
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Firebase unterstützt jetzt auch Terraform.
Wenn Sie in einem Team arbeiten, das die Erstellung von Firebase-Projekten mit bestimmten bereitgestellten Ressourcen und aktivierten Diensten automatisieren und standardisieren möchte, ist die Verwendung von Terraform mit Firebase möglicherweise eine gute Wahl.
Der grundlegende Workflow für die Verwendung von Terraform mit Firebase umfasst Folgendes:
Erstellen und Anpassen einer Terraform-Konfigurationsdatei (eine .tf-Datei), in der die Infrastruktur angegeben wird, die Sie bereitstellen möchten (d. h. die Ressourcen, die Sie bereitstellen möchten, und die Dienste, die Sie aktivieren möchten).
Verwenden Sie gcloud CLI-Befehle, die mit Terraform interagieren, um die in der Datei .tf angegebene Infrastruktur bereitzustellen.
Vorhandene Infrastruktur mit Terraform löschen und ändern
Produktspezifische Konfigurationen und Aufgaben mit Terraform verwalten, z. B.:
Firebase Authentication Anbieter für Anmeldungen werden aktiviert.
Cloud Storage-Buckets oder Datenbankinstanzen erstellen und Firebase Security Rules dafür bereitstellen.
Erstellen von Firebase App Hosting-Back-Ends, -Builds und anderen zugehörigen Ressourcen.
Sie können alle diese Aufgaben mit Standard-Terraform-Konfigurationsdateien und -Befehlen ausführen. Dazu stellen wir Terraform-Beispielkonfigurationsdateien für mehrere gängige Anwendungsfälle bereit.
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 werden daher grundlegende Kenntnisse von Terraform vorausgesetzt. Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind, bevor Sie mit diesem Workflow beginnen.
Anforderungen für Nutzerkonten und Dienstkonten ansehen
Wenn Sie ein Nutzerkonto verwenden, müssen Sie die Firebase-Nutzungsbedingungen akzeptiert haben. 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), muss Folgendes erfüllt sein:
Das Nutzer- oder Dienstkonto muss den entsprechenden IAM-Zugriff für diese Aktionen haben.
Wenn das Nutzer- oder Dienstkonto Teil einer Google Cloud-Organisation ist, müssen die Organisationsrichtlinien dem Konto erlauben, diese Aktionen auszuführen.
Schritt 1: Terraform-Konfigurationsdatei erstellen und anpassen
Eine Terraform-Konfigurationsdatei benötigt zwei Hauptabschnitte (die unten im Detail beschrieben werden):
Eine provider-Einrichtung ist unabhängig von den beteiligten Firebase-Produkten oder -Diensten erforderlich.
Erstellen Sie in Ihrem lokalen Verzeichnis eine Terraform-Konfigurationsdatei (z. B. eine main.tf-Datei).
In dieser Anleitung verwenden Sie diese Konfigurationsdatei, um sowohl die provider-Einrichtung als auch die gesamte Infrastruktur anzugeben, die Terraform erstellen soll. Sie haben jedoch verschiedene Möglichkeiten, die Anbieterkonfiguration einzubinden.
Optionen zum Einbinden der provider-Einrichtung ansehen
Sie haben die folgenden Optionen, um eine provider-Einrichtung in den Rest Ihrer Terraform-Konfiguration einzubinden:
Option 1: Fügen Sie ihn oben in einer einzelnen Terraform-.tf-Konfigurationsdatei ein (wie in diesem Leitfaden gezeigt).
Verwenden Sie diese Option, wenn Sie gerade erst mit Terraform beginnen oder Terraform mit Firebase ausprobieren möchten.
Option 2: Fügen Sie sie in eine separate .tf-Datei ein (z. B. eine provider.tf-Datei), die sich von der .tf-Datei unterscheidet, in der Sie die zu erstellende Infrastruktur angeben (z. B. eine main.tf-Datei).
Verwenden Sie diese Option, wenn Sie Teil eines größeren Teams sind, das die Einrichtung standardisieren muss.
Beim Ausführen von Terraform-Befehlen müssen sich sowohl die Datei provider.tf als auch die Datei main.tf im selben Verzeichnis befinden.
Fügen Sie die folgende provider-Einrichtung oben in der Datei main.tf ein.
Sie müssen den Anbieter google-beta verwenden, da es sich um eine Betaversion der Verwendung von Firebase mit Terraform handelt. Seien Sie vorsichtig, wenn Sie sie in der Produktion verwenden.
# Terraform configuration to set up providers by version.terraform{required_providers{google-beta={source="hashicorp/google-beta"version="~> 6.0"}}}# Configures the provider to use the resource block's specified project for quota checks.provider"google-beta"{user_project_override=true}# Configures the provider to not use the resource block's specified project for quota checks.# This provider should only be used during project creation and initializing services.provider"google-beta"{alias="no_user_project_override"user_project_override=false}
Weitere Informationen zu den verschiedenen Arten von projektbezogenen Attributen (einschließlich des in diesem Leitfaden als „Kontingentprüfprojekt“ bezeichneten Projekts) bei der Verwendung von Terraform mit Firebase.
Fahren Sie mit dem nächsten Abschnitt fort, um die Konfigurationsdatei fertigzustellen und anzugeben, welche Infrastruktur erstellt werden soll.
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 die gesamte Infrastruktur angeben, die Terraform erstellen soll. Das bedeutet, dass Sie alle Ressourcen angeben müssen, die Sie bereitstellen möchten, und alle Dienste, die Sie aktivieren möchten. In diesem Leitfaden finden Sie eine vollständige Liste aller Firebase-Ressourcen, die Terraform unterstützen.
Öffnen Sie Ihre main.tf-Datei.
Fügen Sie unter der Einrichtung von provider die folgende Konfiguration von resource-Blöcken ein.
In diesem einfachen Beispiel wird ein neues Firebase-Projekt und dann eine Firebase-Android-App in diesem Projekt erstellt.
# 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 eine stark kommentierte Version dieser Beispielkonfigurationsdatei an.
Wenn Sie mit der Infrastruktur von Projekten und Anwendungen als Ressourcen nicht vertraut sind, lesen Sie die folgende 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
Führen Sie die folgenden Befehle im selben Verzeichnis wie die Datei main.tf aus, um die Ressourcen bereitzustellen und die in der Datei main.tf angegebenen Dienste zu aktivieren.
Detaillierte Informationen zu diesen Befehlen finden Sie in der Terraform-Dokumentation.
Wenn Sie Terraform-Befehle zum ersten Mal im Verzeichnis ausführen, müssen Sie das Konfigurationsverzeichnis initialisieren und den Google Terraform-Anbieter installieren. Führen Sie dazu den folgenden Befehl aus:
terraform init
Erstellen Sie die in der Datei main.tf angegebene Infrastruktur mit dem folgenden Befehl:
terraform apply
Prüfen Sie, ob alles wie erwartet bereitgestellt oder aktiviert wurde:
Option 1: Führen Sie den folgenden Befehl aus, um die Konfiguration in Ihrem Terminal anzeigen zu lassen:
Die folgenden Firebase- und Google-Ressourcen werden von Terraform unterstützt. Und wir fügen ständig neue Ressourcen hinzu. Wenn Sie die Ressource, die Sie mit Terraform verwalten möchten, nicht sehen, schauen Sie bald wieder vorbei, um zu sehen, ob sie verfügbar ist, oder fordern Sie sie an, indem Sie ein Problem im GitHub-Repository melden.
Firebase-Projekt- und App-Verwaltung
google_firebase_project: Firebase-Dienste in einem vorhandenen Google Cloud-Projekt aktivieren
google_identity_platform_config: Aktivieren Sie Google Cloud Identity Platform (GCIP) (das Backend für Firebase Authentication) und geben Sie Authentifizierungseinstellungen auf Projektebene an.
Das Projekt, in dem Terraform GCIP und/oder Firebase Authentication aktiviert, muss das Blaze-Preismodell verwenden, d. h. dem Projekt muss ein Cloud Billing-Konto zugeordnet sein. Dazu können Sie das Attribut billing_account in der Ressource google_project programmatisch festlegen.
Diese Ressource ermöglicht auch weitere Konfigurationen, z. B. lokale Anmeldemethoden wie anonyme, E‑Mail-/Passwort- und Telefonauthentifizierung sowie Blockierfunktionen und autorisierte Domains.
Multi-Faktor-Authentifizierung (MFA) über Terraform konfigurieren
Firebase App Hosting
google_firebase_app_hosting_backend: Erstellen und verwalten Sie ein Firebase App Hosting-Backend, einschließlich der GitHub-Repository-Verbindung und des Live-Zweigs für die kontinuierliche Bereitstellung.
google_firebase_app_hosting_build: Erstellt einen Build für ein Backend zu einem bestimmten Zeitpunkt und mit einem bestimmten Codebasis-Referenz-Tag.
google_firestore_document:
Eine Cloud Firestore-Instanz mit einem bestimmten Dokument in einer Sammlung füllen
Wichtig: Verwenden Sie in diesem Seed-Dokument keine echten Endnutzer- oder Produktionsdaten.
Cloud Storage for Firebase
google_firebase_storage_bucket: Einen vorhandenen Cloud Storage-Bucket für Firebase SDKs, Authentifizierung und Firebase Security Rules zugänglich machen
Beispiel-Terraform-Konfigurationsdateien für gängige Anwendungsfälle
Firebase Authentication mit GCIP einrichten
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, das Projekt mit einem Cloud Billing-Konto verknüpft (für Firebase Authentication mit GCIP ist das Blaze-Preismodell erforderlich), Firebase-Dienste für das Projekt aktiviert, Firebase Authentication mit GCIP eingerichtet und drei verschiedene App-Typen im Projekt registriert.
Beachten Sie, dass die Aktivierung von GCIP erforderlich ist, 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"}# Enables required APIs.resource"google_project_service""auth"{provider=google-beta.no_user_project_overrideproject=google_project.auth.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","identitytoolkit.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""auth"{provider=google-betaproject=google_project.auth.project_iddepends_on=[google_project_service.auth,]}# Creates an Identity Platform config.# Also enables Firebase Authentication with Identity Platform in the project if not.resource"google_identity_platform_config""auth"{provider=google-betaproject=google_firebase_project.auth.project # Auto-deletes anonymous usersautodelete_anonymous_users=true # Configures local sign-in methods, like anonymous, email/password, and phone authentication.sign_in{allow_duplicate_emails=trueanonymous{enabled=true}email{enabled=truepassword_required=false}phone_number{enabled=truetest_phone_numbers={"+11231231234"="000000"}}} # Sets an SMS region policy.sms_region_config{allowlist_only{allowed_regions=["US","CA",]}} # Configures blocking functions.blocking_functions{triggers{event_type="beforeSignIn"function_uri="https://us-east1-${google_project.auth.project_id}.cloudfunctions.net/before-sign-in"}forward_inbound_credentials{refresh_token=trueaccess_token=trueid_token=true}} # Configures a temporary quota for new signups for anonymous, email/password, and phone number.quota{sign_up_quota_config{quota=1000start_time=""quota_duration="7200s"}} # Configures authorized domains.authorized_domains=["localhost","${google_project.auth.project_id}.firebaseapp.com","${google_project.auth.project_id}.web.app",]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Web app"}
Firebase SQL Connect-Dienst bereitstellen
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, Firebase-Dienste für das Projekt aktiviert und ein SQL Connect-Dienst bereitgestellt.
# Creates a new Google Cloud project.resource"google_project""dataconnect"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Data Connect).billing_account="000000-000000-000000" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.dataconnect.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedataconnect.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""dataconnect"{provider=google-betaproject=google_project.dataconnect.project_iddepends_on=[google_project_service.services]}# Create a Firebase Data Connect serviceresource"google_firebase_data_connect_service""dataconnect-default"{project=google_firebase_project.dataconnect.projectlocation="name-of-region-for-service"service_id="${google_firebase_project.dataconnect.project}-default-fdc"deletion_policy="DEFAULT"}
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, Firebase-Dienste für das Projekt aktiviert, die Standard-Realtime Database-Instanz des Projekts bereitgestellt und drei verschiedene App-Typen im Projekt registriert.
# Creates a new Google Cloud project.resource"google_project""rtdb"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""rtdb"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddepends_on=[google_project_service.rtdb]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database"{provider=google-betaproject=google_firebase_project.rtdb.project # See available locations: https://firebase.google.com/docs/database/locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb.project_id}-default-rtdb"type="DEFAULT_DATABASE"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Web app"}
Mehrere Firebase Realtime Database-Instanzen bereitstellen
Diese Konfiguration erstellt ein neues Google Cloud-Projekt, verknüpft das Projekt mit einem Cloud Billing-Konto (für mehrere Realtime Database-Instanzen ist das Blaze-Preismodell erforderlich), aktiviert Firebase-Dienste für das Projekt, stellt mehrere Realtime Database-Instanzen bereit (einschließlich der Standard-Realtime Database-Instanz des Projekts) und registriert drei verschiedene App-Typen beim 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"}# Enables required APIs.resource"google_project_service""rtdb-multi"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddepends_on=[google_project_service.rtdb-multi]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database-default"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # See available locations: https://firebase.google.com/docs/database/locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb-multi.project_id}-default-rtdb"type="DEFAULT_DATABASE"}# Provisions an additional Realtime Database instance.resource"google_firebase_database_instance""database-additional"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations # This location doesn't need to be the same as the default database instance.region="name-of-region" # This value will become the first segment of the database's URL.instance_id="name-of-additional-database-instance"type="USER_DATABASE"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Web app"}
Standard-Cloud Firestore-Instanz bereitstellen
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, Firebase-Dienste für das Projekt aktiviert, die Standard-Cloud Firestore-Instanz des Projekts bereitgestellt und drei verschiedene App-Typen im Projekt registriert.
Außerdem wird Firebase Security Rules für die Standardinstanz Cloud Firestore bereitgestellt, ein Cloud Firestore-Index erstellt und ein Cloud Firestore-Dokument mit Seed-Daten hinzugefügt.
# Creates a new Google Cloud project.resource"google_project""firestore"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""firestore"{provider=google-beta.no_user_project_overrideproject=google_project.firestore.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firestore.googleapis.com","firebaserules.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""firestore"{provider=google-betaproject=google_project.firestore.project_iddepends_on=[google_project_service.firestore]}# Provisions the Firestore database instance.resource"google_firestore_database""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectname="(default)" # See available locations: https://firebase.google.com/docs/firestore/locationslocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC"}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore"{provider=google-betaproject=google_firestore_database.firestore.projectsource{files{name="firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-startedcontent=file("firestore.rules")}}}# Releases the ruleset for the Firestore instance.resource"google_firebaserules_release""firestore"{provider=google-betaname="cloud.firestore" # must be cloud.firestoreruleset_name=google_firebaserules_ruleset.firestore.nameproject=google_firestore_database.firestore.project}# Adds a new Firestore index.resource"google_firestore_index""indexes"{provider=google-betaproject=google_firestore_database.firestore.projectcollection="quiz"query_scope="COLLECTION"fields{field_path="question"order="ASCENDING"}fields{field_path="answer"order="ASCENDING"}}# Adds a new Firestore document with seed data.# Don't use real end-user or production data in this seed document.resource"google_firestore_document""doc"{provider=google-betaproject=google_firestore_database.firestore.projectcollection="quiz"document_id="question-1"fields="{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Web app"}
Dies ist der Regelsatz von Cloud Firestore Security Rules, der sich in einer lokalen Datei mit dem Namen firestore.rules befinden sollte.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /some_collection/{document} {
allow read, create, update: if request.auth != null;
}
}
}
Standard-Cloud Storage-Bucket bereitstellen
Zusätzliche Cloud Storage-Buckets bereitstellen
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, das Projekt mit einem Cloud Billing-Konto verknüpft (für zusätzliche Buckets ist das Blaze-Preismodell erforderlich), Firebase-Dienste für das Projekt aktiviert, zusätzliche, nicht standardmäßige Cloud Storage-Buckets bereitgestellt und drei verschiedene App-Typen beim Projekt registriert.
Außerdem wird Firebase Security Rules für jeden Cloud Storage-Bucket bereitgestellt und eine Datei in einen der Cloud Storage-Buckets hochgeladen.
# Creates a new Google Cloud project.resource"google_project""storage-multi"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for multiple Cloud Storage buckets).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""storage-multi"{provider=google-beta.no_user_project_overrideproject=google_project.storage-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddepends_on=[google_project_service.storage-multi]}# Provisions a Cloud Storage bucket.resource"google_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locationslocation="name-of-region-for-bucket"}# Provisions an additional Cloud Storage bucket.resource"google_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-additional-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locations # This location does not need to be the same as the existing Storage bucket.location="name-of-region-for-additional-bucket"}# Makes the first Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-1.name}# Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-2.name}# Creates a ruleset of Firebase Security Rules from a local file.resource"google_firebaserules_ruleset""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectsource{files{ # Write security rules in a local file named "storage.rules" # Learn more: https://firebase.google.com/docs/storage/security/get-startedname="storage.rules"content=file("storage.rules")}}}# Releases the ruleset to the first Storage bucket.resource"google_firebaserules_release""bucket-1"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-1.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Releases the ruleset to the additional Storage bucket.resource"google_firebaserules_release""bucket-2"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-2.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Uploads a new file to the first Storage bucket.# Do not use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture-multi"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_storage_bucket.bucket-1.name}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Web app"}
Dies ist der Regelsatz von Cloud Storage Security Rules, der sich in einer lokalen Datei mit dem Namen storage.rules befinden sollte.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /some_folder/{fileName} {
allow read, write: if request.auth != null;
}
}
}
API-Ressource mit Firebase App Check schützen
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, Firebase-Dienste werden für das Projekt aktiviert und die Erzwingung von Firebase App Check für Cloud Firestore wird eingerichtet und aktiviert, 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"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.appcheck.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseappcheck.googleapis.com","firestore.googleapis.com","serviceusage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""appcheck"{provider=google-betaproject=google_project.appcheck.project_iddepends_on=[google_project_service.services]}# Provisions the Firestore database instance.resource"google_firestore_database""database"{provider=google-betaproject=google_firebase_project.appcheck.projectname="(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-locationlocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectdisplay_name="Play Integrity app"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Register the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectapp_id=google_firebase_android_app.appcheck.app_iddepends_on=[google_firestore_database.database]lifecycle{precondition{condition=length(google_firebase_android_app.appcheck.sha256_hashes) > 0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}}# Enable enforcement of App Check for Firestoreresource"google_firebase_app_check_service_config""firestore"{provider=google-betaproject=google_firebase_project.appcheck.projectservice_id="firestore.googleapis.com"depends_on=[google_project_service.services]}
Firebase Extension-Instanz installieren
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, Firebase-Dienste werden für das Projekt aktiviert und eine neue Instanz von Firebase Extension wird im Projekt installiert. Wenn die Instanz bereits vorhanden ist, werden ihre Parameter 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"}# Enables required APIs.resource"google_project_service""extensions"{provider=google-beta.no_user_project_overrideproject=google_project.extensions.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firebase.googleapis.com","firebaseextensions.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""extensions"{provider=google-betaproject=google_project.extensions.project_iddepends_on=[google_project_service.extensions,]}# Installs an instance of the "Translate Text in Firestore" extension.# Or updates the extension if the specified instance already exists.resource"google_firebase_extensions_instance""translation"{provider=google-betaproject=google_firebase_project.extensions.projectinstance_id="translate-text-in-firestore"config{extension_ref="firebase/firestore-translate-text"params={COLLECTION_PATH="posts/comments/translations"DO_BACKFILL=trueLANGUAGES="ar,en,es,de,fr"INPUT_FIELD_NAME="input"LANGUAGES_FIELD_NAME="languages"OUTPUT_FIELD_NAME="translated"}system_params={"firebaseextensions.v1beta.function/location"="us-central1""firebaseextensions.v1beta.function/memory"="256""firebaseextensions.v1beta.function/minInstances"="0""firebaseextensions.v1beta.function/vpcConnectorEgressSettings"="VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED"}}}
Firebase AI Logic aktivieren und schützen
Mit dieser Konfiguration wird ein neues Google Cloud-Projekt erstellt, Firebase-Dienste für das Projekt aktiviert, einschließlich Firebase AI Logic, und die Erzwingung von Firebase App Check für Firebase AI Logic eingerichtet und aktiviert, sodass nur über Ihre Apps darauf zugegriffen werden kann.
# Creates a new Google Cloud project.resource"google_project""vertex"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for Vertex AI in Firebase).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.vertex.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","serviceusage.googleapis.com", # Required APIs for Vertex AI in Firebase"aiplatform.googleapis.com","firebasevertexai.googleapis.com", # App Check is recommended to protect Vertex AI in Firebase from abuse"firebaseappcheck.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""vertex"{provider=google-betaproject=google_project.vertex.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Web App"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Android App"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Creates a Firebase Apple App in the new project created earlier.resource"google_firebase_apple_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Apple App"bundle_id="bundle.id"team_id="1234567890"}### Protects Vertex AI in Firebase with App Check.# Turns on enforcement for Vertex AI in Firebaseresource"google_firebase_app_check_service_config""vertex"{provider=google-betaproject=google_firebase_project.vertex.projectservice_id="firebaseml.googleapis.com"enforcement_mode="ENFORCED"}# Enables the reCAPTCHA Enterprise APIresource"google_project_service""recaptcha_enterprise"{provider=google-betaproject=google_firebase_project.vertex.projectservice="recaptchaenterprise.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables the Play Integrity APIresource"google_project_service""play_integrity"{provider=google-betaproject=google_firebase_project.vertex.projectservice="playintegrity.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Allows the web app to use reCAPTCHA Enterprise with App Checkresource"google_firebase_app_check_recaptcha_enterprise_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_web_app.app.app_idsite_key="your site key"token_ttl="7200s" # Optionaldepends_on=[google_project_service.recaptcha_enterprise]}# Registers the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_android_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=length(google_firebase_android_app.app.sha256_hashes) > 0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}depends_on=[google_project_service.play_integrity]}# Registers the Apple app with the AppAttest providerresource"google_firebase_app_check_app_attest_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_apple_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=google_firebase_apple_app.app.team_id!=""error_message="Provide a Team ID on the Apple App to use App Check"}}}
App Hosting-Backend manuell bereitstellen
Diese Konfiguration zeigt, wie Sie ein App Hosting-Backend manuell mit Terraform bereitstellen. Dieser Ansatz bietet Ihnen eine detaillierte Kontrolle über die erstellten Ressourcen, erfordert aber, dass Sie jede Ressource einzeln definieren. Das ist nützlich, wenn Sie das Backend über die Standardoptionen hinaus anpassen müssen.
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","serviceusage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}# Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS"service_account=google_service_account.service_account.email}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Creates a Buildresource"google_firebase_app_hosting_build""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idbuild_id="my-build"source{container{ # TODO: use your own imageimage="us-docker.pkg.dev/cloudrun/container/hello"}}}# Rolls out the Buildresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idtarget{splits{build=google_firebase_app_hosting_build.example.namepercent=100}}}
App Hosting-Backend mit GitHub bereitstellen
Diese Konfiguration zeigt, wie Sie ein App Hosting-Backend mit Anwendungscode bereitstellen, der in einem GitHub-Repository gespeichert ist. Mit diesem Ansatz können Sie Ihre Infrastruktur über GitHub-Pull-Anfragen und CI/CD-Pipelines gemäß dem typischen Modell für App Hosting-Bereitstellungen verwalten und aktualisieren.
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","serviceusage.googleapis.com","developerconnect.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}### Setting up Firebase App Hosting #### Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS"service_account=google_service_account.service_account.emailcodebase{repository=google_developer_connect_git_repository_link.my-repository.nameroot_directory="/"}}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/developerconnect.readTokenAccessor","roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Configures auto rollout from GitHubresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idrollout_policy{codebase_branch="main" # Or another branch}}###### Setting up a connection to GitHub #### Provisions Service Agent for Developer Connectresource"google_project_service_identity""devconnect-p4sa"{provider=google-betaproject=google_firebase_project.apphosting.projectservice="developerconnect.googleapis.com"}# Adds permission to Developer Connect Service Agent to manager GitHub tokensresource"google_project_iam_member""devconnect-secret"{provider=google-betaproject=google_firebase_project.apphosting.projectrole="roles/secretmanager.admin"member=google_project_service_identity.devconnect-p4sa.member}# Connects to a GitHub accountresource"google_developer_connect_connection""my-connection"{provider=google-betaproject=google_firebase_project.apphosting.project # Must match the google_firebase_app_hosting_backend's locationlocation="name-of-region-for-service" # Must be `firebase-app-hosting-github-oauth`connection_id="firebase-app-hosting-github-oauth"github_config{github_app="FIREBASE"}depends_on=[google_project_iam_member.devconnect-secret]}# Follow the next steps to set up the GitHub connection# Tip: Run terraform refresh to obtain the outputoutput"next_steps"{description="Follow the action_uri if present to continue setup"value=google_developer_connect_connection.my-connection.installation_state}# Links a GitHub repo to the projectresource"google_developer_connect_git_repository_link""my-repository"{provider=google-betaproject=google_firebase_project.apphosting.projectlocation=google_developer_connect_connection.my-connection.locationgit_repository_link_id="my-repo-id"parent_connection=google_developer_connect_connection.my-connection.connection_idclone_uri="https://github.com/myuser/myrepo.git"}###
Fehlerbehebung und häufig gestellte Fragen
Sie möchten mehr über die verschiedenen projektbezogenen Attribute (wie project und user_project_override) erfahren.
In diesem Leitfaden werden die folgenden Terraform-Attribute für die Arbeit mit „Projekten“ verwendet.
project innerhalb eines resource-Blocks
Empfohlen: Fügen Sie nach Möglichkeit das Attribut project in jeden resource-Block ein.
Wenn Sie ein Projektattribut angeben, erstellt Terraform die im Ressourcenblock angegebene Infrastruktur im angegebenen Projekt. In diesem Leitfaden und in unseren Beispielkonfigurationsdateien wird diese Vorgehensweise verwendet.
Sehen Sie sich die offizielle Terraform-Dokumentation zu project an.
user_project_override im Block provider
Für die Bereitstellung der meisten Ressourcen sollten Sie user_project_override = true verwenden. Das bedeutet, dass das Kontingent für Ihr eigenes Firebase-Projekt geprüft wird. Wenn Sie Ihr neues Projekt so einrichten möchten, dass Kontingentprüfungen akzeptiert werden, müssen Sie zuerst user_project_override = false verwenden.
Sie erhalten diesen Fehler:
generic::permission_denied: Firebase Tos Not Accepted.
Das Nutzerkonto, mit dem Sie gcloud CLI-Befehle ausführen, muss die Firebase-Nutzungsbedingungen akzeptiert haben.
Sie können dies prüfen, indem Sie sich mit dem Nutzerkonto in einem Browser anmelden und versuchen, ein vorhandenes Firebase-Projekt in der Firebase Console aufzurufen. Wenn Sie ein vorhandenes Firebase-Projekt aufrufen können, hat das Nutzerkonto die Firebase-Nutzungsbedingungen akzeptiert.
Wenn Sie keine vorhandenen Firebase-Projekte sehen, hat das Nutzerkonto die Firebase-Nutzungsbedingungen wahrscheinlich nicht akzeptiert. Erstellen Sie dazu ein neues Firebase-Projekt über die Firebase Console und akzeptieren Sie die Firebase-Nutzungsbedingungen im Rahmen der Projekterstellung. Sie können dieses Projekt sofort über die Projekteinstellungen in der Console löschen.
Nachdem Sie terraform apply ausgeführt haben, wird der folgende Fehler angezeigt: 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 Erstellung einer Ressource ist fehlgeschlagen, aber wenn Sie terraform apply noch einmal ausführen, wird ALREADY_EXISTS angezeigt.
Dies kann auf eine Verzögerung bei der Weitergabe in verschiedenen Systemen zurückzuführen sein. Versuchen Sie, dieses Problem zu beheben, indem Sie die Ressource mit terraform import in den Terraform-Zustand importieren. Versuchen Sie dann, terraform apply noch einmal auszuführen.
Informationen zum Importieren der einzelnen Ressourcen finden Sie im Abschnitt „Import“ der jeweiligen Terraform-Dokumentation (z. B. in der Dokumentation „Import“ für Cloud Firestore).
Wenn Sie mit Cloud Firestore arbeiten, erhalten Sie diesen Fehler: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
Wie der Fehler vermuten lässt, versucht Terraform möglicherweise, mehrere Indexe bereitzustellen und/oder gleichzeitig ein Dokument zu erstellen, und ist auf einen Nebenläufigkeitsfehler gestoßen.
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ß, für welches Projekt das Kontingent geprüft werden soll. Prüfen Sie zur Fehlerbehebung Folgendes im Block resource:
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 (kein Alias) verwenden, was in den Firebase-Beispielen google-beta ist.
Beim Erstellen eines neuen Google Cloud-Projekts erhalten Sie die Fehlermeldung, dass die für das neue Projekt angegebene Projekt-ID bereits vorhanden ist.
Hier sind die möglichen Gründe, warum die Projekt-ID bereits vorhanden ist:
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 (im Zustand „Vorläufig gelöscht“).
Lösung: Wenn Sie der Meinung sind, dass das mit der ID verknüpfte Projekt Ihnen gehört, prüfen Sie den Status des Projekts mit der projects.get REST API.
Das mit dieser ID verknüpfte Projekt ist unter dem aktuellen Nutzer vorhanden. Eine mögliche Ursache für den Fehler könnte sein, dass ein vorheriger terraform apply unterbrochen wurde.
Lösung: Führen Sie die folgenden Befehle aus: terraform import google_project.default PROJECT_ID
und dann terraform import google_firebase_project.default PROJECT_ID
Warum müssen Sie die Standardinstanz Cloud Firestore vor dem Standard-Bucket Cloud Storage bereitstellen?
Wenn Sie Ihren Standard-Cloud Storage-Bucket (über google_app_engine_application) vor der Bereitstellung Ihrer Standard-Cloud Firestore-Instanz bereitgestellt haben, werden Sie feststellen, dass Ihre Standard-Cloud Firestore-Instanz bereits bereitgestellt wurde. Die bereitgestellte Datenbankinstanz befindet sich im Datastore-Modus. Das bedeutet, dass sie für Firebase SDKs, die Authentifizierung oder Firebase Security Rulesnicht zugänglich ist. Wenn Sie Cloud Firestore mit diesen Firebase-Diensten verwenden möchten, müssen Sie die Datenbank leeren und dann ihren Datenbanktyp in der Google Cloud-Konsole ändern.
Wenn Sie versuchen, Cloud Storage (über google_app_engine_application) und dann Ihre Standardinstanz Cloud Firestore bereitzustellen, erhalten Sie die Fehlermeldung Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
Wenn Sie den Standard-Cloud Storage-Bucket eines Projekts (über google_app_engine_application) bereitstellen und das Projekt noch keine Standard-Cloud Firestore-Instanz hat, stellt google_app_engine_application automatisch die Standard-Cloud Firestore-Instanz des Projekts bereit.
Da die Standardinstanz Cloud Firestore Ihres Projekts bereits bereitgestellt ist, gibt google_firestore_database einen Fehler aus, wenn Sie versuchen, diese Standardinstanz noch einmal explizit bereitzustellen.
Nachdem die Standard-Cloud Firestore-Instanz des Projekts bereitgestellt wurde, können Sie sie nicht mehr „neu bereitstellen“ oder ihren Standort ändern. Die bereitgestellte Datenbankinstanz befindet sich im Datastore-Modus. Das bedeutet, dass sie für Firebase SDKs, die Authentifizierung oder Firebase Security Rulesnicht zugänglich ist. Wenn Sie Cloud Firestore mit diesen Firebase-Diensten verwenden möchten, müssen Sie die Datenbank leeren und dann ihren Datenbanktyp in der Google Cloud-Konsole ändern.