Pierwsze kroki z Terraform i Firebase
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Firebase zaczyna obsługiwać Terraform.
Jeśli jesteś członkiem zespołu, który chce zautomatyzować i ustandaryzować tworzenie projektów Firebase z udostępnionymi określonymi zasobami i włączonymi usługami, Terraform z Firebase może być dla Ciebie dobrym rozwiązaniem.
Podstawowy przepływ pracy podczas korzystania z Terraform z Firebase obejmuje:
utworzenie i dostosowanie pliku konfiguracji Terraform (plik .tf), który określa infrastrukturę, którą chcesz udostępnić (czyli zasoby, które chcesz udostępnić, i usługi, które chcesz włączyć);
Używanie poleceń gcloud CLI, które współpracują z Terraform, do obsługi infrastruktury określonej w pliku .tf.
Tworzenie zasobników lub instancji bazy danych Cloud Storage i wdrażanie dla nich Firebase Security Rules.
Tworzę backendy, kompilacje i inne powiązane zasoby (Firebase App Hosting).
Do wykonania wszystkich tych zadań możesz użyć standardowych plików konfiguracji i poleceń Terraform. Aby Ci w tym pomóc, udostępniliśmy przykładowe pliki konfiguracji Terraform dla kilku typowych przypadków użycia.
Ogólny przepływ pracy dotyczący korzystania z Terraform z Firebase
Wymagania wstępne
Ten przewodnik jest wprowadzeniem do korzystania z Terraform z Firebase, więc zakłada podstawową znajomość Terraform. Zanim rozpoczniesz ten proces, upewnij się, że zostały spełnione te wymagania wstępne.
Zainstaluj Terraform i zapoznaj się z tym narzędziem, korzystając z oficjalnych samouczków.
Wyświetlanie wymagań dotyczących kont użytkowników i kont usługi
Jeśli używasz konta użytkownika, musisz zaakceptować Warunki korzystania z usługi Firebase. Jeśli możesz wyświetlić projekt Firebase w konsoli Firebase, oznacza to, że Warunki korzystania z usługi Firebase zostały przez Ciebie zaakceptowane.
Aby Terraform mógł wykonywać określone działania (np. tworzyć projekty), muszą być spełnione te warunki:
Użytkownik lub konto usługi musi mieć odpowiedni dostęp uprawnień do tych działań.
Jeśli konto użytkownika lub konto usługi należy do organizacji Google Cloud, zasady organizacji muszą zezwalać temu kontu na wykonywanie tych działań.
Krok 1. Utwórz i dostosuj plik konfiguracji Terraform
Plik konfiguracji Terraform musi zawierać 2 główne sekcje (które szczegółowo opisujemy poniżej):
Konfiguracja provider jest wymagana niezależnie od tego, z jakich usług Firebase korzystasz.
Utwórz plik konfiguracji Terraform (np. plik main.tf) w katalogu lokalnym.
W tym przewodniku użyjesz tego pliku konfiguracji, aby określić zarówno konfigurację provider, jak i całą infrastrukturę, którą ma utworzyć Terraform. Pamiętaj jednak, że masz różne opcje konfiguracji dostawcy.
Wyświetl opcje dotyczące sposobu uwzględniania konfiguracji provider
Masz te opcje dołączenia konfiguracji provider do pozostałej części konfiguracji Terraform:
Opcja 1. Umieść go na początku pojedynczego pliku konfiguracji Terraform .tf (jak pokazano w tym przewodniku).
Użyj tej opcji, jeśli dopiero zaczynasz korzystać z Terraform lub chcesz wypróbować Terraform z Firebase.
Opcja 2. Umieść go w osobnym pliku .tf (np. pliku provider.tf), innym niż plik .tf, w którym określasz infrastrukturę do utworzenia (np. plik main.tf).
Użyj tej opcji, jeśli należysz do większego zespołu, który musi ujednolicić konfigurację.
Podczas uruchamiania poleceń Terraform pliki provider.tf i main.tf muszą znajdować się w tym samym katalogu.
U góry pliku main.tf umieść tę konfigurację provider.
Musisz używać dostawcy google-beta, ponieważ jest to wersja beta Firebase z Terraform. Podczas korzystania z niej w środowisku produkcyjnym zachowaj ostrożność.
# 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}
Dowiedz się więcej o różnych typach atrybutów związanych z projektem (w tym o tym, co w tym przewodniku nazywamy „projektem sprawdzania limitów”) podczas korzystania z Terraform z Firebase.
Przejdź do następnej sekcji, aby dokończyć plik konfiguracji i określić, jaką infrastrukturę chcesz utworzyć.
Określanie infrastruktury do utworzenia za pomocą bloków resource
W pliku konfiguracji Terraform (w tym przewodniku jest to plik main.tf) musisz określić całą infrastrukturę, którą Terraform ma utworzyć (czyli wszystkie zasoby, które chcesz udostępnić, i wszystkie usługi, które chcesz włączyć). W tym przewodniku znajdziesz pełną listę wszystkich zasobów Firebase obsługujących Terraform.
Otwórz plik main.tf.
W konfiguracji provider uwzględnij tę konfigurację bloków resource.
Ten podstawowy przykład tworzy nowy projekt w Firebase, a następnie tworzy aplikację na Androida w tym projekcie.
# 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,]}
Wyświetl wersję tego przykładowego pliku konfiguracji z licznymi adnotacjami
Jeśli nie znasz infrastruktury projektów i aplikacji jako zasobów, zapoznaj się z tą dokumentacją:
# 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,]}
Krok 2. Uruchom polecenia Terraform, aby utworzyć określoną infrastrukturę
Aby udostępnić zasoby i włączyć usługi określone w pliku main.tf, uruchom te polecenia w tym samym katalogu, w którym znajduje się plik main.tf.
Szczegółowe informacje o tych poleceniach znajdziesz w dokumentacji Terraform.
Jeśli po raz pierwszy uruchamiasz polecenia Terraform w katalogu, musisz zainicjować katalog konfiguracji i zainstalować dostawcę Google Terraform. Aby to zrobić, uruchom to polecenie:
terraform init
Utwórz infrastrukturę określoną w pliku main.tf, uruchamiając to polecenie:
terraform apply
Sprawdź, czy wszystko zostało udostępnione lub włączone zgodnie z oczekiwaniami:
Opcja 1. Wyświetl konfigurację w terminalu, uruchamiając to polecenie:
terraform show
Opcja 2. Wyświetl projekt w Firebase w konsoli Firebase.
Zasoby Firebase z obsługą Terraform
Te zasoby Firebase i Google obsługują Terraform. Cały czas dodajemy nowe materiały. Jeśli nie widzisz zasobu, którym chcesz zarządzać za pomocą Terraform, sprawdź za jakiś czas, czy jest on dostępny, lub poproś o niego, zgłaszając problem w repozytorium GitHub.
google_identity_platform_config – włącz Google Cloud Identity Platform (GCIP) (która jest backendem dla Firebase Authentication) i podaj ustawienia uwierzytelniania na poziomie projektu.
Projekt, w którym Terraform włączy GCIP lub Firebase Authentication, musi być objęty abonamentem Blaze (czyli musi być powiązany z kontem Cloud Billing). Możesz to zrobić automatycznie, ustawiając atrybut billing_account w zasobie google_project.
Ten zasób umożliwia też korzystanie z większej liczby konfiguracji, takich jak lokalne metody logowania (np. uwierzytelnianie anonimowe, za pomocą adresu e-mail i hasła oraz telefonu), a także funkcje blokujące i autoryzowane domeny.
Konfigurowanie uwierzytelniania wielopoziomowego (MFA) za pomocą Terraform
Firebase App Hosting
google_firebase_app_hosting_backend – utwórz backend Firebase App Hosting i zarządzaj nim, w tym jego połączeniem z repozytorium GitHub i aktywną gałęzią na potrzeby ciągłego wdrażania.
Wdrażanie Firebase Realtime Database Security Rules za pomocą Terraform (dowiedz się, jak wdrożyć te Security Rules za pomocą innych narzędzi, w tym opcji programistycznych)
Przykładowe pliki konfiguracji Terraform dla typowych przypadków użycia
Konfigurowanie Firebase Authentication za pomocą GCIP
Ta konfiguracja tworzy nowy projekt Google Cloud,
powiązuje go z kontem Cloud Billing (w przypadku Firebase Authentication z GCIP wymagany jest abonament Blaze),
włącza usługi Firebase w projekcie,
konfiguruje Firebase Authentication z GCIP
oraz rejestruje w projekcie 3 różne typy aplikacji.
Pamiętaj, że włączenie GCIP jest wymagane do skonfigurowania Firebase Authentication za pomocą Terraform.
# Creates a new Google Cloud project.resource"google_project""auth"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for Firebase Authentication with GCIP).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""auth"{provider=google-beta.no_user_project_overrideproject=google_project.auth.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","identitytoolkit.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""auth"{provider=google-betaproject=google_project.auth.project_iddepends_on=[google_project_service.auth,]}# Creates an Identity Platform config.# Also enables Firebase Authentication with Identity Platform in the project if not.resource"google_identity_platform_config""auth"{provider=google-betaproject=google_firebase_project.auth.project # Auto-deletes anonymous usersautodelete_anonymous_users=true # Configures local sign-in methods, like anonymous, email/password, and phone authentication.sign_in{allow_duplicate_emails=trueanonymous{enabled=true}email{enabled=truepassword_required=false}phone_number{enabled=truetest_phone_numbers={"+11231231234"="000000"}}} # Sets an SMS region policy.sms_region_config{allowlist_only{allowed_regions=["US","CA",]}} # Configures blocking functions.blocking_functions{triggers{event_type="beforeSignIn"function_uri="https://us-east1-${google_project.auth.project_id}.cloudfunctions.net/before-sign-in"}forward_inbound_credentials{refresh_token=trueaccess_token=trueid_token=true}} # Configures a temporary quota for new signups for anonymous, email/password, and phone number.quota{sign_up_quota_config{quota=1000start_time=""quota_duration="7200s"}} # Configures authorized domains.authorized_domains=["localhost","${google_project.auth.project_id}.firebaseapp.com","${google_project.auth.project_id}.web.app",]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Web app"}
Udostępnianie usługi Firebase SQL Connect
Ta konfiguracja tworzy nowy projekt Google Cloud, włącza w nim usługi Firebase i udostępnia usługę SQL Connect.
# Creates a new Google Cloud project.resource"google_project""dataconnect"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Data Connect).billing_account="000000-000000-000000" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.dataconnect.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedataconnect.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""dataconnect"{provider=google-betaproject=google_project.dataconnect.project_iddepends_on=[google_project_service.services]}# Create a Firebase Data Connect serviceresource"google_firebase_data_connect_service""dataconnect-default"{project=google_firebase_project.dataconnect.projectlocation="name-of-region-for-service"service_id="${google_firebase_project.dataconnect.project}-default-fdc"deletion_policy="DEFAULT"}
Ta konfiguracja tworzy nowy projekt Google Cloud,
włącza w nim usługi Firebase,
udostępnia domyślną instancję Realtime Database projektu
oraz rejestruje w projekcie 3 różne typy aplikacji.
# 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"}
Udostępnianie wielu instancji Firebase Realtime Database
Ta konfiguracja tworzy nowy projekt Google Cloud,
powiązuje go z kontem Cloud Billing (w przypadku wielu instancji Realtime Database wymagany jest abonament Blaze),
włącza usługi Firebase w projekcie,
udostępnia wiele instancji Realtime Database (w tym domyślną instancję Realtime Database projektu)
oraz rejestruje w projekcie 3 różne typy aplikacji.
# 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"}
Udostępnij domyślną instancję Cloud Firestore
Ta konfiguracja tworzy nowy projekt Google Cloud, włącza w nim usługi Firebase, udostępnia domyślną instancję Cloud Firestore projektu i rejestruje w nim 3 różne typy aplikacji.
Udostępnia też Firebase Security Rules dla domyślnej instancji Cloud Firestore, tworzy indeks Cloud Firestore i dodaje dokument Cloud Firestore z danymi początkowymi.
# 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"}
To jest zestaw reguł Cloud Firestore Security Rules, który powinien znajdować się w pliku lokalnym o nazwie firestore.rules.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /some_collection/{document} {
allow read, create, update: if request.auth != null;
}
}
}
Udostępnianie domyślnego zasobnika Cloud Storage
Udostępnij dodatkowe zasobniki (Cloud Storage)
Ta konfiguracja tworzy nowy projekt Google Cloud,
powiązuje go z kontem Cloud Billing (w przypadku dodatkowych zasobników wymagany jest abonament Blaze),
włącza usługi Firebase w projekcie,
udostępnia dodatkowe, niedomyślne zasobniki Cloud Storage
oraz rejestruje w projekcie 3 różne typy aplikacji.
Udostępnia też Firebase Security Rules dla każdego zasobnika Cloud Storage i przesyła plik do jednego z zasobników Cloud Storage.
# Creates a new Google Cloud project.resource"google_project""storage-multi"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for multiple Cloud Storage buckets).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""storage-multi"{provider=google-beta.no_user_project_overrideproject=google_project.storage-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddepends_on=[google_project_service.storage-multi]}# Provisions a Cloud Storage bucket.resource"google_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locationslocation="name-of-region-for-bucket"}# Provisions an additional Cloud Storage bucket.resource"google_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-additional-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locations # This location does not need to be the same as the existing Storage bucket.location="name-of-region-for-additional-bucket"}# Makes the first Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-1.name}# Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-2.name}# Creates a ruleset of Firebase Security Rules from a local file.resource"google_firebaserules_ruleset""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectsource{files{ # Write security rules in a local file named "storage.rules" # Learn more: https://firebase.google.com/docs/storage/security/get-startedname="storage.rules"content=file("storage.rules")}}}# Releases the ruleset to the first Storage bucket.resource"google_firebaserules_release""bucket-1"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-1.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Releases the ruleset to the additional Storage bucket.resource"google_firebaserules_release""bucket-2"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-2.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Uploads a new file to the first Storage bucket.# Do not use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture-multi"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_storage_bucket.bucket-1.name}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Web app"}
To jest zestaw reguł Cloud Storage Security Rules, który powinien znajdować się w pliku lokalnym o nazwie storage.rules.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /some_folder/{fileName} {
allow read, write: if request.auth != null;
}
}
}
Ochrona zasobu interfejsu API za pomocą Firebase App Check
Ta konfiguracja tworzy nowy projekt Google Cloud,
włącza w nim usługi Firebase oraz
konfiguruje i włącza egzekwowanie Firebase App Check dla Cloud Firestore,
aby dostęp do tej usługi był możliwy tylko z Twojej aplikacji na Androida.
# 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]}
Zainstaluj instancję Firebase Extension
Ta konfiguracja tworzy nowy projekt Google Cloud, włącza w nim usługi Firebase i instaluje w nim nową instancję Firebase Extension. Jeśli instancja już istnieje, jej parametry są aktualizowane na podstawie wartości podanych w konfiguracji.
# 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"}}}
Włącz i chroń Firebase AI Logic
Ta konfiguracja tworzy nowy projekt Google Cloud, włącza w nim usługi Firebase, w tym Firebase AI Logic, oraz konfiguruje i włącza egzekwowanie Firebase App Check dla Firebase AI Logic, aby dostęp do tej usługi był możliwy tylko z Twoich aplikacji.
# 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"}}}
Ręczne udostępnianie backendu App Hosting
Ta konfiguracja pokazuje, jak ręcznie udostępnić backend App Hosting za pomocą Terraform. To podejście zapewnia szczegółową kontrolę nad tworzonymi zasobami, ale wymaga zdefiniowania każdego zasobu osobno. Jest to przydatne, gdy chcesz dostosować backend poza opcjami domyślnymi.
# 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}}}
Obsługa backendu App Hosting za pomocą GitHuba
Ta konfiguracja pokazuje, jak udostępnić backend App Hosting za pomocą kodu aplikacji przechowywanego w repozytorium GitHub. Takie podejście umożliwia zarządzanie infrastrukturą i jej aktualizowanie za pomocą żądań pull na GitHubie i potoków CI/CD zgodnie z typowym modelem wdrożeń App Hosting.
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","serviceusage.googleapis.com","developerconnect.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}### Setting up Firebase App Hosting #### Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS"service_account=google_service_account.service_account.emailcodebase{repository=google_developer_connect_git_repository_link.my-repository.nameroot_directory="/"}}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/developerconnect.readTokenAccessor","roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Configures auto rollout from GitHubresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idrollout_policy{codebase_branch="main" # Or another branch}}###### Setting up a connection to GitHub #### Provisions Service Agent for Developer Connectresource"google_project_service_identity""devconnect-p4sa"{provider=google-betaproject=google_firebase_project.apphosting.projectservice="developerconnect.googleapis.com"}# Adds permission to Developer Connect Service Agent to manager GitHub tokensresource"google_project_iam_member""devconnect-secret"{provider=google-betaproject=google_firebase_project.apphosting.projectrole="roles/secretmanager.admin"member=google_project_service_identity.devconnect-p4sa.member}# Connects to a GitHub accountresource"google_developer_connect_connection""my-connection"{provider=google-betaproject=google_firebase_project.apphosting.project # Must match the google_firebase_app_hosting_backend's locationlocation="name-of-region-for-service" # Must be `firebase-app-hosting-github-oauth`connection_id="firebase-app-hosting-github-oauth"github_config{github_app="FIREBASE"}depends_on=[google_project_iam_member.devconnect-secret]}# Follow the next steps to set up the GitHub connection# Tip: Run terraform refresh to obtain the outputoutput"next_steps"{description="Follow the action_uri if present to continue setup"value=google_developer_connect_connection.my-connection.installation_state}# Links a GitHub repo to the projectresource"google_developer_connect_git_repository_link""my-repository"{provider=google-betaproject=google_firebase_project.apphosting.projectlocation=google_developer_connect_connection.my-connection.locationgit_repository_link_id="my-repo-id"parent_connection=google_developer_connect_connection.my-connection.connection_idclone_uri="https://github.com/myuser/myrepo.git"}###
Rozwiązywanie problemów i najczęstsze pytania
Chcesz dowiedzieć się więcej o różnych atrybutach związanych z projektem (takich jak project i user_project_override).
W tym przewodniku podczas pracy z „projektami” używane są te atrybuty Terraform.
project w bloku resource
Zalecane: jeśli to możliwe, uwzględnij atrybut project w każdym bloku resource.
Dzięki uwzględnieniu atrybutu projektu Terraform utworzy infrastrukturę określoną w bloku zasobów w określonym projekcie. W tym przewodniku i naszych przykładowych plikach konfiguracji stosujemy tę praktykę.
Zapoznaj się z oficjalną dokumentacją Terraform dotyczącą project.
user_project_override w bloku provider
Do obsługi większości zasobów należy używać user_project_override = true, co oznacza sprawdzanie limitu w projekcie w Firebase. Aby jednak skonfigurować nowy projekt tak, aby mógł akceptować kontrole limitów, musisz najpierw użyć user_project_override = false.
Pojawia się ten błąd: generic::permission_denied: Firebase Tos Not Accepted.
Upewnij się, że konto użytkownika, którego używasz do uruchamiania poleceń gcloud CLI, zaakceptowało Warunki korzystania z usługi Firebase.
Możesz to sprawdzić, logując się w przeglądarce na konto użytkownika i próbując wyświetlić istniejący projekt w Firebase w konsoli Firebase. Jeśli możesz wyświetlić istniejący projekt w Firebase, oznacza to, że konto użytkownika zaakceptowało Warunki korzystania z usługi Firebase.
Jeśli nie widzisz żadnego istniejącego projektu w Firebase, prawdopodobnie na koncie użytkownika nie zaakceptowano Warunków korzystania z usługi Firebase. Aby rozwiązać ten problem, utwórz nowy projekt w Firebase w konsoli Firebase i zaakceptuj Warunki korzystania z usługi Firebase podczas tworzenia projektu. Możesz natychmiast usunąć ten projekt w Ustawieniach projektu w konsoli.
Po uruchomieniu terraform apply pojawia się ten błąd: generic::permission_denied: IAM authority does not have the
permission.
Poczekaj kilka minut i spróbuj ponownie uruchomić terraform apply.
Nie udało się utworzyć zasobu, ale gdy ponownie uruchamiasz terraform apply, pojawia się komunikat ALREADY_EXISTS.
Może to być spowodowane opóźnieniem propagacji w różnych systemach. Spróbuj rozwiązać ten problem, importując zasób do stanu Terraform za pomocą polecenia terraform import. Następnie spróbuj ponownie uruchomić terraform apply.
Podczas pracy z Cloud Firestore pojawia się ten błąd: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
Jak sugeruje błąd, Terraform może próbować udostępnić wiele indeksów lub utworzyć dokument w tym samym czasie i napotkać błąd równoczesności.
Spróbuj ponownie uruchomić terraform apply.
Pojawia się ten błąd: "you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes".
Ten błąd oznacza, że Terraform nie wie, który projekt ma sprawdzić pod kątem limitu. Aby rozwiązać ten problem, sprawdź w bloku resource, czy:
Upewnij się, że podano wartość atrybutu project.
Upewnij się, że używasz dostawcy z user_project_override = true (bez aliasu), który w przykładach Firebase jest oznaczony jako google-beta.
Podczas tworzenia nowego projektu Google Cloud pojawia się błąd informujący, że identyfikator projektu określony dla nowego projektu już istnieje.
Oto możliwe przyczyny, dla których identyfikator projektu może już istnieć:
Projekt powiązany z tym identyfikatorem należy do kogoś innego.
Aby rozwiązać ten problem: wybierz inny identyfikator projektu.
Projekt powiązany z tym identyfikatorem został niedawno usunięty (jest w stanie usunięcia nietrwałego).
Aby rozwiązać problem: jeśli uważasz, że projekt powiązany z identyfikatorem należy do Ciebie, sprawdź jego stan za pomocą interfejsu API REST projects.get.
Projekt powiązany z tym identyfikatorem istnieje i jest przypisany do bieżącego użytkownika. Możliwą przyczyną błędu może być przerwanie poprzedniego procesu terraform apply.
Aby rozwiązać problem: uruchom te polecenia: terraform import google_project.default PROJECT_ID
a następnie terraform import google_firebase_project.default PROJECT_ID
Jeśli domyślny zasobnik Cloud Storage został udostępniony (za pomocą google_app_engine_application) przed próbą udostępnienia domyślnej instancji Cloud Firestore, okaże się, że domyślna instancja Cloud Firestore została już udostępniona. Zwróć uwagę, że udostępniona instancja bazy danych jest w trybie Datastore, co oznacza, że nie jest dostępna dla pakietów SDK Firebase, uwierzytelniania ani Firebase Security Rules. Jeśli chcesz używać Cloud Firestore z tymi usługami Firebase, musisz opróżnić bazę danych, a następnie zmienić jej typ w konsoli Google Cloud.
Podczas próby udostępnienia Cloud Storage (za pomocą google_app_engine_application), a następnie domyślnej instancji Cloud Firestore, pojawia się ten błąd: Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
Gdy udostępniasz domyślny zasobnik Cloud Storage projektu (za pomocą google_app_engine_application), a projekt nie ma jeszcze domyślnej instancji Cloud Firestore, google_app_engine_application automatycznie udostępnia domyślną instancję Cloud Firestore projektu.
Ponieważ domyślna instancja Cloud Firestore Twojego projektu jest już udostępniona, google_firestore_database zwróci błąd, jeśli spróbujesz ponownie udostępnić tę domyślną instancję.
Po udostępnieniu domyślnej instancji Cloud Firestore projektu nie można jej „ponownie udostępnić” ani zmienić jej lokalizacji. Zwróć uwagę, że udostępniona instancja bazy danych jest w trybie Datastore, co oznacza, że nie jest dostępna dla pakietów SDK Firebase, uwierzytelniania ani Firebase Security Rules. Jeśli chcesz używać Cloud Firestore z tymi usługami Firebase, musisz opróżnić bazę danych, a następnie zmienić jej typ w konsoli Google Cloud.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2026-11-10 UTC."],[],[]]