Terraform ve Firebase'i kullanmaya başlayın
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 otomatik hâle getirmek ve standartlaştırmak isteyen bir ekibin üyesiyseniz Firebase ile Terraform'u kullanmak sizin için uygun olabilir.
Terraform'u Firebase ile 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.
.tf dosyasında belirtilen altyapıyı sağlamak için Terraform ile arayüz oluşturan gcloud CLI komutlarını kullanma
Cloud Storage paketleri veya veritabanı örnekleri oluşturma ve bunlar için Firebase Security Rules dağıtma.
Firebase App Hosting arka uç, derleme ve diğer ilgili kaynaklar oluşturuluyor.
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 yaygın kullanım alanlarına yönelik örnek Terraform yapılandırma dosyaları hazırladık.
Firebase ile Terraform'u kullanmaya yönelik genel iş akışı
Ön koşullar
Bu kılavuz, Terraform'un Firebase ile kullanımına giriş niteliğindedir. Bu nedenle, Terraform hakkında temel düzeyde bilgi 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ğitimleri 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şsiniz demektir.
Terraform'un belirli işlemleri (ör. 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ş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ında iki ana bölüm bulunmalıdır (bunlar aşağıda ayrıntılı olarak açıklanmıştır):
Hangi Firebase ürün veya hizmetleri kullanılırsa kullanılsın provider kurulumu gereklidir.
Yerel dizininizde bir Terraform yapılandırma dosyası (main.tf dosyası gibi) oluşturun.
Bu kılavuzda, hem provider kurulumunu 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 dahil etmek 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 yeni kullanmaya başladıysanı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ı bir .tf dosyasına (ör. provider.tf dosyası) ekleyin.
Kurulumu standartlaştırması gereken daha büyük bir ekibin parçasıysanız bu seçeneği kullanın.
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 en üstüne aşağıdaki provider kurulumunu ekleyin.
Firebase'i Terraform ile kullanma özelliğinin 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}
Terraform'u Firebase ile kullanırken projeyle ilgili farklı özellik türleri (bu kılavuzda "kota kontrol projesi" olarak adlandırılan özellik dahil) hakkında daha fazla bilgi edinin.
Yapılandırma dosyanızı tamamlamak ve hangi altyapıyı oluşturacağınızı belirtmek için 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 temel hazırlığını yapmak 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, aşağıdaki resource blok yapılandırmasını ekleyin.
Bu temel örnekte yeni bir Firebase projesi oluşturulur ve ardından bu projede 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çıklamalı sürümünü görüntüleyin.
Kaynak olarak proje ve uygulama 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.
main.tf dosyanızda belirtilen kaynakları sağlamak ve hizmetleri etkinleştirmek 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 ilk kullanıma hazırlamanız ve Google Terraform sağlayıcısını yüklemeniz gerekir. Bunu yapmak 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 temel hazırlığının yapıldığını veya etkinleştirildiğini onaylayın:
1. seçenek: Aşağıdaki komutu çalıştırarak terminalinizde yazdırılan yapılandırmayı görebilirsiniz:
Aşağıdaki Firebase ve Google kaynakları Terraform'u destekler. Sürekli yeni kaynaklar ekliyoruz. Terraform ile yönetmek istediğiniz kaynağı görmüyorsanız kısa süre sonra tekrar kontrol ederek kullanılabilir olup olmadığına bakın veya GitHub deposunda sorun bildirerek kaynağı talep edin.
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'yi (GCIP) (Firebase Authentication için arka uç) etkinleştirin
ve proje düzeyinde kimlik doğrulama ayarları sağlayın.
Terraform'un GCIP ve/veya Firebase Authentication'yı etkinleştireceği proje, Blaze fiyatlandırma planında olmalıdır (yani projenin ilişkili bir Cloud Billing hesabı olmalıdır). Bunu, google_project kaynağında billing_account özelliğini ayarlayarak programatik olarak yapabilirsiniz.
Bu kaynak ayrıca 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ırmayı da etkinleştirir.
Terraform aracılığıyla çok öğeli kimlik doğrulamasını (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ı dahil olmak üzere bir Firebase App Hosting arka ucu oluşturup yönetin.
Firebase Realtime Database Security Rules çözümünü Terraform ile dağıtma (programatik seçenekler de dahil olmak üzere diğer araçları kullanarak bu Security Rules çözümlerini nasıl dağıtacağınızı öğrenin)
google_firestore_document: Bir koleksiyondaki belirli bir belgeyle Cloud Firestore örneği oluşturun.
Önemli: Bu temel belgede gerçek son kullanıcı veya üretim verilerini kullanmayın.
Cloud Storage for Firebase
google_firebase_storage_bucket: Mevcut bir Cloud Storage paketini Firebase SDK'ları, kimlik doğrulama ve Firebase Security Rules için erişilebilir hale getirin.
Yaygın kullanım alanları için örnek Terraform yapılandırma dosyaları
GCIP ile Firebase Authentication kurulumu
Bu yapılandırma yeni bir Google Cloud projesi oluşturur,
projeyi bir Cloud Billing hesabıyla ilişkilendirir (GCIP ile Firebase Authentication için Blaze fiyatlandırma planı gereklidir),
proje için Firebase hizmetlerini etkinleştirir,
GCIP ile Firebase Authentication'yi ayarlar
ve projeye üç farklı uygulama türü kaydeder.
Terraform aracılığıyla Firebase Authentication kurulumu yapmak için GCIP'yi etkinleştirmeniz 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 SQL Connect hizmeti sağlama
Bu yapılandırma yeni bir Google Cloud projesi oluşturur,
proje için Firebase hizmetlerini etkinleştirir ve
bir SQL 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"}
Varsayılan Firebase Realtime Database örneğini temel hazırlıkla oluşturun.
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 hazırlar
ve projeye üç farklı uygulama türü kaydeder.
# 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ğinin temel hazırlığını yapma
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 (projenin varsayılan Realtime Database örneği dahil) sağlar
ve projeye üç farklı uygulama türü kaydeder.
# 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 temel hazırlıkla oluşturma
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 hazırlar
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 temel verileri içeren bir Cloud Firestore belgesi 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, firestore.rules adlı yerel bir dosyada bulunması gereken Cloud Firestore Security Rules kural grubudur.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /some_collection/{document} {
allow read, create, update: if request.auth != null;
}
}
}
Varsayılan Cloud Storage paketini temel hazırlıkla oluşturun.
Cloud Storage ek paket
temel hazırlığı yapın
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ı gereklidir),
proje için Firebase hizmetlerini etkinleştirir,
varsayılan olmayan ek Cloud Storage paketleri sağlar
ve projeye üç farklı uygulama türü kaydeder.
Ayrıca her Cloud Storage paketi için Firebase Security Rules sağlar ve Cloud Storage paketlerinden 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, storage.rules adlı yerel bir dosyada bulunması gereken Cloud Storage Security Rules kural grubudur.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /some_folder/{fileName} {
allow read, write: if request.auth != null;
}
}
}
Firebase App Check ile API kaynaklarını koruma
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 yaptırımını ayarlayıp etkinleştirir.
Böylece 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ükleyin
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 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_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 AI Logic için Firebase App Check'yi ayarlayıp zorunlu kılar. Böylece, yalnızca uygulamalarınızdan erişilebilir.
# 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 temel hazırlıkla oluşturma
Bu yapılandırma, Terraform kullanarak bir App Hosting arka ucunun manuel olarak nasıl sağlanacağını gösterir. Bu yaklaşım, oluşturulan kaynaklar üzerinde ayrıntılı kontrol 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"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 App Hosting arka ucu temel hazırlığı yapma
Bu yapılandırma, GitHub deposunda depolanan uygulama kodunu kullanarak App Hosting arka ucunun nasıl temel hazırlığının yapılacağını gösterir. Bu yaklaşım, altyapınızı GitHub pull istekleri ve CI/CD ardışık düzenleri aracılığıyla tipik App Hosting dağıtım modeline göre 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"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
Projeyle ilgili tüm farklı özellikler (project ve user_project_override gibi) 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çinde project
Önerilen: Mümkün olduğunda her resource bloğuna project özelliğini ekleyin.
Proje özelliği eklediğinizde Terraform, kaynak bloğunda belirtilen altyapıyı belirtilen projede oluşturur. Bu kılavuzda ve örnek yapılandırma dosyalarımızda bu yöntem kullanılır.
project ile ilgili resmi Terraform belgelerine bakın.
provider bloğundaki user_project_override
Çoğu kaynağın temel hazırlığı için user_project_override = true kullanmanız gerekir. Bu, kotayı kendi Firebase projenize göre kontrol etmek 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 CLI komutlarını çalıştırmak için kullandığınız kullanıcı hesabının Firebase Hizmet Şartları'nı kabul ettiğinden emin olun.
Bu kontrolü, kullanıcı hesabında oturum açmış bir tarayıcı 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ş demektir.
Mevcut Firebase projelerini göremiyorsanız kullanıcı hesabı muhtemelen 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 işlemi sırasında 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ırsınız: generic::permission_denied: IAM authority does not have the
permission.
Birkaç dakika bekleyip terraform apply komutunu 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 yayılma 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
Hata mesajında belirtildiği gibi Terraform, aynı anda birden fazla dizinin temel hazırlığını yapmaya ve/veya bir 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.
Şu hatayı alıyorsunuz:
"you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes".
Bu hata, Terraform'un kotayı hangi projeye göre 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.
Sağlayıcıyı user_project_override = true (takma ad yok) ile kullandığınızdan emin olun. Firebase örneklerinde bu, google-beta şeklindedir.
Yeni bir Google Cloud projesi oluştururken yeni proje için belirtilen proje kimliğinin zaten mevcut olduğuna dair bir hata alıyorsunuz.
Proje kimliğinin zaten mevcut olmasının olası nedenleri şunlardır:
Bu kimlikle ilişkili proje başka birine ait.
Çözüm: Başka bir proje kimliği seçin.
Bu kimlikle ilişkili proje kısa süre önce silindi (geçici olarak silinmiş durumda).
Çözüm: 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 mevcut. Hatanın olası bir nedeni, önceki bir terraform apply işleminin kesintiye uğramış olması olabilir.
Çözüm: Aşağıdaki komutları çalıştırın: terraform import google_project.default PROJECT_ID
Ardından şu komutu çalıştırın: terraform import google_firebase_project.default PROJECT_ID
Varsayılan Cloud Storage paketinden önce varsayılan Cloud Firestore örneğini neden temel hazırlamanız gerekir?
Varsayılan Cloud Firestore örneğinizin temel hazırlığını yapmayı denemeden önce varsayılan Cloud Storage paketinizin temel hazırlığını (google_app_engine_application aracılığıyla) yaptıysanız varsayılan Cloud Firestore örneğinizin temel hazırlığının zaten yapılmış olduğunu görürsünüz. Sağlanan veritabanı örneğinin Datastore modunda olduğunu, yani Firebase SDK'ları, kimlik doğrulama veya Firebase Security Rules tarafından erişilebilir olmadığını unutmayın. Cloud Firestore hizmetini bu Firebase hizmetleriyle kullanmak istiyorsanız veritabanını boşaltmanız ve ardından Google Cloud Console'da veritabanı türünü değiştirmeniz gerekir.
Cloud Storage (google_app_engine_application aracılığıyla) ve ardından varsayılan Cloud Firestore örneğinizi temel hazırlamaya ç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) temel hazırlıkla oluşturduğunuzda ve projenin varsayılan Cloud Firestore örneği henüz yoksa google_app_engine_application, projenin varsayılan Cloud Firestore örneğini otomatik olarak temel hazırlıkla oluşturur.
Projenizin varsayılan Cloud Firestore örneği zaten sağlanmış olduğundan, bu varsayılan örneği tekrar açıkça sağlamaya çalışırsanız google_firestore_database hata verir.
Projenin varsayılan Cloud Firestore örneği temel hazırlığı yapıldıktan sonra "yeniden temel hazırlığı" yapamaz veya konumunu değiştiremezsiniz. Hazırlanan veritabanı örneğinin Datastore modunda olduğunu, yani Firebase SDK'ları, kimlik doğrulama veya Firebase Security Rules tarafından erişilebilir olmadığını unutmayın. Cloud Firestore hizmetini bu Firebase hizmetleriyle kullanmak istiyorsanız veritabanını boşaltmanız ve ardından Google Cloud Console'da veritabanı türünü değiştirmeniz gerekir.