Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Firebase, Terraform'u desteklemeye başlıyor.
Belirli kaynakların sağlandığı ve hizmetlerin etkinleştirildiği Firebase projeleri oluşturma sürecini otomatikleştirmek ve standartlaştırmak isteyen bir ekipteyseniz Firebase ile Terraform'u kullanmak sizin için uygun olabilir.
Firebase ile Terraform kullanmanın temel iş akışı şunları içerir:
Sağlamak istediğiniz altyapıyı (yani sağlamak istediğiniz kaynakları ve etkinleştirmek istediğiniz hizmetleri) belirten bir Terraform yapılandırma dosyası (.tf dosyası) oluşturma ve özelleştirme.
gcloud CLI dosyasında belirtilen altyapıyı sağlamak için Terraform ile arayüz oluşturan gcloud CLI komutlarını kullanma..tf
Terraform'u kullanarak mevcut altyapıyı silme ve değiştirme
Terraform'u kullanarak ürüne özel yapılandırmayı ve görevleri yönetme (ör. aşağıdakiler):
Firebase Authentication oturum açma hizmet sağlayıcıları etkinleştiriliyor.
Cloud Storage paketleri veya veritabanı örnekleri oluşturma ve bunlar için Firebase Security Rules dağıtma.
Firebase App Hosting arka uçları, derlemeler ve diğer ilgili kaynakları oluşturma
Tüm bu görevleri gerçekleştirmek için standart Terraform yapılandırma dosyalarını ve komutlarını kullanabilirsiniz. Bu konuda size yardımcı olmak için çeşitli yaygın kullanım alanlarına yönelik örnek Terraform yapılandırma dosyaları sağladık.
Terraform'u Firebase ile kullanmaya yönelik genelleştirilmiş iş akışı
Ön koşullar
Bu kılavuz, Terraform'u Firebase ile kullanmaya yönelik bir giriş niteliğindedir. Bu nedenle, Terraform'da temel düzeyde yeterlilik sahibi olduğunuz varsayılır. Bu iş akışını başlatmadan önce aşağıdaki ön koşulları tamamladığınızdan emin olun.
Terraform'u yükleyin
ve resmi eğitimlerini kullanarak Terraform hakkında bilgi edinin.
Kullanıcı hesapları ve hizmet hesapları için gereksinimleri görüntüleme
Kullanıcı hesabı kullanıyorsanız Firebase Hizmet Şartları'nı (Firebase ToS) kabul etmiş olmanız gerekir. Firebase konsolunda bir Firebase projesini görüntüleyebiliyorsanız Firebase Hizmet Şartları'nı kabul etmişsinizdir.
Terraform'un belirli işlemleri (örneğin, proje oluşturma) gerçekleştirebilmesi için aşağıdakilerin doğru olması gerekir:
Kullanıcı veya hizmet hesabı, bu işlemler için geçerli IAM erişimine sahip olmalıdır.
Kullanıcı veya hizmet hesabı bir Google Cloud kuruluşun 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
Bir Terraform yapılandırma dosyasının iki ana bölümü olması gerekir (Ayrıntılı açıklamalar aşağıda verilmiştir):
Hangi Firebase ürünleri veya hizmetleri kullanılıyor olursa olsun provider kurulumu gerekir.
Yerel dizininizde bir Terraform yapılandırma dosyası (ör. main.tf dosyası) oluşturun.
Bu kılavuzda, hem provider
kurulumu hem de Terraform'un oluşturmasını istediğiniz tüm altyapıyı belirtmek için bu yapılandırma dosyasını kullanacaksınız. Ancak sağlayıcı kurulumunu nasıl dahil edeceğinizle ilgili seçenekleriniz olduğunu unutmayın.
provider kurulumunu dahil etme seçeneklerini görüntüleyin
provider kurulumunu Terraform yapılandırmanızın geri kalanına eklemek için aşağıdaki seçenekleri kullanabilirsiniz:
1. seçenek: Tek bir Terraform .tf yapılandırma dosyasının en üstüne ekleyin (bu kılavuzda gösterildiği gibi).
Terraform'u kullanmaya yeni başlıyorsanız veya Firebase ile Terraform'u deniyorsanız bu seçeneği kullanın.
2. seçenek: Oluşturulacak altyapıyı belirttiğiniz .tf dosyasından (ör. main.tf dosyası) ayrı olarak, .tf dosyasında (ör. provider.tf dosyası) yer verin.
Kurulumu standartlaştırması gereken daha büyük bir ekibin parçasıysanız bu seçeneği kullanın.
Terraform komutları çalıştırılırken hem provider.tf dosyası hem de main.tf dosyası aynı dizinde olmalıdır.
provider kurulumunu main.tf dosyasının en üstüne ekleyin.
Firebase'i Terraform ile kullanmanın beta sürümü olduğundan google-beta sağlayıcısını kullanmanız gerekir. Üretimde kullanırken dikkatli olun.
# Terraform configuration to set up providers by version.terraform{required_providers{google-beta={source="hashicorp/google-beta"version="~> 6.0"}}}# Configures the provider to use the resource block's specified project for quota checks.provider"google-beta"{user_project_override=true}# Configures the provider to not use the resource block's specified project for quota checks.# This provider should only be used during project creation and initializing services.provider"google-beta"{alias="no_user_project_override"user_project_override=false}
Firebase ile Terraform'u kullanırken farklı proje özellik türleri (bu kılavuzun "kota kontrolü projesi" olarak adlandırdığı proje dahil) hakkında daha fazla bilgi edinin.
Yapılandırma dosyanızı tamamlamak ve hangi altyapının oluşturulacağını belirtmek için bir sonraki bölüme geçin.
resource bloklarını kullanarak hangi altyapının oluşturulacağını belirtme
Terraform yapılandırma dosyanızda (bu kılavuz için main.tf dosyanız), Terraform'un oluşturmasını istediğiniz tüm altyapıyı (yani sağlamak istediğiniz tüm kaynakları ve etkinleştirmek istediğiniz tüm hizmetleri) belirtmeniz gerekir. Bu kılavuzda, Terraform'u destekleyen tüm Firebase kaynaklarının tam listesini bulabilirsiniz.
main.tf dosyanızı açın.
provider kurulumu altında, resource bloklarının aşağıdaki yapılandırmasını ekleyin.
Bu temel örnekte yeni bir Firebase projesi oluşturulur ve ardından bu proje içinde bir Firebase Android uygulaması oluşturulur.
# Terraform configuration to set up providers by version....# Configures the provider to use the resource block's specified project for quota checks....# Configures the provider to not use the resource block's specified project for quota checks....# Creates a new Google Cloud project.resource"google_project""default"{provider=google-beta.no_user_project_overridename="Project Display Name"project_id="project-id-for-new-project" # Required for any service that requires the Blaze pricing plan # (like Firebase Authentication with GCIP)billing_account="000000-000000-000000" # Required for the project to display in any list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""default"{provider=google-beta.no_user_project_overrideproject=google_project.default.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on."serviceusage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""default"{provider=google-betaproject=google_project.default.project_id # Waits for the required APIs to be enabled.depends_on=[google_project_service.default]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""default"{provider=google-betaproject=google_project.default.project_iddisplay_name="My Awesome Android app"package_name="awesome.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.default,]}
Bu örnek yapılandırma dosyasının ayrıntılı açıklamalar içeren bir sürümünü görüntüleyin.
Kaynak olarak projelerin ve uygulamaların altyapısına aşina değilseniz aşağıdaki belgeleri 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 projectprovider=google-beta.no_user_project_overridename="Project Display Name" // learn more about the project nameproject_id="project-id-for-new-project" // learn more about the project ID # Required for any service that requires the Blaze pricing plan # (like Firebase Authentication with GCIP)billing_account="000000-000000-000000" # Required for the project to display in any list of Firebase projects.labels={"firebase"="enabled" // learn more about the Firebase-enabled label}}# Enables required APIs.resource"google_project_service""default"{ # Use the provider without quota checks for enabling APISprovider=google-beta.no_user_project_overrideproject=google_project.default.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on."serviceusage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.# This action essentially "creates a Firebase project" and allows the project to use# Firebase services (like Firebase Authentication) and# Firebase tooling (like the Firebase console).# Learn more about the relationship between Firebase projects and Google Cloud.resource"google_firebase_project""default"{ # Use the provider that performs quota checks from now onprovider=google-betaproject=google_project.default.project_id # Waits for the required APIs to be enabled.depends_on=[google_project_service.default]}# Creates a Firebase Android App in the new project created above.# Learn more about the relationship between Firebase Apps and Firebase projects.resource"google_firebase_android_app""default"{provider=google-betaproject=google_project.default.project_iddisplay_name="My Awesome Android app" # learn more about an app's display namepackage_name="awesome.package.name" # learn more about an app's package name # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.default,]}
2. adım: Belirtilen altyapıyı oluşturmak için Terraform komutlarını çalıştırın
Kaynakları sağlama ve main.tf dosyanızda belirtilen hizmetleri etkinleştirme için main.tf dosyanızla aynı dizinden aşağıdaki komutları çalıştırın.
Bu komutlar hakkında ayrıntılı bilgi için Terraform belgelerine bakın.
Dizinde ilk kez Terraform komutları çalıştırıyorsanız yapılandırma dizinini başlatmanız ve Google Terraform sağlayıcısını yüklemeniz gerekir. Bunun için aşağıdaki komutu çalıştırın:
terraform init
Aşağıdaki komutu çalıştırarak main.tf dosyanızda belirtilen altyapıyı oluşturun:
terraform apply
Her şeyin beklendiği gibi sağlandığını veya etkinleştirildiğini onaylayın:
1. seçenek: Aşağıdaki komutu çalıştırarak yapılandırmayı terminalinizde yazdırılmış olarak görün:
Aşağıdaki Firebase ve Google kaynakları Terraform'u destekler. Ayrıca, kaynaklarımıza yenilerini eklemeye devam ediyoruz. Bu nedenle, Terraform ile yönetmek istediğiniz kaynağı görmüyorsanız kısa süre sonra tekrar kontrol ederek kullanılabilir olup olmadığını öğrenebilir veya GitHub deposunda sorun kaydı açarak isteyebilirsiniz.
Firebase projesi ve uygulama yönetimi
google_firebase_project: Mevcut bir Google Cloud projesinde Firebase hizmetlerini etkinleştirme
google_identity_platform_config —
Google Cloud Identity Platform (GCIP) (Firebase Authentication için arka uçtur) özelliğini etkinleştirin
ve proje düzeyinde kimlik doğrulama ayarları sağlayın
Terraform'un GCIP ve/veya Firebase Authentication'yi etkinleştireceği proje Blaze fiyatlandırma planında olmalıdır (yani projeyle ilişkili bir Cloud Billing hesabı olmalıdır). Bu işlemi, google_project kaynağında billing_account özelliğini ayarlayarak programatik olarak yapabilirsiniz.
Bu kaynak, anonim, e-posta/şifre ve telefon kimlik doğrulaması gibi yerel oturum açma yöntemlerinin yanı sıra engelleme işlevleri ve yetkili alanlar gibi daha fazla yapılandırmaya da olanak tanır.
Terraform aracılığıyla çok öğeli kimlik doğrulamayı (MFA) yapılandırma
Firebase App Hosting
google_firebase_app_hosting_backend
— GitHub depo bağlantısı ve sürekli dağıtım için canlı dalı da dahil olmak üzere bir Firebase App Hosting arka ucu oluşturun ve yönetin.
Terraform ile Firebase Realtime Database Security Rules dağıtma (programatik seçenekler de dahil olmak üzere diğer araçları kullanarak bu Rules nasıl dağıtacağınızı öğrenin)
google_firestore_document —
Cloud Firestore örneğini bir koleksiyondaki belirli bir dokümanla başlatma
Önemli: Bu başlangıç belgesinde gerçek son kullanıcı veya üretim verilerini kullanmayın.
Cloud Storage for Firebase
google_firebase_storage_bucket —
mevcut bir Cloud Storage grubu, Firebase SDK'ları, kimlik doğrulama ve Firebase Security Rules için erişilebilir hale getirme
Yaygın kullanım alanları için örnek Terraform yapılandırma dosyaları
GCIP ile Firebase Authentication'ı ayarlama
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, projeyi bir Cloud Billing hesabıyla ilişkilendirir (Firebase Authentication ile GCIP için Blaze fiyatlandırma planı gerekir), proje için Firebase hizmetlerini etkinleştirir, Firebase Authentication ile GCIP'yi ayarlar ve projeye üç farklı uygulama türü kaydeder.
Firebase Authentication'yı Terraform üzerinden ayarlamak 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_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for Firebase Authentication with GCIP).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""auth"{provider=google-beta.no_user_project_overrideproject=google_project.auth.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","identitytoolkit.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""auth"{provider=google-betaproject=google_project.auth.project_iddepends_on=[google_project_service.auth,]}# Creates an Identity Platform config.# Also enables Firebase Authentication with Identity Platform in the project if not.resource"google_identity_platform_config""auth"{provider=google-betaproject=google_firebase_project.auth.project # Auto-deletes anonymous usersautodelete_anonymous_users=true # Configures local sign-in methods, like anonymous, email/password, and phone authentication.sign_in{allow_duplicate_emails=trueanonymous{enabled=true}email{enabled=truepassword_required=false}phone_number{enabled=truetest_phone_numbers={"+11231231234"="000000"}}} # Sets an SMS region policy.sms_region_config{allowlist_only{allowed_regions=["US","CA",]}} # Configures blocking functions.blocking_functions{triggers{event_type="beforeSignIn"function_uri="https://us-east1-${google_project.auth.project_id}.cloudfunctions.net/before-sign-in"}forward_inbound_credentials{refresh_token=trueaccess_token=trueid_token=true}} # Configures a temporary quota for new signups for anonymous, email/password, and phone number.quota{sign_up_quota_config{quota=1000start_time=""quota_duration="7200s"}} # Configures authorized domains.authorized_domains=["localhost","${google_project.auth.project_id}.firebaseapp.com","${google_project.auth.project_id}.web.app",]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Web app"}
Firebase Data Connect hizmeti sağlama
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, proje için Firebase hizmetlerini etkinleştirir ve bir Data Connect hizmeti sağlar.
# Creates a new Google Cloud project.resource"google_project""dataconnect"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Data Connect).billing_account="000000-000000-000000" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.dataconnect.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedataconnect.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""dataconnect"{provider=google-betaproject=google_project.dataconnect.project_iddepends_on=[google_project_service.services]}# Create a Firebase Data Connect serviceresource"google_firebase_data_connect_service""dataconnect-default"{project=google_firebase_project.dataconnect.projectlocation="name-of-region-for-service"service_id="${google_firebase_project.dataconnect.project}-default-fdc"deletion_policy="DEFAULT"}
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ü kaydeder.
nasıl dağıtacağınızı öğrenin.
# Creates a new Google Cloud project.resource"google_project""rtdb"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""rtdb"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddepends_on=[google_project_service.rtdb]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database"{provider=google-betaproject=google_firebase_project.rtdb.project # See available locations: https://firebase.google.com/docs/database/locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb.project_id}-default-rtdb"type="DEFAULT_DATABASE"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Web app"}
Birden fazla Firebase Realtime Database örneği sağlama
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, projeyi bir Cloud Billing hesabıyla ilişkilendirir (birden fazla Realtime Database örneği için Blaze fiyatlandırma planı gerekir), 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ü kaydeder.
nasıl dağıtacağınızı öğrenin.
# Creates a new Google Cloud project.resource"google_project""rtdb-multi"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for multiple Realtime Database instances).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""rtdb-multi"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddepends_on=[google_project_service.rtdb-multi]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database-default"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # See available locations: https://firebase.google.com/docs/database/locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb-multi.project_id}-default-rtdb"type="DEFAULT_DATABASE"}# Provisions an additional Realtime Database instance.resource"google_firebase_database_instance""database-additional"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations # This location doesn't need to be the same as the default database instance.region="name-of-region" # This value will become the first segment of the database's URL.instance_id="name-of-additional-database-instance"type="USER_DATABASE"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Web app"}
Varsayılan Cloud Firestore örneğini sağlama
Bu yapılandırma yeni bir Google Cloud projesi oluşturur,
proje için Firebase hizmetlerini etkinleştirir,
projenin varsayılan Cloud Firestore örneğini sağlar
ve projeye üç farklı uygulama türü kaydeder.
Ayrıca, varsayılan Cloud Firestore örneği için Firebase Security Rules sağlar, Cloud Firestore dizini oluşturur ve başlangıç verileri içeren bir Cloud Firestore dokümanı ekler.
# Creates a new Google Cloud project.resource"google_project""firestore"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""firestore"{provider=google-beta.no_user_project_overrideproject=google_project.firestore.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firestore.googleapis.com","firebaserules.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""firestore"{provider=google-betaproject=google_project.firestore.project_iddepends_on=[google_project_service.firestore]}# Provisions the Firestore database instance.resource"google_firestore_database""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectname="(default)" # See available locations: https://firebase.google.com/docs/firestore/locationslocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC"}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore"{provider=google-betaproject=google_firestore_database.firestore.projectsource{files{name="firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-startedcontent=file("firestore.rules")}}}# Releases the ruleset for the Firestore instance.resource"google_firebaserules_release""firestore"{provider=google-betaname="cloud.firestore" # must be cloud.firestoreruleset_name=google_firebaserules_ruleset.firestore.nameproject=google_firestore_database.firestore.project}# Adds a new Firestore index.resource"google_firestore_index""indexes"{provider=google-betaproject=google_firestore_database.firestore.projectcollection="quiz"query_scope="COLLECTION"fields{field_path="question"order="ASCENDING"}fields{field_path="answer"order="ASCENDING"}}# Adds a new Firestore document with seed data.# Don't use real end-user or production data in this seed document.resource"google_firestore_document""doc"{provider=google-betaproject=google_firestore_database.firestore.projectcollection="quiz"document_id="question-1"fields="{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Web app"}
Bu, Cloud Firestore Security Rules kurallarının firestore.rules adlı yerel bir dosyada bulunması gereken kümesidir.
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, projeyi bir Cloud Billing hesabıyla ilişkilendirir (ek paketler için Blaze fiyatlandırma planı gerekir), proje için Firebase hizmetlerini etkinleştirir, ek varsayılan olmayan Cloud Storage paketleri sağlar ve projeye üç farklı uygulama türü kaydeder.
Ayrıca her Cloud Storage grubu için Firebase Security Rules sağlar ve Cloud Storage gruplarından birine dosya yükler.
# Creates a new Google Cloud project.resource"google_project""storage-multi"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for multiple Cloud Storage buckets).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""storage-multi"{provider=google-beta.no_user_project_overrideproject=google_project.storage-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddepends_on=[google_project_service.storage-multi]}# Provisions a Cloud Storage bucket.resource"google_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locationslocation="name-of-region-for-bucket"}# Provisions an additional Cloud Storage bucket.resource"google_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-additional-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locations # This location does not need to be the same as the existing Storage bucket.location="name-of-region-for-additional-bucket"}# Makes the first Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-1.name}# Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-2.name}# Creates a ruleset of Firebase Security Rules from a local file.resource"google_firebaserules_ruleset""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectsource{files{ # Write security rules in a local file named "storage.rules" # Learn more: https://firebase.google.com/docs/storage/security/get-startedname="storage.rules"content=file("storage.rules")}}}# Releases the ruleset to the first Storage bucket.resource"google_firebaserules_release""bucket-1"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-1.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Releases the ruleset to the additional Storage bucket.resource"google_firebaserules_release""bucket-2"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-2.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Uploads a new file to the first Storage bucket.# Do not use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture-multi"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_storage_bucket.bucket-1.name}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Web app"}
Bu, Cloud Storage Security Rules kurallarının storage.rules adlı yerel bir dosyada bulunması gereken kümesidir.
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, proje için Firebase hizmetlerini etkinleştirir ve Cloud Firestore için Firebase App Check'nin zorunlu kılınmasını ayarlayıp etkinleştirir. Böylece Cloud Firestore'ye yalnızca Android uygulamanızdan erişilebilir.
# Creates a new Google Cloud project.resource"google_project""appcheck"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.appcheck.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseappcheck.googleapis.com","firestore.googleapis.com","serviceusage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""appcheck"{provider=google-betaproject=google_project.appcheck.project_iddepends_on=[google_project_service.services]}# Provisions the Firestore database instance.resource"google_firestore_database""database"{provider=google-betaproject=google_firebase_project.appcheck.projectname="(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-locationlocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectdisplay_name="Play Integrity app"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Register the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectapp_id=google_firebase_android_app.appcheck.app_iddepends_on=[google_firestore_database.database]lifecycle{precondition{condition=length(google_firebase_android_app.appcheck.sha256_hashes)>0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}}# Enable enforcement of App Check for Firestoreresource"google_firebase_app_check_service_config""firestore"{provider=google-betaproject=google_firebase_project.appcheck.projectservice_id="firestore.googleapis.com"depends_on=[google_project_service.services]}
Firebase Extension örneği yükleme
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, proje için Firebase hizmetlerini etkinleştirir ve projeye yeni bir Firebase Extension örneği yükler. Örnek zaten varsa 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_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Extensions).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""extensions"{provider=google-beta.no_user_project_overrideproject=google_project.extensions.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firebase.googleapis.com","firebaseextensions.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""extensions"{provider=google-betaproject=google_project.extensions.project_iddepends_on=[google_project_service.extensions,]}# Installs an instance of the "Translate Text in Firestore" extension.# Or updates the extension if the specified instance already exists.resource"google_firebase_extensions_instance""translation"{provider=google-betaproject=google_firebase_project.extensions.projectinstance_id="translate-text-in-firestore"config{extension_ref="firebase/firestore-translate-text"params={COLLECTION_PATH="posts/comments/translations"DO_BACKFILL=trueLANGUAGES="ar,en,es,de,fr"INPUT_FIELD_NAME="input"LANGUAGES_FIELD_NAME="languages"OUTPUT_FIELD_NAME="translated"}system_params={"firebaseextensions.v1beta.function/location"="us-central1""firebaseextensions.v1beta.function/memory"="256""firebaseextensions.v1beta.function/minInstances"="0""firebaseextensions.v1beta.function/vpcConnectorEgressSettings"="VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED"}}}
Firebase AI Logic özelliğini etkinleştirme ve koruma
Bu yapılandırma yeni bir Google Cloud projesi oluşturur,
Firebase AI Logic dahil olmak üzere proje için Firebase hizmetlerini etkinleştirir ve
Firebase App Check için Firebase AI Logic'nin yalnızca uygulamalarınızdan erişilebilmesi için Firebase App Check'nin zorunlu kılınmasını ayarlar ve etkinleştirir.
# Creates a new Google Cloud project.resource"google_project""vertex"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for Vertex AI in Firebase).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.vertex.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","serviceusage.googleapis.com", # Required APIs for Vertex AI in Firebase"aiplatform.googleapis.com","firebasevertexai.googleapis.com", # App Check is recommended to protect Vertex AI in Firebase from abuse"firebaseappcheck.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""vertex"{provider=google-betaproject=google_project.vertex.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Web App"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Android App"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Creates a Firebase Apple App in the new project created earlier.resource"google_firebase_apple_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Apple App"bundle_id="bundle.id"team_id="1234567890"}### Protects Vertex AI in Firebase with App Check.# Turns on enforcement for Vertex AI in Firebaseresource"google_firebase_app_check_service_config""vertex"{provider=google-betaproject=google_firebase_project.vertex.projectservice_id="firebaseml.googleapis.com"enforcement_mode="ENFORCED"}# Enables the reCAPTCHA Enterprise APIresource"google_project_service""recaptcha_enterprise"{provider=google-betaproject=google_firebase_project.vertex.projectservice="recaptchaenterprise.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables the Play Integrity APIresource"google_project_service""play_integrity"{provider=google-betaproject=google_firebase_project.vertex.projectservice="playintegrity.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Allows the web app to use reCAPTCHA Enterprise with App Checkresource"google_firebase_app_check_recaptcha_enterprise_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_web_app.app.app_idsite_key="your site key"token_ttl="7200s" # Optionaldepends_on=[google_project_service.recaptcha_enterprise]}# Registers the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_android_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=length(google_firebase_android_app.app.sha256_hashes)>0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}depends_on=[google_project_service.play_integrity]}# Registers the Apple app with the AppAttest providerresource"google_firebase_app_check_app_attest_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_apple_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=google_firebase_apple_app.app.team_id!=""error_message="Provide a Team ID on the Apple App to use App Check"}}}
App Hosting arka ucunu manuel olarak sağlama
Bu yapılandırmada, Terraform kullanarak bir App Hosting
arka ucun nasıl manuel olarak sağlanacağı gösterilmektedir. Bu yaklaşım, oluşturulan kaynaklar üzerinde ayrıntılı kontrol sahibi olmanızı sağlar ancak her kaynağı ayrı ayrı tanımlamanızı gerektirir. Bu, arka ucu varsayılan seçeneklerin ötesinde özelleştirmeniz gerektiğinde kullanışlıdır.
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","serviceusage.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}# Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS" # or "REGIONAL_STRICT"service_account=google_service_account.service_account.email}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Creates a Buildresource"google_firebase_app_hosting_build""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idbuild_id="my-build"source{container{ # TODO: use your own imageimage="us-docker.pkg.dev/cloudrun/container/hello"}}}# Rolls out the Buildresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idtarget{splits{build=google_firebase_app_hosting_build.example.namepercent=100}}}
GitHub'ı kullanarak bir App Hosting arka ucu sağlama
Bu yapılandırmada, GitHub deposunda depolanan uygulama kodu kullanılarak nasıl App Hosting arka ucu sağlanacağı gösterilmektedir. Bu yaklaşım, App Hosting dağıtımlarının tipik modeline göre altyapınızı GitHub çekme istekleri ve CI/CD işlem hatları aracılığıyla yönetmenize ve güncellemenize olanak tanır.
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","serviceusage.googleapis.com","developerconnect.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables Firebase services for the new project created earlier.resource"google_firebase_project""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}### Setting up Firebase App Hosting #### Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS" # or "REGIONAL_STRICT"service_account=google_service_account.service_account.emailcodebase{repository=google_developer_connect_git_repository_link.my-repository.nameroot_directory="/"}}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/developerconnect.readTokenAccessor","roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Configures auto rollout from GitHubresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idrollout_policy{codebase_branch="main" # Or another branch}}###### Setting up a connection to GitHub #### Provisions Service Agent for Developer Connectresource"google_project_service_identity""devconnect-p4sa"{provider=google-betaproject=google_firebase_project.apphosting.projectservice="developerconnect.googleapis.com"}# Adds permission to Developer Connect Service Agent to manager GitHub tokensresource"google_project_iam_member""devconnect-secret"{provider=google-betaproject=google_firebase_project.apphosting.projectrole="roles/secretmanager.admin"member=google_project_service_identity.devconnect-p4sa.member}# Connects to a GitHub accountresource"google_developer_connect_connection""my-connection"{provider=google-betaproject=google_firebase_project.apphosting.project # Must match the google_firebase_app_hosting_backend's locationlocation="name-of-region-for-service" # Must be `firebase-app-hosting-github-oauth`connection_id="firebase-app-hosting-github-oauth"github_config{github_app="FIREBASE"}depends_on=[google_project_iam_member.devconnect-secret]}# Follow the next steps to set up the GitHub connection# Tip: Run terraform refresh to obtain the outputoutput"next_steps"{description="Follow the action_uri if present to continue setup"value=google_developer_connect_connection.my-connection.installation_state}# Links a GitHub repo to the projectresource"google_developer_connect_git_repository_link""my-repository"{provider=google-betaproject=google_firebase_project.apphosting.projectlocation=google_developer_connect_connection.my-connection.locationgit_repository_link_id="my-repo-id"parent_connection=google_developer_connect_connection.my-connection.connection_idclone_uri="https://github.com/myuser/myrepo.git"}###
Sorun giderme ve SSS
Proje ile ilgili tüm farklı özellikler (ör. project ve user_project_override) hakkında daha fazla bilgi edinmek istiyorsanız
Bu kılavuzda, "projeler" ile çalışırken aşağıdaki Terraform özellikleri kullanılır.
resource blok içindeki project
Önerilen: Mümkün olduğunda her project bloğuna resource özelliğini ekleyin.
Bir proje özelliği eklediğinizde Terraform, belirtilen proje içindeki kaynak bloğunda belirtilen altyapıyı oluşturur. Bu kılavuzda ve örnek yapılandırma dosyalarımızda bu uygulama kullanılmaktadır.
project ile ilgili resmi Terraform dokümanlarına bakın.
provider bloğunda user_project_override
Çoğu kaynağı sağlarken user_project_override = true kullanmanız gerekir. Bu, kotayı kendi Firebase projenize göre kontrol etmeniz gerektiği anlamına gelir. Ancak yeni projenizi kota kontrollerini kabul edecek şekilde ayarlamak için önce user_project_override = false kullanmanız gerekir.
Şu hatayı alıyorsunuz:
generic::permission_denied: Firebase Tos Not Accepted.
gcloud CLIKomutları çalıştırmak için kullandığınız kullanıcı hesabının Firebase Hizmet Şartları'nı (Firebase ToS) kabul ettiğinden emin olun.
Bu kontrolü, kullanıcı hesabında oturum açılmış bir tarayıcıyı kullanarak ve Firebase konsolunda mevcut bir Firebase projesini görüntülemeye çalışarak yapabilirsiniz. Mevcut bir Firebase projesini görüntüleyebiliyorsanız kullanıcı hesabı, Firebase Hizmet Şartları'nı kabul etmiştir.
Mevcut Firebase projelerini göremiyorsanız kullanıcı hesabı büyük olasılıkla Firebase Hizmet Şartları'nı kabul etmemiştir. Bu sorunu düzeltmek için Firebase konsolu üzerinden yeni bir Firebase projesi oluşturun ve proje oluşturma sürecinde Firebase Hizmet Şartları'nı kabul edin. Bu projeyi konsoldaki Proje Ayarları'ndan hemen silebilirsiniz.
terraform apply komutunu çalıştırdıktan sonra şu hatayı alıyorsunuz:
generic::permission_denied: IAM authority does not have the
permission.
Birkaç dakika bekleyip terraform apply uygulamasını tekrar çalıştırmayı deneyin.
Kaynak oluşturma işlemi başarısız oldu ancak terraform apply komutunu tekrar çalıştırdığınızda ALREADY_EXISTS mesajı gösteriliyor.
Bu durum, çeşitli sistemlerdeki dağıtım gecikmesinden kaynaklanabilir. terraform import komutunu çalıştırarak kaynağı Terraform durumuna aktarıp bu sorunu çözmeyi deneyin. Ardından terraform apply komutunu tekrar çalıştırmayı deneyin.
Cloud Firestore ile çalışırken şu hatayı alıyorsunuz: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
Hatanın da belirttiği gibi, Terraform aynı anda birden fazla dizin sağlamaya ve/veya doküman oluşturmaya çalışıyor olabilir ve eşzamanlılık hatasıyla karşılaşmış olabilir.
terraform apply komutunu tekrar çalıştırmayı deneyin.
Aşağıdaki hatayı alıyorsunuz:
"you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes".
Bu hata, Terraform'un hangi projede 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.
Firebase örneklerinde google-beta olan user_project_override = true
(takma ad yok) sağlayıcısını kullandığınızdan emin olun.
Yeni bir Google Cloud projesi oluştururken, yeni proje için belirtilen proje kimliğinin zaten mevcut olduğu hatasını alıyorsunuz.
Proje kimliğinin mevcut olmasının olası nedenleri şunlardır:
Bu kimlikle ilişkili proje başka birine ait.
Çözmek için: Başka bir proje kimliği seçin.
Bu kimlikle ilişkili proje yakın zamanda silindi (geçici silme durumunda).
Çözmek için: Kimlikle ilişkili projenin size ait olduğunu düşünüyorsanız projects.get REST API'yi kullanarak projenin durumunu kontrol edin.
Bu kimlikle ilişkili proje, mevcut kullanıcı altında doğru şekilde bulunuyor. Bu hatanın olası nedeni, önceki bir terraform apply işleminin kesintiye uğraması olabilir.
Çö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
Varsayılan Cloud Firestore örneğini varsayılan Cloud Storage paketinden önce neden sağlamanız gerekir?
Varsayılan Cloud Storage paketinizi (google_app_engine_application aracılığıyla) varsayılan Cloud Firestore örneğinizi sağlamaya çalışmadan önce sağladıysanız varsayılan Cloud Firestore örneğinizin zaten sağlandığını görürsünüz. Sağlanan veritabanı örneğinin Datastore modunda olduğunu unutmayın. Bu nedenle, Firebase SDK'ları, kimlik doğrulama veya Firebase Security Rules tarafından erişilemez. Bu Firebase hizmetleriyle Cloud Firestore kullanmak istiyorsanız veritabanını boşaltmanız ve ardından Google Cloud konsolunda veritabanı türünü değiştirmeniz gerekir.
Cloud Storage (google_app_engine_application üzerinden) ve ardından varsayılan Cloud Firestore örneğini sağlamaya çalışırken şu hatayı alıyorsunuz: Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
Bir projenin varsayılan Cloud Storage paketini (google_app_engine_application aracılığıyla) sağladığınızda ve projede henüz varsayılan Cloud Firestore örneği yoksa google_app_engine_application, projenin varsayılan Cloud Firestore örneğini otomatik olarak sağlar.
Bu nedenle, projenizin varsayılan Cloud Firestore örneği zaten hazır olduğundan bu varsayılan örneği tekrar açıkça hazırlamaya çalışırsanız google_firestore_database hata verir.
Projenin varsayılan Cloud Firestore örneği sağlandıktan sonra bu örneği yeniden sağlayamaz veya konumunu değiştiremezsiniz. Sağlanan veritabanı örneğinin Datastore modunda olduğunu unutmayın. Bu nedenle, Firebase SDK'ları, kimlik doğrulama veya Firebase Security Rules tarafından erişilemez. Bu Firebase hizmetleriyle Cloud Firestore
kullanmak istiyorsanız veritabanını boşaltmanız ve ardından Google Cloud konsolunda veritabanı türünü değiştirmeniz gerekir.