Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Firebase, Google'ın
Terraform olarak değiştirin.
Firebase oluşturmayı otomatikleştirmek ve standartlaştırmak isteyen bir ekipteyseniz
temel hazırlığı yapılmış ve hizmetlerin etkinleştirilmiş olduğu projelerde,
Firebase'li Terraform, sizin için uygun olabilir.
Terraform'u Firebase ile kullanmak için temel iş akışı şunları içerir:
Web sitemiz g.co/newsinitiative/labs
üzerinden.tf
sağlamak istediğiniz altyapıyı (yani, oluşturduğunuz
istediğiniz hizmetleri ve istediğiniz hizmetleri girin).
Şu işlemler için Terraform'la arayüz oluşturan gcloud CLI komutlarını kullanma:
.tf dosyasında belirtilen altyapının sağlanmasını sağlar.
ziyaret edin.
Terraform ve Firebase ile neler yapabilirsiniz?
Bu kılavuzdaki genel iş akışı örneği
bir Android uygulamasıyla yeni bir Firebase projesi oluşturuyor. Ama çok fazla şey yapabilirsiniz.
daha fazla bilgi edinebilirsiniz. Örneğin:
Terraform'u kullanarak mevcut altyapıyı silin ve değiştirin.
Terraform kullanarak ürüne özel yapılandırma ve görevleri yönetin. Örneğin:
Cloud Storage paketleri veya veritabanı örnekleri oluşturma ve dağıtma
Firebase Güvenlik Kuralları'nı kullanabilirsiniz.
Tüm bunları yapmak için standart Terraform yapılandırma dosyalarını ve komutlarını kullanabilirsiniz
görevlerden biridir. Size bu konuda yardımcı olmak için
örnek Terraform yapılandırma dosyaları (çeşitli yaygın kullanımlar için)
durumlarda işe yarar.
Firebase ile Terraform'u kullanmak için genel iş akışı
Ön koşullar
Bu kılavuz, Terraform'u Firebase ile kullanmaya giriş amaçlı olduğundan
temel uzmanlık bilgisine sahip olacaksınız. Aşağıdakileri tamamladığınızdan emin olun:
önkoşullarını karşılayıp karşılamadığını kontrol edin.
Terraform'u yükleme
ve resmi eğitimlerine katılarak Terraform hakkında bilgi edinin.
Kullanıcı hesapları ve hizmet hesaplarıyla ilgili koşulları görüntüleyin
Kullanıcı hesabı kullanıyorsanız Firebase Şartları'nı kabul etmeniz gerekir.
Hizmet (Firebase ToS). Şu bilgileri görüntüleyebilirseniz Firebase Hizmet Şartları'nı kabul etmiş olursunuz:
bir Firebase projesini
Firebase konsolu
Terraform'un belirli işlemleri (örneğin, proje oluşturma) yapması için
şu değer doğru olmalıdır:
Kullanıcı veya hizmet hesabı,
bu işlemleri yapabilirsiniz.
Kullanıcı veya hizmet hesabı bir Google Cloud kuruluşunun parçasıysa
Kuruluş politikaları, hesabın bu işlemleri yapmasına izin vermelidir.
1. Adım: Terraform yapılandırma dosyası oluşturun ve özelleştirin
Terraform yapılandırma dosyasının iki ana bölümü olmalıdır (bu bölümler,
aşağıda bulabilirsiniz):
Hangi Firebase ürün veya hizmetlerinden bağımsız olarak provider kurulumu gereklidir
dahil edilir.
Yerel sunucunuzda Terraform yapılandırma dosyası (main.tf dosyası gibi) oluşturun
dizin.
Bu kılavuzda, provider
kurulumunu ve Terraform'un oluşturmasını istediğiniz tüm altyapıyı içerir. Not,
ancak sağlayıcı kurulumunu ekleme seçenekleriniz vardır.
Bununla ilgili seçenekleri göster
provider kurulumunu dahil etmek
provider kurulumunu eklemek için aşağıdaki seçenekleri kullanabilirsiniz:
Terraform yapılandırmanızın geri kalanı için:
1. Seçenek: Bunu tek bir Terraform .tf yapılandırmasının üzerine ekleyin
dosyası (bu kılavuzda gösterildiği gibi).
Terraform kullanmaya yeni başlıyorsanız veya yalnızca
Firebase ile Terraform'u denedik.
2. Seçenek: Ayrı bir .tf dosyasına (provider.tf gibi) ekleyin
dosyası) kullanarak,.tf
oluştur (main.tf dosyası gibi).
Dahil olmanız gereken büyük bir ekibin parçasıysanız
standartlaştırılmıştır.
Terraform komutlarını çalıştırırken hem provider.tf dosyası hem de
main.tf dosyası aynı dizinde olmalıdır.
main.tf dosyasının üst kısmına aşağıdaki provider kurulumunu ekleyin.
Bu, şu uygulamanın beta sürümü olduğundan google-beta sağlayıcısını kullanmalısınız:
daha fazla bilgi edineceksiniz. Üretimde kullanırken dikkatli olun.
# 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
}
Şu konu hakkında daha fazla bilgi edinin:
projeyle ilgili farklı özellik türlerini
(bu kılavuzun "kota kontrolü projesi" olarak adlandırdığı öğeler dahil)
Firebase ile Terraform.
Yapılandırma dosyanızı tamamlamak ve
pek çok yolu vardır.
resource blokları kullanarak oluşturulacak altyapıyı belirtin
Terraform yapılandırma dosyanızda (bu kılavuz için, main.tf dosyanız) şunları yapmanız gerekir:
Terraform'un oluşturmasını istediğiniz tüm altyapıyı belirtin (yani,
kaynaklar ve etkinleştirmek istediğiniz tüm hizmetler). İçinde
aşağıda açıklandığı gibi, tüm web sitesi
Terraform'u destekleyen Firebase kaynakları.
main.tf dosyanızı açın.
provider kurulumuna aşağıdaki resource yapılandırmasını ekleyin
engeller.
Bu temel örnek, yeni bir Firebase projesi oluşturur ve ardından
Firebase Android uygulaması.
# 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,
]
}
Görüntüleyin:
bu örnek yapılandırma dosyasının açıklamalı sürümü
Proje ve uygulama altyapısına aşina değilseniz
aşağıdaki dokümanları inceleyin:
# 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,
]
}
2. Adım: Belirtilen altyapıyı oluşturmak için Terraform komutlarını çalıştırın
main.tf belgenizde belirtilen kaynakları sağlamak ve hizmetleri etkinleştirmek için
main.tf dosyanızla aynı dizinde aşağıdaki komutları çalıştırın.
Bu komutlar hakkında ayrıntılı bilgi için
Terraform dokümanları.
dizinini başlatmak ve yüklemek için
Google Terraform sağlayıcısıdır. Bu işlemi aşağıdaki komutu çalıştırarak yapabilirsiniz:
terraform init
Şu komutu çalıştırarak main.tf dosyanızda belirtilen altyapıyı oluşturun:
şu komutu kullanın:
terraform apply
Her şeyin beklendiği gibi sağlandığını veya etkinleştirildiğini onaylayın:
1. Seçenek: Şu komutu çalıştırarak terminalinizde yazdırılan yapılandırmayı görün:
şu komutu kullanın:
Aşağıdaki Firebase ve Google kaynaklarında Terraform desteği sunulmaktadır. İlk olarak
sürekli yeni kaynaklar eklemeye devam ediyoruz. Bu nedenle, oluşturduğunuz kaynağı
yönetmek istiyorsanız kısa süre sonra tekrar kontrol edin.
şu tarihe kadar talep edebilirsiniz:
GitHub deposunda sorun kaydı oluşturun.
Firebase proje ve uygulama yönetimi
google_firebase_project:
mevcut bir Google Cloud projesinde Firebase hizmetlerini etkinleştirme
google_identity_platform_config:
Google Cloud Identity Platform'u (GCIP) (Firebase Authentication'ın arka ucu) etkinleştirin
ve proje düzeyinde kimlik doğrulama ayarları sunun
Terraform'un GCIP ve/veya Firebase Authentication'ı etkinleştireceği proje
Blaze fiyatlandırma planı kapsamında olmalıdır (yani projenin
ilişkili Cloud Faturalandırma Hesabı). Bunu programlı bir şekilde
yapabilirsiniz:
ayarlamak
billing_account
özelliğini google_project kaynağında kullanabilirsiniz.
Bu kaynakla daha fazla yapılandırma (ör. yerel oturum açma yöntemleri,
anonim, e-posta/şifre ve telefon doğrulaması gibi
engelleme işlevlerine ve yetkilendirilmiş alan adlarına sahip olması gerekir.
Firebase Realtime Database Güvenlik Kurallarını Terraform Üzerinden Dağıtma (
bu kuralları dağıt
(programatik seçenekler dahil) diğer araçları kullanarak)
Önemli: Bu başlangıç noktasında gerçek son kullanıcı veya üretim verilerini kullanmayın.
uygulayacaksınız.
ziyaret edin.
ziyaret edin.
Cloud Storage for Firebase
google_firebase_storage_bucket:
mevcut bir Cloud Storage paketini Firebase SDK'ları için erişilebilir hale getirin.
kimlik doğrulama ve Firebase Güvenlik Kuralları
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur.
Projeyi bir Cloud Billing hesabıyla (Blaze fiyatlandırma planı) ilişkilendirir
GCIP ile Firebase Authentication için gereklidir),
proje için Firebase hizmetlerini etkinleştirir.
GCIP ile Firebase Authentication'ı kurar,
ve projeye üç farklı uygulama türü kaydediyor.
Terraform üzerinden Firebase Authentication'ı kurmak için GCIP'nin etkinleştirilmesi gerektiğini unutmayın.
# 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,
]
}
Temel hazırlığı,
varsayılan Firebase Realtime Database örneği
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur.
proje için Firebase hizmetlerini etkinleştirir.
projenin varsayılan Realtime Database örneğini sağlar.
ve projeye üç farklı uygulama türü kaydediyor.
# 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,
]
}
Birden çok temel hazırlığı yap
Firebase Realtime Database örnekleri
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur.
Projeyi bir Cloud Billing hesabıyla (Blaze fiyatlandırma planı) ilişkilendirir
birden fazla Realtime Database örneği için gereklidir)
proje için Firebase hizmetlerini etkinleştirir.
birden fazla Realtime Database örneği sağlar
(projenin varsayılan Realtime Database örneği dahil)
ve projeye üç farklı uygulama türü kaydediyor.
# 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,
]
}
Temel hazırlığı,
Cloud Firestore örneği
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur.
proje için Firebase hizmetlerini etkinleştirir.
projenin Cloud Firestore örneğini sağlar,
ve projeye üç farklı uygulama türü kaydediyor.
Ayrıca, Cloud Firestore örneği için Firebase Güvenlik Kurallarını da sağlar.
Cloud Firestore dizini oluşturur,
ve çekirdek verileri içeren bir Cloud Firestore belgesi ekler.
ziyaret edin.
# 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,
]
}
Bu, yerel bir dosyada olması gereken Cloud Firestore Güvenlik Kurallarının kural kümesidir
firestore.rules olarak adlandırıldı.
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;
}
}
Temel hazırlığı,
varsayılan Cloud Storage paketi
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur.
proje için Firebase hizmetlerini etkinleştirir.
projenin varsayılan Cloud Storage paketini sağlar,
ve projeye üç farklı uygulama türü kaydediyor.
Ayrıca Cloud Storage paketi için Firebase Güvenlik Kuralları'nı da sağlar.
ve pakete bir dosya yükler.
ziyaret edin.
# 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,
]
}
Bu, yerel bir dosyada bulunması gereken Cloud Storage Güvenlik Kuralları kural kümesidir
storage.rules olarak adlandırıldı.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Provizyon
birden fazla Cloud Storage paketi
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur.
Projeyi bir Cloud Billing hesabıyla (Blaze fiyatlandırma planı) ilişkilendirir
birden fazla paket için gereklidir),
proje için Firebase hizmetlerini etkinleştirir.
Birden fazla Cloud Storage paketi sağlar
(projenin varsayılan Cloud Storage paketi dahil),
ve projeye üç farklı uygulama türü kaydediyor.
Ayrıca Cloud Storage paketleri için Firebase Güvenlik Kuralları'nı sağlar.
ve varsayılan Cloud Storage paketine bir dosya yükler.
ziyaret edin.
# 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,
]
}
Bu, yerel bir dosyada bulunması gereken Cloud Storage Güvenlik Kuralları kural kümesidir
storage.rules olarak adlandırıldı.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Temel hazırlığı,
Cloud Firestore örneği ve varsayılan Cloud Storage paketi
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur.
proje için Firebase hizmetlerini etkinleştirir.
Cloud Firestore örneğini sağlar ve
ardından varsayılan Cloud Storage paketini sağlar.
Ayrıca, Cloud Firestore örneği için Firebase Güvenlik Kuralları ve varsayılan ayar da
Cloud Storage paketi.
ziyaret edin.
# 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
}
Bu, yerel bir dosyada olması gereken Cloud Firestore Güvenlik Kurallarının kural kümesidir
firestore.rules olarak adlandırıldı.
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;
}
}
Bu, yerel bir dosyada bulunması gereken Cloud Storage Güvenlik Kuralları kural kümesidir
storage.rules olarak adlandırıldı.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
API kaynaklarını koruma
Firebase Uygulama Kontrolü ile
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur.
proje için Firebase hizmetlerini etkinleştirir ve
Cloud Firestore için Firebase Uygulama Kontrolü'nü ayarlar ve zorunlu kılmayı etkinleştirir
böylece yalnızca Android uygulamanızdan erişilebilmesini sağlayın.
# 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]
}
Yükleyin:
Firebase uzantısı örneği
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur.
proje için Firebase hizmetlerini etkinleştirir ve
Bir Firebase Uzantısının yeni örneğini yükler
için iyi bir fırsattır. Örnek zaten mevcutsa
parametreleri, yapılandırmada sağlanan değerlere göre güncellenir.
# 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"
}
}
}
Sorun giderme ve SSS
Şunu istiyorsunuz:
tüm farklı nitelikler hakkında daha fazla bilgi edinmek için
project ve user_project_override)
Bu kılavuzda, "projeler" ile çalışırken aşağıdaki Terraform özellikleri kullanılmaktadır.
resource bloğunda project
Önerilir: Mümkün olduğunda her reklam öğesi içine project özelliğini ekleyin.
resource blok
Terraform bir proje özelliği ekleyerek altyapıyı oluşturur
belirtilen projedeki kaynak blokunda belirtilir. Bu kılavuz ve
örnek yapılandırma dosyalarının tümü bu uygulamayı kullanır.
Aşağıdakilerle ilgili resmi Terraform dokümanlarına bakın:
project.
provider blokunda user_project_override
Çoğu kaynağın temel hazırlığını yapmak için
user_project_override = true: Bu, kotanızı kendi kotanızla kontrol etmek anlamına gelir.
Firebase projesi. Ancak yeni projenizi, bu değişimin kabul edilmesine
yardımcı olacak şekilde
kota kontrolleri için öncelikle user_project_override = false kullanmanız gerekir.
Şu hatayı alırsınız:
generic::permission_denied: Firebase Tos Not Accepted
gcloud KSA'yı çalıştırmak için kullandığınız kullanıcı hesabının
komutlarının Firebase Hizmet Şartları'nı (Firebase ToS) kabul etmesi gerekir.
Bu kontrolü, kullanıcı hesabında oturum açmış bir tarayıcı kullanarak ve
mevcut bir Firebase projesini
Firebase konsolu. Görüntüleyebiliyorsanız
bir Firebase projesi kullanıyorsanız kullanıcı hesabı
Firebase Hizmet Şartları
Mevcut bir Firebase projesini görüntüleyemiyorsanız kullanıcı hesabı
Firebase Hizmet Şartları'nı kabul etmemiştir. Bunu düzeltmek için yeni bir dosya oluşturun
Firebase projesi üzerinden
Firebase konsolunuza gidin ve
Proje oluşturma kapsamında Firebase Hizmet Şartları. Bunu hemen silebilirsiniz
projeyi yönetmek için Yönetici Konsolu'ndaki Proje Ayarları'nı kullanabilirsiniz.
Koşudan sonra
terraform apply, şu hatayı alırsınız:
generic::permission_denied: IAM authority does not have the
permission.
Birkaç dakika bekleyin, ardından terraform apply uygulamasını çalıştırmayı tekrar deneyin.
İlgili içeriği oluşturmak için kullanılan
kaynak oluşturma başarısız oldu, ancak terraform apply komutunu çalıştırdığınızda
yine ALREADY_EXISTS yazıyor.
Bu durum, çeşitli sistemlerdeki yayılım gecikmesinden kaynaklanıyor olabilir. Bu sorunu çözmeyi deneyin
kaynağı Terraform durumuna içe aktararak
terraform import Ardından terraform apply öğesini tekrar çalıştırmayı deneyin.
Her kaynağı nasıl içe aktaracağınızı "İçe aktarma" bölümünden öğrenebilirsiniz. bölümünün
Terraform dokümanları (örneğin,
"İçe aktar" belgelerine bakın).
Proje yöneticileri
Cloud Firestore'da şu hatayı alıyorsunuz: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
Hatanın ortaya koyduğu gibi, Terraform birden fazla dizin sağlamaya çalışıyor olabilir
ve/veya aynı anda belge oluşturan
bir belge eşzamanlılık hatasına yol açabilir.
terraform apply dosyasını tekrar çalıştırmayı deneyin.
Kazanacağınız tutar
şu hata mesajını verir:
"you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes"
Bu hata, Terraform'un hangi projenin kotayı kontrol edeceğini bilmediği anlamına gelir
. Sorun gidermek için resource bloğunda aşağıdakileri kontrol edin:
project özelliği için bir değer belirttiğinizden emin olun.
user_project_override = true ile sağlayıcıyı kullandığınızdan emin olun
(takma ad yok) kullanılır. Firebase örneklerinde bu değer google-beta şeklindedir.
Bir
bir Google Cloud projesi için Google Cloud projesinde
yeni proje zaten mevcuttur.
Proje kimliğinin zaten mevcut olmasının olası nedenleri şunlardır:
Bu kimlikle ilişkilendirilen proje başka birine aittir.
Sorunu çözmek için: Başka bir proje kimliği seçin.
Bu kimlikle ilişkili proje yakın zamanda silindi (geri yüklenebilir şekilde silme modunda)
durum).
Sorunu çözmek için: Kimlikle ilişkili projenin
ardından teslim edilecek materyali kullanarak
projects.get REST API.
Bu kimlikle ilişkilendirilmiş proje, geçerli kullanıcı altında doğru şekilde bulunuyor. CEVAP
hatanın olası nedeni, daha önceki bir terraform apply
kesintiye uğrar.
Sorunu çözmek için: Aşağıdaki komutları çalıştırın: terraform import google_project.default PROJECT_ID
ve ardından terraform import google_firebase_project.default PROJECT_ID
Zaman
Cloud Firestore ve ardından Cloud Storage'ı sağlamaya çalışmak (üzerinde
google_app_engine_application) şu hatayı alırsınız:
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.
App Engine uygulaması için Cloud Firestore örneği gerekir ancak yalnızca şu işlemleri yapabilirsiniz:
Proje başına bir Cloud Firestore örneğiniz olmalıdır. Hata mesajında da belirtildiği gibi
Projenin Cloud Firestore örneğini zaten
Cloud Firestore'u sağlamaya çalışırsanız App Engine hata mesajı verir.
farklı bir konumda olması gerekir. App Engine,
"yeniden temel hazırlığı yap" Cloud Firestore örneğidir.
Zaman
Cloud Storage'ı sağlamaya çalışmak (
google_app_engine_application), ardından Cloud Firestore'da
şu hata mesajını verir:
Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
Projenin varsayılan Cloud Storage paketini sağladığınızda (
google_app_engine_application) ve projede henüz
Cloud Firestore örneği, ardından otomatik olarak google_app_engine_application
projenin Cloud Firestore örneğini sağlar.
Bu nedenle, projenizin Cloud Firestore örneği zaten sağlanmışsa
Açıkça bir temel hazırlığı yapmaya çalışırsanız google_firestore_database hatası verir:
Cloud Firestore örneğidir.
Projenin Cloud Firestore örneği sağlandıktan sonra şu işlemi yapamazsınız:
"yeniden temel hazırlığı yap" veya yerini değiştirebilirsiniz. Hatanın oluşmasını engellemek için
yapılandırma dosyanızdan google_firestore_database kaynak bloğunu kaldırın.
Yine de
varsayılan Cloud Storage paketine göz atın (nedenini öğrenmek için aşağıdaki kenara bakın).