Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
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:
utworzenie i dostosowanie pliku konfiguracji Terraform (pliku .tf), który
określa infrastrukturę, którą chcesz udostępnić (czyli zasoby, które chcesz udostępnić
które chcesz udostępnić, i usługi, które chcesz włączyć).
używanie poleceń interfejsu wiersza poleceń gcloud, które współpracują z Terraform,
udostępnić infrastrukturę określoną w pliku .tf.
Usuń i zmodyfikuj istniejącą infrastrukturę za pomocą Terraform.
Zarządzaj konfiguracjami i zadaniami konkretnych usług za pomocą Terraform, takich jak:
Włączam dostawców logowania w Uwierzytelnianiu Firebase.
Tworzenie zasobników lub instancji bazy danych Cloud Storage i wdrażanie
Reguły zabezpieczeń Firebase.
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.
Uogólniony przepływ pracy dotyczący używania Terraform z 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.
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
Usługa (Warunki korzystania z Firebase). Warunki korzystania z usługi Firebase zostały zaakceptowane, jeśli możesz
w projekcie Firebase
Konsola 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 bez względu na to, które produkty lub usługi Firebase są
zaangażowane.
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.
Wyświetl opcje
uwzględnij konfigurację provider
Konfigurację provider możesz dodać do tych
reszta konfiguracji Terraform:
Opcja 1. Dodaj ją na początku pojedynczej konfiguracji 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 = "~> 4.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.
Ten podstawowy przykład tworzy nowy projekt Firebase, a następnie tworzy
aplikację Firebase 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_override
name = "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_override
project = google_project.default.project_id
for_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-beta
project = 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-beta
project = google_project.default.project_id
display_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 project
provider = google-beta.no_user_project_override
name = "Project Display Name" // learn more about the project name
project_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 APIS
provider = google-beta.no_user_project_override
project = google_project.default.project_id
for_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 on
provider = google-beta
project = 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-beta
project = google_project.default.project_id
display_name = "My Awesome Android app" # learn more about an app's display name
package_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 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 sekcji
Dokumentacja Terraform.
Jeśli po raz pierwszy uruchamiasz polecenia Terraform w
musisz zainicjować katalog konfiguracji i zainstalować
dostawcą Google Terraform. 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łączyć Google Cloud Identity Platform (GCIP), czyli backend uwierzytelniania Firebase,
i podaj ustawienia uwierzytelniania na poziomie projektu.
Projekt, w którym Terraform włączy GCIP lub uwierzytelnianie Firebase
musi być objęty abonamentem Blaze (czyli projekt musi mieć
powiązane konto rozliczeniowe Cloud). Możesz to zrobić automatycznie przez
ustawianie
billing_account
w zasobie google_project.
Ten zasób umożliwia też korzystanie z większej liczby konfiguracji, takich jak lokalne metody logowania,
na przykład anonimowe, uwierzytelnianie za pomocą adresu e-mail/hasło czy przez telefon,
funkcji blokowania i autoryzowanych domen.
Wdrażanie reguł zabezpieczeń Bazy danych czasu rzeczywistego Firebase za pomocą Terraform (dowiedz się, jak
wdróż te reguły
za pomocą innych narzędzi, w tym opcji automatyzacji)
Przykładowe pliki konfiguracyjne Terraform do typowych przypadków użycia
Skonfiguruj Uwierzytelnianie Firebase w
protokół GCIP
Ta konfiguracja powoduje utworzenie nowego projektu Google Cloud,
wiąże projekt z kontem rozliczeniowym Cloud (abonament Blaze
jest wymagane do uwierzytelniania Firebase za pomocą GCIP),
włącza usługi Firebase dla projektu,
skonfiguruje uwierzytelnianie Firebase przy użyciu GCIP,
i rejestruje w projekcie 3 różne typy aplikacji.
Pamiętaj, że włączenie GCIP jest wymagane do skonfigurowania uwierzytelniania Firebase za pomocą Terraform.
# Creates a new Google Cloud project.
resource "google_project" "auth" {
provider = google-beta.no_user_project_override
folder_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_override
project = google_project.auth.project_id
for_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-beta
project = google_project.auth.project_id
depends_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-beta
project = google_project.auth.project_id
# Auto-deletes anonymous users
autodelete_anonymous_users = true
# Configures local sign-in methods, like anonymous, email/password, and phone authentication.
sign_in {
allow_duplicate_emails = true
anonymous {
enabled = true
}
email {
enabled = true
password_required = false
}
phone_number {
enabled = true
test_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 = true
access_token = true
id_token = true
}
}
# Configures a temporary quota for new signups for anonymous, email/password, and phone number.
quota {
sign_up_quota_config {
quota = 1000
start_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-beta
project = google_project.auth.project_id
display_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-beta
project = google_project.auth.project_id
display_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-beta
project = google_project.auth.project_id
display_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,
]
}
Udostępnij
domyślna instancja Bazy danych czasu rzeczywistego Firebase
Ta konfiguracja powoduje utworzenie nowego projektu Google Cloud,
włącza usługi Firebase dla projektu,
udostępnia domyślną instancję Bazy danych czasu rzeczywistego 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_override
folder_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_override
project = google_project.rtdb.project_id
for_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-beta
project = google_project.rtdb.project_id
}
# Provisions the default Realtime Database default instance.
resource "google_firebase_database_instance" "database" {
provider = google-beta
project = google_project.rtdb.project_id
# See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations
region = "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-beta
project = google_project.rtdb.project_id
display_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-beta
project = google_project.rtdb.project_id
display_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-beta
project = google_project.rtdb.project_id
display_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,
]
}
Udostępnij kilka
Instancje Bazy danych czasu rzeczywistego Firebase
Ta konfiguracja powoduje utworzenie nowego projektu Google Cloud,
wiąże projekt z kontem rozliczeniowym Cloud (abonament Blaze
jest wymagane w przypadku wielu instancji Bazy danych czasu rzeczywistego),
włącza usługi Firebase dla projektu,
udostępnia wiele instancji Bazy danych czasu rzeczywistego
(w tym domyślną instancję Bazy danych czasu rzeczywistego 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_override
folder_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_override
project = google_project.rtdb-multi.project_id
for_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-beta
project = google_project.rtdb-multi.project_id
}
# Provisions the default Realtime Database default instance.
resource "google_firebase_database_instance" "database-default" {
provider = google-beta
project = google_project.rtdb-multi.project_id
# See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations
region = "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-beta
project = 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-beta
project = google_project.rtdb-multi.project_id
display_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-beta
project = google_project.rtdb-multi.project_id
display_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-beta
project = google_project.rtdb-multi.project_id
display_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,
]
}
Udostępnij
Instancja Cloud Firestore
Ta konfiguracja powoduje utworzenie nowego projektu 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ż reguły zabezpieczeń Firebase dla instancji Cloud Firestore,
tworzy indeks Cloud Firestore,
i doda dokument Cloud Firestore z danymi początkowymi.
.
# Creates a new Google Cloud project.
resource "google_project" "firestore" {
provider = google-beta.no_user_project_override
folder_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_override
project = google_project.firestore.project_id
for_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-beta
project = google_project.firestore.project_id
}
# Provisions the Firestore database instance.
resource "google_firestore_database" "firestore" {
provider = google-beta
project = google_project.firestore.project_id
name = "(default)"
# See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location
location_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-beta
project = google_project.firestore.project_id
source {
files {
name = "firestore.rules"
# Write security rules in a local file named "firestore.rules".
# Learn more: https://firebase.google.com/docs/firestore/security/get-started
content = 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-beta
name = "cloud.firestore" # must be cloud.firestore
ruleset_name = google_firebaserules_ruleset.firestore.name
project = 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-beta
project = google_project.firestore.project_id
collection = "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-beta
project = google_project.firestore.project_id
collection = "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-beta
project = google_project.firestore.project_id
display_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-beta
project = google_project.firestore.project_id
display_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-beta
project = google_project.firestore.project_id
display_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 zestaw reguł reguł zabezpieczeń Cloud Firestore, które powinny znajdować się w pliku lokalnym
o nazwie firestore.rules.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
allow read: if request.auth != null;
allow create: if request.auth != null;
allow update: if request.auth != null;
}
}
Udostępnij
domyślny zasobnik Cloud Storage
Ta konfiguracja powoduje utworzenie nowego projektu 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 również reguły zabezpieczeń Firebase 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_override
folder_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_override
project = google_project.storage.project_id
for_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-beta
project = 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-beta
project = 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-beta
project = google_project.storage.project_id
bucket_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-beta
project = google_project.storage.project_id
source {
files {
# Write security rules in a local file named "storage.rules".
# Learn more: https://firebase.google.com/docs/storage/security/get-started
name = "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-beta
name = "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-beta
name = "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-beta
project = google_project.storage.project_id
display_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-beta
project = google_project.storage.project_id
display_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-beta
project = google_project.storage.project_id
display_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 zestaw reguł reguł zabezpieczeń Cloud Storage, które powinny znajdować się w lokalnym pliku
o nazwie storage.rules.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Udostępnij
wiele zasobników Cloud Storage
Ta konfiguracja powoduje utworzenie nowego projektu Google Cloud,
wiąże projekt z kontem rozliczeniowym Cloud (abonament Blaze
jest wymagane dla wielu zasobników),
włącza usługi Firebase dla projektu,
udostępnia wiele zasobników Cloud Storage
(w tym domyślny zasobnik Cloud Storage projektu)
i rejestruje w projekcie 3 różne typy aplikacji.
Udostępnia również reguły zabezpieczeń Firebase 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_override
folder_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_override
project = google_project.storage-multi.project_id
for_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-beta
project = 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-beta
project = 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-beta
project = google_project.storage-multi.project_id
name = "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-beta
project = google_project.storage-multi.project_id
bucket_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-beta
project = google_project.storage-multi.project_id
bucket_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-beta
project = google_project.storage-multi.project_id
source {
files {
# Write security rules in a local file named "storage.rules"
# Learn more: https://firebase.google.com/docs/storage/security/get-started
name = "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-beta
name = "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-beta
name = "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-beta
name = "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-beta
project = google_project.storage-multi.project_id
display_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-beta
project = google_project.storage-multi.project_id
display_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-beta
project = google_project.storage-multi.project_id
display_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 zestaw reguł reguł zabezpieczeń Cloud Storage, które powinny znajdować się w lokalnym pliku
o nazwie storage.rules.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Udostępnij
Instancja Cloud Firestore i domyślny zasobnik Cloud Storage
Ta konfiguracja powoduje utworzenie nowego projektu 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ż reguły zabezpieczeń Firebase dla instancji Cloud Firestore oraz domyślne reguły
Zasobnik Cloud Storage.
.
# Creates a new Google Cloud project.
resource "google_project" "fs" { # fs = Firestore + Storage
provider = google-beta.no_user_project_override
folder_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_override
project = google_project.fs.project_id
for_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 accident
disable_on_destroy = false
}
# Enables Firebase services for the new project created above.
resource "google_firebase_project" "fs" {
provider = google-beta
project = 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-beta
project = google_project.fs.project_id
name = "(default)"
# See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location
location_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-beta
project = google_project.fs.project_id
source {
files {
# Write security rules in a local file named "firestore.rules".
# Learn more: https://firebase.google.com/docs/firestore/security/get-started
name = "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-beta
name = "cloud.firestore" # must be cloud.firestore
ruleset_name = google_firebaserules_ruleset.firestore-fs.name
project = 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-beta
project = 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-beta
project = google_project.fs.project_id
bucket_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-beta
project = google_project.fs.project_id
source {
files {
# Write security rules in a local file named "storage.rules".
# Learn more: https://firebase.google.com/docs/storage/security/get-started
name = "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-beta
name = "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 zestaw reguł reguł zabezpieczeń Cloud Firestore, które powinny znajdować się w pliku lokalnym
o nazwie firestore.rules.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
allow read: if request.auth != null;
allow create: if request.auth != null;
allow update: if request.auth != null;
}
}
To jest zestaw reguł reguł zabezpieczeń Cloud Storage, które powinny znajdować się w lokalnym pliku
o nazwie storage.rules.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Ochrona zasobu interfejsu API
za pomocą Sprawdzania aplikacji Firebase
Ta konfiguracja powoduje utworzenie nowego projektu Google Cloud,
włącza usługi Firebase dla projektu,
konfiguruje i włącza wymuszanie Sprawdzania aplikacji Firebase w 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_override
folder_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_override
project = google_project.appcheck.project_id
for_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-beta
project = google_project.appcheck.project_id
depends_on = [google_project_service.services]
}
# Provisions the Firestore database instance.
resource "google_firestore_database" "database" {
provider = google-beta
project = google_firebase_project.appcheck.project
name = "(default)"
# See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location
location_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-beta
project = google_firebase_project.appcheck.project
display_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 provider
resource "google_firebase_app_check_play_integrity_config" "appcheck" {
provider = google-beta
project = google_firebase_project.appcheck.project
app_id = google_firebase_android_app.appcheck.app_id
depends_on = [time_sleep.wait_30s, google_firestore_database.database]
lifecycle {
precondition {
condition = length(google_firebase_android_app.appcheck.sha256_hashes) > 0
error_message = "Provide a SHA-256 certificate on the Android App to use App Check"
}
}
}
# Enable enforcement of App Check for Firestore
resource "google_firebase_app_check_service_config" "firestore" {
provider = google-beta
project = google_firebase_project.appcheck.project
service_id = "firestore.googleapis.com"
depends_on = [google_project_service.services]
}
Zainstaluj
wystąpienie Rozszerzenie Firebase
Ta konfiguracja powoduje utworzenie nowego projektu Google Cloud,
włącza usługi Firebase dla projektu,
instaluje nową instancję rozszerzenia Firebase
w projekcie. Jeśli instancja już istnieje,
jego 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_override
folder_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_override
project = google_project.extensions.project_id
for_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-beta
project = google_project.extensions.project_id
depends_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-beta
project = google_project.extensions.project_id
instance_id = "translate-text-in-firestore"
config {
extension_ref = "firebase/firestore-translate-text"
params = {
COLLECTION_PATH = "posts/comments/translations"
DO_BACKFILL = true
LANGUAGES = "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.
Zobacz oficjalną dokumentację Terraform na temat
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
Sprawdź, czy konto użytkownika, którego używasz do uruchamiania interfejsu wiersza poleceń gcloud,
użytkownik zaakceptował Warunki korzystania z usługi Firebase.
Możesz to zrobić, logując się na konto użytkownika w przeglądarce i
próbuje wyświetlić istniejący projekt Firebase w
Konsola 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ą
w konsoli Firebase i zaakceptuj
Warunki korzystania z usługi Firebase w ramach tworzenia projektu. Możesz natychmiast usunąć to
w sekcji Ustawienia 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.
Aby dowiedzieć się, jak zaimportować poszczególne zasoby, kliknij „Import” jego sekcji
dokumentacji Terraform (np.
„Importuj” dokumentacji Cloud Firestore).
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ć aplikację 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 elementy:
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 podanym 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 identyfikatorem należy
a następnie sprawdź stan projektu za pomocą
Interfejs API typu REST projects.get.
Projekt powiązany z tym identyfikatorem prawidłowo istnieje w ramach 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
Spróbuj udostępnić 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 możesz
mają 1 instancję Cloud Firestore na projekt. Tak więc zgodnie z komunikatem o błędzie
jeśli masz już udostępnioną instancję Cloud Firestore projektu
lokalizacji, App Engine wystąpi błąd, jeśli spróbujesz udostępnić Cloud Firestore
w innej lokalizacji. Według App Engine próbujesz
„ponowne włączenie obsługi administracyjnej” w istniejącej instancji Cloud Firestore.
Aby naprawić ten błąd, użyj tej samej lokalizacji zarówno dla Cloud Firestore, jak i dla
Aplikacja 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 zasobów Cloud Storage
).
Kiedy
próbą udostępnienia Cloud Storage (za pomocą
google_app_engine_application), a potem Cloud Firestore,
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 automatycznie: google_app_engine_application.
udostępnia instancję Cloud Firestore projektu.
Jeśli więc instancja Cloud Firestore Twojego projektu jest już udostępniona,
Jeśli spróbujesz bezpośrednio udostępnić usługę google_firestore_database, wystąpi błąd
instancji 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 Cloud Firestore przed
domyślnego zasobnika Cloud Storage projektu (powód znajdziesz na bok).