Firebase zaczyna obsługiwać
Terraform.
Jeśli należysz do zespołu, który chce zautomatyzować i ustandaryzować tworzenie Firebase
projekty z określonymi zasobami i włączonymi usługami, a następnie
Może Ci się przydać Terraform z Firebase.
Podstawowy proces korzystania z Terraform z Firebase obejmuje:
Tworzenie i dostosowywanie pliku konfiguracji Terraform (pliku .tf), który określa infrastrukturę, którą chcesz zainicjować (czyli zasoby, które chcesz zainicjować, i usługi, które chcesz włączyć).
za pomocą poleceń gcloud CLI, które łączą się z Terraform w celu:
udostępnić infrastrukturę określoną w pliku .tf.
Tworzę zasobniki lub instancje bazy danych Cloud Storage i wdrażam je
Firebase Security Rules.
Aby to zrobić, możesz użyć standardowych plików konfiguracyjnych Terraform i poleceń
zadania. Aby Ci w tym pomóc, przygotowaliśmy
przykładowe pliki konfiguracyjne Terraform do różnych zastosowań
przypadków.
Ogólny proces korzystania z Terraform w Firebase
Wymagania wstępne
Ten przewodnik zawiera wprowadzenie do korzystania z Terraform i Firebase, więc zakłada, że zakłada się,
i podstawowej biegłości w Terraform. Upewnij się, że zostały wykonane te czynności
wymagań wstępnych, zanim rozpoczniesz ten przepływ pracy.
Zainstaluj Terraform
i zapoznaj się z Terraform, korzystając z ich oficjalnych samouczków.
Wymagania dotyczące kont użytkowników i kont usługi
Jeśli używasz konta użytkownika, musisz zaakceptować Warunki korzystania z usługi Firebase
Usługa (Warunki korzystania z Firebase). Jeśli możesz wyświetlić projekt Firebase w Firebase konsoli, oznacza to, że akceptujesz Warunki korzystania z usługi Firebase.
Aby Terraform mógł wykonywać określone działania (na przykład tworzyć projekty), funkcje
musi być spełniony ten warunek:
Użytkownik lub konto usługi musi mieć odpowiednie uprawnienia dostępu do
tych działań.
Jeśli konto użytkownika lub usługi należy do organizacji Google Cloud,
to zasady organizacji muszą zezwalać kontu na wykonanie tych działań.
Krok 1. Utwórz i dostosuj plik konfiguracyjny Terraform
Plik konfiguracji Terraform musi mieć 2 główne sekcje (które zostały szczegółowo opisane
poniżej):
Konfiguracja provider jest wymagana niezależnie od tego, z których usług Firebase chcesz korzystać.
Utwórz plik konfiguracyjny Terraform (np. main.tf) w lokalnym katalogu
katalogu.
W tym przewodniku przy użyciu tego pliku konfiguracyjnego określisz zarówno provider,
konfiguracji i całej infrastruktury, którą Terraform ma utworzyć. Uwaga:
ale możesz uwzględnić konfigurację dostawcy.
Konfigurację provider możesz dodać do tych
reszta konfiguracji Terraform:
Opcja 1: umieść ją na początku pojedynczego pliku konfiguracyjnego Terraform .tf (jak pokazano w tym przewodniku).
Użyj tej opcji, jeśli dopiero zaczynasz korzystać z Terraform lub
wypróbowuję Terraform z Firebase.
Opcja 2: dodaj ją w osobnym pliku .tf (takim jak provider.tf
), poza plikiem .tf, w którym określasz infrastrukturę
(np. main.tf).
Skorzystaj z tej opcji, jeśli należysz do większego zespołu, który musi:
ujednolicić konfigurację.
Gdy uruchamiasz polecenia Terraform, zarówno plik provider.tf, jak i
main.tf plik musi znajdować się w tym samym katalogu.
Na początku pliku main.tf umieść tę konfigurację provider.
Musisz użyć dostawcy google-beta, ponieważ jest to wersja beta usługi
za pomocą Firebase z Terraform. Zachowaj ostrożność podczas korzystania z wersji produkcyjnej.
# Terraform configuration to set up providers by version.terraform{required_providers{google-beta={source="hashicorp/google-beta"version="~> 5.0"}}}# Configures the provider to use the resource block's specified project for quota checks.provider"google-beta"{user_project_override=true}# Configures the provider to not use the resource block's specified project for quota checks.# This provider should only be used during project creation and initializing services.provider"google-beta"{alias="no_user_project_override"user_project_override=false}
Przejdź do następnej sekcji, aby uzupełnić plik konfiguracyjny i określić, co
i infrastrukturze.
Określanie infrastruktury do utworzenia za pomocą blokad resource
W pliku konfiguracji Terraform (w tym przewodniku, czyli w pliku main.tf) musisz wykonać
określ 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
w tym przewodniku znajdziesz pełną listę
Zasoby Firebase obsługujące Terraform
Otwórz plik main.tf.
W konfiguracji provider uwzględnij tę konfigurację: resource
bloki.
W tym podstawowym przykładzie utworzymy nowy projekt Firebase, a potem w jego ramach aplikację Firebase na Androida.
# 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 dużą
wersja z adnotacjami tego przykładowego pliku konfiguracyjnego
Jeśli nie znacie infrastruktury projektów i aplikacji,
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 zainicjować zasoby i włączyć usługi określone w pliku main.tf, uruchom podane niżej polecenia w tym samym katalogu co plik main.tf.
Szczegółowe informacje o tych poleceniach znajdziesz w dokumentacji Terraform.
Jeśli po raz pierwszy uruchamiasz w tym katalogu polecenia Terraform, musisz zainicjować katalog konfiguracji i zainstalować dostawcę Terraform Google. W tym celu uruchom następujące polecenie:
terraform init
Utwórz infrastrukturę określoną w pliku main.tf, uruchamiając polecenie
to polecenie:
terraform apply
Sprawdź, czy wszystko zostało udostępnione lub włączone zgodnie z oczekiwaniami:
Opcja 1. Sprawdź konfigurację wydrukowaną w terminalu, uruchamiając polecenie
to polecenie:
Poniższe zasoby Firebase i Google obsługują Terraform. Jesteśmy
dodając coraz więcej zasobów. Jeśli więc nie widzisz zasobu,
jeśli chcesz zarządzać nią za pomocą Terraform, sprawdź za jakiś czas, czy jest ona dostępna lub
poproś o to do
zgłaszanie problemu w repozytorium GitHub.
google_identity_platform_config –
włącz usługę Google Cloud Identity Platform (GCIP) (czyli backend 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 projekt musi mieć
powiązane konto Cloud Billing). Możesz to zrobić automatycznie przez
ustawianie
billing_account
w zasobie google_project.
Ten zasób umożliwia też większą liczbę konfiguracji, takich jak lokalne metody logowania, na przykład anonimowe, e-mail/hasło i uwierzytelnianie przez telefon, a także funkcje blokowania i autoryzowane domeny.
Wdrażanie Firebase Realtime Database Security Rules za pomocą Terraform (dowiedz się, jak
wdróż te Rules
za pomocą innych narzędzi, w tym opcji automatyzacji)
Przykładowe pliki konfiguracyjne Terraform do typowych przypadków użycia
Konfigurowanie usługi Firebase Authentication za pomocą interfejsu GCIP
Ta konfiguracja tworzy nowy projekt Google Cloud,
wiąże projekt z kontem Cloud Billing (abonament Blaze
jest wymagane w przypadku Firebase Authentication z GCIP),
włącza usługi Firebase dla projektu,
konfiguruje Firebase Authentication za pomocą GCIP,
i 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""auth"{provider=google-beta.no_user_project_overrideproject=google_project.auth.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","identitytoolkit.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""auth"{provider=google-betaproject=google_project.auth.project_iddepends_on=[google_project_service.auth,]}# Creates an Identity Platform config.# Also enables Firebase Authentication with Identity Platform in the project if not.resource"google_identity_platform_config""auth"{provider=google-betaproject=google_project.auth.project_id # Auto-deletes anonymous usersautodelete_anonymous_users=true # Configures local sign-in methods, like anonymous, email/password, and phone authentication.sign_in{allow_duplicate_emails=trueanonymous{enabled=true}email{enabled=truepassword_required=false}phone_number{enabled=truetest_phone_numbers={"+11231231234"="000000"}}} # Sets an SMS region policy.sms_region_config{allowlist_only{allowed_regions=["US","CA",]}} # Configures blocking functions.blocking_functions{triggers{event_type="beforeSignIn"function_uri="https://us-east1-${google_project.auth.project_id}.cloudfunctions.net/before-sign-in"}forward_inbound_credentials{refresh_token=trueaccess_token=trueid_token=true}} # Configures a temporary quota for new signups for anonymous, email/password, and phone number.quota{sign_up_quota_config{quota=1000start_time=""quota_duration="7200s"}} # Configures authorized domains.authorized_domains=["localhost","${google_project.auth.project_id}.firebaseapp.com","${google_project.auth.project_id}.web.app",] # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication.depends_on=[google_project_service.auth,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""auth"{provider=google-betaproject=google_project.auth.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.auth,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""auth"{provider=google-betaproject=google_project.auth.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.auth,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""auth"{provider=google-betaproject=google_project.auth.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.auth,]}
Ta konfiguracja tworzy nowy projekt Google Cloud,
włącza usługi Firebase dla projektu,
udostępnia domyślną instancję Realtime Database projektu,
i 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""rtdb"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""rtdb"{provider=google-betaproject=google_project.rtdb.project_id}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database"{provider=google-betaproject=google_project.rtdb.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb.project_id}-default-rtdb"type="DEFAULT_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database.depends_on=[google_firebase_project.rtdb,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb,]}
Tworzenie wielu instancji Firebase Realtime Database
Ta konfiguracja tworzy nowy projekt Google Cloud,
wiąże projekt z kontem Cloud Billing (abonament Blaze
jest wymagane w przypadku wielu instancji Realtime Database),
włącza usługi Firebase dla projektu,
udostępnia wiele instancji Realtime Database
(w tym domyślną instancję Realtime Database projektu)
i 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""rtdb-multi"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_id}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database-default"{provider=google-betaproject=google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb-multi.project_id}-default-rtdb"type="DEFAULT_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database.depends_on=[google_firebase_project.rtdb-multi,]}# Provisions an additional Realtime Database instance.resource"google_firebase_database_instance""database-additional"{provider=google-betaproject=google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations # This location doesn't need to be the same as the default database instance.region="name-of-region" # This value will become the first segment of the database's URL.instance_id="name-of-additional-database-instance"type="USER_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database.depends_on=[google_firebase_project.rtdb-multi,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb-multi,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb-multi,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb-multi,]}
Tworzenie instancji Cloud Firestore
Ta konfiguracja tworzy nowy projekt Google Cloud,
włącza usługi Firebase dla projektu,
udostępnia instancję Cloud Firestore projektu,
i rejestruje w projekcie 3 różne typy aplikacji.
Udostępnia też Firebase Security Rules dla instancji Cloud Firestore,
tworzy indeks Cloud Firestore,
i dodaje dokument Cloud Firestore z danymi wyjściowymi.
# Creates a new Google Cloud project.resource"google_project""firestore"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""firestore"{provider=google-beta.no_user_project_overrideproject=google_project.firestore.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firestore.googleapis.com","firebaserules.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""firestore"{provider=google-betaproject=google_project.firestore.project_id}# Provisions the Firestore database instance.resource"google_firestore_database""firestore"{provider=google-betaproject=google_project.firestore.project_idname="(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-locationlocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore.depends_on=[google_firebase_project.firestore,]}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore"{provider=google-betaproject=google_project.firestore.project_idsource{files{name="firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-startedcontent=file("firestore.rules")}} # Wait for Firestore to be provisioned before creating this ruleset.depends_on=[google_firestore_database.firestore,]}# Releases the ruleset for the Firestore instance.resource"google_firebaserules_release""firestore"{provider=google-betaname="cloud.firestore" # must be cloud.firestoreruleset_name=google_firebaserules_ruleset.firestore.nameproject=google_project.firestore.project_id # Wait for Firestore to be provisioned before releasing the ruleset.depends_on=[google_firestore_database.firestore,]}# Adds a new Firestore index.resource"google_firestore_index""indexes"{provider=google-betaproject=google_project.firestore.project_idcollection="quiz"query_scope="COLLECTION"fields{field_path="question"order="ASCENDING"}fields{field_path="answer"order="ASCENDING"} # Wait for Firestore to be provisioned before adding this index.depends_on=[google_firestore_database.firestore,]}# Adds a new Firestore document with seed data.# Don't use real end-user or production data in this seed document.resource"google_firestore_document""doc"{provider=google-betaproject=google_project.firestore.project_idcollection="quiz"document_id="question-1"fields="{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}" # Wait for Firestore to be provisioned before adding this document.depends_on=[google_firestore_database.firestore,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""firestore"{provider=google-betaproject=google_project.firestore.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.firestore,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""firestore"{provider=google-betaproject=google_project.firestore.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.firestore,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""firestore"{provider=google-betaproject=google_project.firestore.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.firestore,]}
To jest zbiór reguł Cloud Firestore Security Rules, który powinien znajdować się w pliku lokalnym
o nazwie firestore.rules.
Ta konfiguracja tworzy nowy projekt Google Cloud,
włącza usługi Firebase dla projektu,
udostępnia domyślny zasobnik Cloud Storage projektu,
i rejestruje w projekcie 3 różne typy aplikacji.
Udostępnia też Firebase Security Rules dla zasobnika Cloud Storage,
i przesyła plik do zasobnika.
# Creates a new Google Cloud project.resource"google_project""storage"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""storage"{provider=google-beta.no_user_project_overrideproject=google_project.storage.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""storage"{provider=google-betaproject=google_project.storage.project_id}# Provisions the default Cloud Storage bucket for the project via Google App Engine.resource"google_app_engine_application""default"{provider=google-betaproject=google_project.storage.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App.location_id="name-of-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ]}# Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""default-bucket"{provider=google-betaproject=google_project.storage.project_idbucket_id=google_app_engine_application.default.default_bucket}# Creates a ruleset of Cloud Storage Security Rules from a local file.resource"google_firebaserules_ruleset""storage"{provider=google-betaproject=google_project.storage.project_idsource{files{ # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-startedname="storage.rules"content=file("storage.rules")}} # Wait for the default Storage bucket to be provisioned before creating this ruleset.depends_on=[google_firebase_project.storage,]}# Releases the ruleset to the default Storage bucket.resource"google_firebaserules_release""default-bucket"{provider=google-betaname="firebase.storage/${google_app_engine_application.default.default_bucket}"ruleset_name="projects/${google_project.storage.project_id}/rulesets/${google_firebaserules_ruleset.storage.name}"project=google_project.storage.project_id}# Uploads a new file to the default Storage bucket.# Don't use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_app_engine_application.default.default_bucket}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage"{provider=google-betaproject=google_project.storage.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage"{provider=google-betaproject=google_project.storage.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage"{provider=google-betaproject=google_project.storage.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage,]}
To jest zbiór reguł Cloud Storage Security Rules, który powinien znajdować się w pliku lokalnym
o nazwie storage.rules.
Ta konfiguracja tworzy nowy projekt Google Cloud, łączy go z kontem Cloud Billing (abonament Blaze jest wymagany w przypadku wielu zasobników), włącza usługi Firebase w projekcie, udostępnia wiele zasobników Cloud Storage (w tym domyślny zasób Cloud Storage projektu) i rejestruje w projekcie 3 różne typy aplikacji.
Udostępnia też Firebase Security Rules dla zasobników Cloud Storage,
i przesyła plik do domyślnego zasobnika 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""storage-multi"{provider=google-beta.no_user_project_overrideproject=google_project.storage-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_id}# Provisions the default Cloud Storage bucket for the project via Google App Engine.resource"google_app_engine_application""default-multi"{provider=google-betaproject=google_project.storage-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App.location_id="name-of-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ]}# Provisions an additional Cloud Storage bucket.# Additional Cloud Storage buckets are not provisioned via App Engine.resource"google_storage_bucket""bucket-multi"{provider=google-betaproject=google_project.storage-multi.project_idname="name-of-additional-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locations # This location does not need to be the same as the default Storage bucket.location="name-of-region-for-additional-bucket"}# Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""default-bucket-multi"{provider=google-betaproject=google_project.storage-multi.project_idbucket_id=google_app_engine_application.default-multi.default_bucket}# Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-multi"{provider=google-betaproject=google_project.storage-multi.project_idbucket_id=google_storage_bucket.bucket-multi.name}# Creates a ruleset of Firebase Security Rules from a local file.resource"google_firebaserules_ruleset""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_idsource{files{ # Write security rules in a local file named "storage.rules" # Learn more: https://firebase.google.com/docs/storage/security/get-startedname="storage.rules"content=file("storage.rules")}} # Wait for the Storage buckets to be provisioned before creating this ruleset.depends_on=[google_firebase_project.storage-multi,]}# Releases the ruleset to the default Storage bucket.resource"google_firebaserules_release""default-bucket-multi"{provider=google-betaname="firebase.storage/${google_app_engine_application.default-multi.default_bucket}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_project.storage-multi.project_id}# Releases the ruleset to the additional Storage bucket.resource"google_firebaserules_release""bucket-multi"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-multi.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_project.storage-multi.project_id}# Uploads a new file to the default Storage bucket.# Do not use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture-multi"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_app_engine_application.default-multi.default_bucket}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage-multi,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage-multi,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage-multi,]}
To jest zbiór reguł Cloud Storage Security Rules, który powinien znajdować się w pliku lokalnym
o nazwie storage.rules.
Udostępnij
Instancja Cloud Firestore i domyślny zasobnik Cloud Storage
Ta konfiguracja tworzy nowy projekt Google Cloud,
włącza usługi Firebase dla projektu,
udostępnia instancję Cloud Firestore,
a następnie udostępnia domyślny zasobnik Cloud Storage.
Udostępnia też Firebase Security Rules dla instancji Cloud Firestore oraz domyślne
Zasobnik: Cloud Storage.
# Creates a new Google Cloud project.resource"google_project""fs"{ # fs = Firestore + Storageprovider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""fs"{provider=google-beta.no_user_project_overrideproject=google_project.fs.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.googleapis.com","firestore.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accidentdisable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""fs"{provider=google-betaproject=google_project.fs.project_id}#### Set up Firestore before default Cloud Storage bucket ##### Provisions the Firestore database instance.resource"google_firestore_database""firestore-fs"{provider=google-betaproject=google_project.fs.project_idname="(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-locationlocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore.depends_on=[google_firebase_project.fs,]}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore-fs"{provider=google-betaproject=google_project.fs.project_idsource{files{ # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-startedname="firestore.rules"content=file("firestore.rules")}} # Wait for Firestore to be provisioned before creating this ruleset.depends_on=[google_firestore_database.firestore-fs]}# Releases the ruleset for the Firestore instance.resource"google_firebaserules_release""firestore-fs"{provider=google-betaname="cloud.firestore" # must be cloud.firestoreruleset_name=google_firebaserules_ruleset.firestore-fs.nameproject=google_project.fs.project_id # Wait for Firestore to be provisioned before releasing the ruleset.depends_on=[google_firestore_database.firestore-fs,]}#### Set up default Cloud Storage default bucket after Firestore ##### Provisions the default Cloud Storage bucket for the project via Google App Engine.resource"google_app_engine_application""default-bucket-fs"{provider=google-betaproject=google_project.fs.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App.location_id="name-of-region" # Must be in the same location as Firestore (above) # Wait for Firestore to be provisioned first. # Otherwise, the Firestore instance will be provisioned in Datastore mode (unusable by Firebase).depends_on=[google_firestore_database.firestore-fs,]}# Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""default-bucket-fs"{provider=google-betaproject=google_project.fs.project_idbucket_id=google_app_engine_application.default-bucket-fs.default_bucket}# Creates a ruleset of Cloud Storage Security Rules from a local file.resource"google_firebaserules_ruleset""default-bucket-fs"{provider=google-betaproject=google_project.fs.project_idsource{files{ # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-startedname="storage.rules"content=file("storage.rules")}} # Wait for the Cloud Storage bucket to be provisioned before creating this ruleset.depends_on=[google_firebase_project.fs,]}# Releases the ruleset to the default Storage bucket.resource"google_firebaserules_release""default-bucket-fs"{provider=google-betaname="firebase.storage/${google_app_engine_application.default-bucket-fs.default_bucket}"ruleset_name="projects/${google_project.fs.project_id}/rulesets/${google_firebaserules_ruleset.default-bucket-fs.name}"project=google_project.fs.project_id}
To jest zbiór reguł Cloud Firestore Security Rules, który powinien znajdować się w pliku lokalnym
o nazwie firestore.rules.
Ochrona zasobu interfejsu API
dzięki Firebase App Check
Ta konfiguracja tworzy nowy projekt Google Cloud,
włącza usługi Firebase dla projektu,
konfiguruje i włącza egzekwowanie zasad Firebase App Check w domenie Cloud Firestore
dzięki czemu dostęp do niego jest możliwy tylko
w 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.appcheck.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseappcheck.googleapis.com","firestore.googleapis.com","serviceusage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""appcheck"{provider=google-betaproject=google_project.appcheck.project_iddepends_on=[google_project_service.services]}# Provisions the Firestore database instance.resource"google_firestore_database""database"{provider=google-betaproject=google_firebase_project.appcheck.projectname="(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-locationlocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore.depends_on=[google_firebase_project.appcheck,]}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectdisplay_name="Play Integrity app"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# It takes a while for App Check to recognize the new app# If your app already exists, you don't have to wait 30 seconds.resource"time_sleep""wait_30s"{depends_on=[google_firebase_android_app.appcheck]create_duration="30s"}# Register the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectapp_id=google_firebase_android_app.appcheck.app_iddepends_on=[time_sleep.wait_30s,google_firestore_database.database]lifecycle{precondition{condition=length(google_firebase_android_app.appcheck.sha256_hashes)>0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}}# Enable enforcement of App Check for Firestoreresource"google_firebase_app_check_service_config""firestore"{provider=google-betaproject=google_firebase_project.appcheck.projectservice_id="firestore.googleapis.com"depends_on=[google_project_service.services]}
Zainstaluj
wystąpienie Firebase Extension
Ta konfiguracja tworzy nowy projekt Google Cloud,
włącza usługi Firebase dla projektu,
instaluje nową instancję instancji Firebase Extension
w projekcie. Jeśli instancja już istnieje, jej parametry zostaną zaktualizowane 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""extensions"{provider=google-beta.no_user_project_overrideproject=google_project.extensions.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firebase.googleapis.com","firebaseextensions.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""extensions"{provider=google-betaproject=google_project.extensions.project_iddepends_on=[google_project_service.extensions,]}# Installs an instance of the "Translate Text in Firestore" extension.# Or updates the extension if the specified instance already exists.resource"google_firebase_extensions_instance""translation"{provider=google-betaproject=google_project.extensions.project_idinstance_id="translate-text-in-firestore"config{extension_ref="firebase/firestore-translate-text"params={COLLECTION_PATH="posts/comments/translations"DO_BACKFILL=trueLANGUAGES="ar,en,es,de,fr"INPUT_FIELD_NAME="input"LANGUAGES_FIELD_NAME="languages"OUTPUT_FIELD_NAME="translated"}system_params={"firebaseextensions.v1beta.function/location"="us-central1""firebaseextensions.v1beta.function/memory"="256""firebaseextensions.v1beta.function/minInstances"="0""firebaseextensions.v1beta.function/vpcConnectorEgressSettings"="VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED"}}}
Rozwiązywanie problemów i najczęstsze pytania
Chcesz
aby dowiedzieć się więcej o atrybutach związanych z projektem (np.
project i user_project_override)
Podczas pracy z „projektami” ten przewodnik wykorzystuje poniższe atrybuty Terraform.
project w resource bloku
Zalecane: jeśli to możliwe, umieść atrybut project w każdym
Blokada: resource
Jeśli uwzględnisz atrybut projektu, Terraform utworzy infrastrukturę
określony w bloku zasobów w określonym projekcie. W tym przewodniku
z tej metody korzystają wszystkie nasze przykładowe pliki konfiguracyjne.
Zapoznaj się z oficjalną dokumentacją Terraform dotyczącą project.
user_project_override w bloku provider
Aby udostępnić większość zasobów, należy użyć
user_project_override = true – pozwala porównać limit z własnym limitem
projekt Firebase. Aby jednak skonfigurować nowy projekt tak, aby akceptował on
kontrole limitu, musisz najpierw użyć user_project_override = false.
Występuje ten błąd:
generic::permission_denied: Firebase Tos Not Accepted
Upewnij się, że konto użytkownika, którego używasz do wykonywania poleceń gcloud CLI, zaakceptowało Warunki korzystania z usługi Firebase.
Aby to sprawdzić, otwórz przeglądarkę, zaloguj się na konto użytkownika i spróbuj wyświetlić istniejący projekt Firebase w konsoli Firebase. Jeśli możesz wyświetlić
istniejącego projektu Firebase, konto użytkownika zaakceptowało
Warunki korzystania z usługi Firebase.
Jeśli nie widzisz żadnego utworzonego wcześniej projektu Firebase,
prawdopodobnie nie zaakceptował Warunków korzystania z usługi Firebase. Aby rozwiązać ten problem, utwórz nowy plik
projektu Firebase za pomocą
Firebase i zaakceptuj
Warunki korzystania z usługi Firebase w ramach 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.
Zaczekaj kilka minut i ponownie spróbuj uruchomić aplikację terraform apply.
nie udało się utworzyć zasobu, ale po uruchomieniu funkcji terraform apply
znowu ALREADY_EXISTS.
Może to być spowodowane opóźnieniem rozpowszechniania w różnych systemach. Spróbuj rozwiązać ten problem
przez zaimportowanie zasobu do stanu Terraform przez uruchomienie polecenia
terraform import Następnie spróbuj ponownie uruchomić aplikację terraform apply.
Podczas pracy z:
Cloud Firestore, pojawia się ten błąd: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
Jak wskazuje błąd, Terraform może próbować udostępnić wiele indeksów
lub utworzyć dokument w tym samym czasie, co spowodowało błąd równoczesności.
Spróbuj ponownie uruchomić terraform apply.
Dostajesz
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 sprawdzić limit
przeciwko Google. Aby rozwiązać problem, sprawdź w bloku resource te informacje:
Podaj wartość atrybutu project.
Upewnij się, że w user_project_override = true używasz dostawcy
(bez aliasu), który w przykładach Firebase to google-beta.
Podczas tworzenia
nowego projektu Google Cloud, pojawi się błąd związany z określonym identyfikatorem projektu
nowy projekt już istnieje.
Oto możliwe przyczyny, dla których identyfikator projektu już istnieje:
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 (przeniesiono do kosza)
stanu).
Rozwiązanie problemu: jeśli uważasz, że projekt powiązany z tym identyfikatorem należy do Ciebie, sprawdź stan projektu za pomocą projects.get interfejsu API REST.
Projekt powiązany z tym identyfikatorem istnieje w kontekście bieżącego użytkownika. O
możliwą przyczyną błędu może być to, że poprzedni terraform apply otrzymał
przerwano.
Aby rozwiązać ten problem: uruchom te polecenia: terraform import google_project.default PROJECT_ID
a potem terraform import google_firebase_project.default PROJECT_ID
Kiedy
próba obsługi administracyjnej użytkowników Cloud Firestore, a następnie Cloud Storage (przez
google_app_engine_application), pojawia się ten błąd:
Error: Error creating App Engine application: googleapi: Error 409:
Cannot create Firestore database resource <resource-name> since it
already exists at location <location-id>, alreadyExists
Aplikacja App Engine wymaga instancji Cloud Firestore, ale w każdym projekcie możesz mieć tylko jedną instancję Cloud Firestore. Tak więc zgodnie z komunikatem o błędzie
jeśli projekt Cloud Firestore został już udostępniony
lokalizacja, App Engine spowoduje błąd, jeśli spróbujesz udostępnić zasób Cloud Firestore
w innej lokalizacji. App Engine uważa, że próbujesz
„ponowne włączenie obsługi administracyjnej” istniejącej instancji Cloud Firestore.
Aby naprawić ten błąd, użyj tej samej lokalizacji zarówno dla tagu Cloud Firestore, jak i tagu
App Engine. Jeśli potrzebujesz zasobnika Cloud Storage w
innej lokalizacji niż Cloud Firestore, możesz udostępnić dodatkowe zasobniki
(zobacz
przykładowa konfiguracja do tworzenia wielu Cloud Storage).
Podczas próby utworzenia Cloud Storage (za pomocą google_app_engine_application), a następnie Cloud Firestore, pojawia się ten błąd: Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
Gdy udostępnisz domyślny zasobnik Cloud Storage projektu (za pomocą
google_app_engine_application), a w projekcie nie ma jeszcze
instancję Cloud Firestore, a następnie google_app_engine_application automatycznie.
udostępnia instancję Cloud Firestore projektu.
Jeśli instancja Cloud Firestore Twojego projektu została już zainicjowana, google_firestore_database wygeneruje błąd, jeśli spróbujesz zainicjować instancję Cloud Firestore.
Po udostępnieniu instancji Cloud Firestore projektu nie można już
„ponowne włączenie obsługi administracyjnej” lub zmienić jego lokalizację. Aby błąd się nie pojawiał,
usuń blok zasobów google_firestore_database z pliku konfiguracyjnego.
Pamiętaj jednak, że zalecamy udostępnienie aplikacji Cloud Firestore przed
domyślny zasobnik Cloud Storage projektu (powód znajdziesz na bok).