Firebase Terraform'u desteklemeye başlıyor. Belirli kaynakların sağlandığı ve hizmetlerin etkinleştirildiği Firebase projeleri oluşturmayı otomatikleştirmek ve standartlaştırmak isteyen bir ekipteyseniz Terraform'u Firebase ile birlikte kullanmak sizin için uygun olabilir.
Terraform'u Firebase ile kullanmaya yönelik temel iş akışı aşağıdakileri içerir:
Sağlamak istediğiniz altyapıyı (yani, sağlamak istediğiniz kaynaklar ve etkinleştirmek istediğiniz hizmetler) belirten bir Terraform yapılandırma dosyası (bir
.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.
Terraform ve Firebase ile neler yapabilirsiniz?
Bu kılavuzdaki örnek genelleştirilmiş iş akışı, Android uygulamasıyla yeni bir Firebase projesi oluşturmaktır. Ancak Terraform ile çok daha fazlasını yapabilirsiniz:
Terraform'u kullanarak mevcut altyapıyı silin ve değiştirin.
Terraform'u kullanarak aşağıdakiler gibi ürüne özel yapılandırmayı ve görevleri yönetin:
- Firebase Authentication oturum açma sağlayıcılarını etkinleştirme.
- Cloud Storage paketleri veya veritabanı örnekleri oluşturma ve bunlar için Firebase Güvenlik Kurallarını dağıtma.
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 amacıyla, çeşitli yaygın kullanım durumları için örnek Terraform yapılandırma dosyaları sağladık.
Terraform'u Firebase ile kullanmaya yönelik genelleştirilmiş iş akışı
Önkoşullar
Bu kılavuz, Terraform'u Firebase ile kullanmaya giriş niteliğinde olduğundan Terraform'da temel yeterlilik varsayılmaktadır. Bu iş akışına başlamadan önce aşağıdaki önkoşulları tamamladığınızdan emin olun.
Terraform'u yükleyin ve resmi eğitimlerini kullanarak Terraform'u öğrenin.
Google Cloud CLI'yi (gCloud CLI) yükleyin . Bir kullanıcı hesabı veya hizmet hesabı kullanarak oturum açın.
- Bir kullanıcı hesabı kullanıyorsanız Firebase Hizmet Şartları'nı (Firebase Hizmet Şartları) kabul etmiş olmanız gerekir. Bir Firebase projesini Firebase konsolunda görüntüleyebiliyorsanız Firebase Hizmet Şartları'nı kabul etmiş olursunuz
- Terraform'un belirli eylemleri gerçekleştirebilmesi (örneğin, proje oluşturma) için aşağıdakilerin doğru olması gerekir:
- Kullanıcı veya hizmet hesabının bu işlemler için geçerli IAM erişimine sahip olması gerekir.
- Kullanıcı veya hizmet hesabı bir Google Cloud kuruluşunun parçasıysa kuruluş politikalarının, hesabın bu işlemleri gerçekleştirmesine izin vermesi gerekir.
1. Adım: Terraform yapılandırma dosyasını oluşturun ve özelleştirin
Bir Terraform yapılandırma dosyası iki ana bölüme ihtiyaç duyar (bunlar aşağıda ayrıntılı olarak açıklanmıştır):
- Hangi Terraform kaynaklarına erişilebileceğini belirleyen
provider
kurulum bölümü - Hangi altyapının oluşturulacağını belirten bireysel
resource
bloklarının bir bölümü
provider
ayarlayın
Hangi Firebase ürün veya hizmetlerinin dahil olduğuna bakılmaksızın bir provider
kurulumu gereklidir.
Yerel dizininizde bir Terraform yapılandırma dosyası (
main.tf
dosyası gibi) oluşturun.Bu kılavuzda, bu yapılandırma dosyasını hem
provider
kurulumunu hem de Terraform'un oluşturmasını istediğiniz tüm altyapıyı belirtmek için kullanacaksınız. Ancak sağlayıcı kurulumunu nasıl ekleyeceğinizle ilgili seçeneklerinizin olduğunu unutmayın.provider
kurulumunu Terraform yapılandırmanızın geri kalanına nasıl ekleyeceğinize ilişkin aşağıdaki seçeneklere sahipsiniz:Seçenek 1: Bunu 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şlıyorsanız veya Terraform'u Firebase ile deniyorsanız bu seçeneği kullanın.
Seçenek 2: Bunu, oluşturulacak altyapıyı belirttiğiniz
.tf
dosyası (main.tf
dosyası gibi) dışında ayrı bir.tf
dosyasına (provider.tf
dosyası gibi) 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 demain.tf
dosyasının aynı dizinde olması gerekir.
main.tf
dosyasının en üstüne aşağıdakiprovider
kurulumunu ekleyin.Bu, 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 = "~> 4.0" } } } # Configures the provider to use the resource block's specified project for quota checks. provider "google-beta" { user_project_override = true } # Configures the provider to not use the resource block's specified project for quota checks. # This provider should only be used during project creation and initializing services. provider "google-beta" { alias = "no_user_project_override" user_project_override = false }
Terraform'u Firebase ile kullanırken projeyle ilgili farklı türde özellikler (bu kılavuzda "kota kontrolü projesi" olarak adlandırılanlar 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ı belirtin
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
kurulumunun altına aşağıdakiresource
blokları yapılandırmasını ekleyin.Bu temel örnek, yeni bir Firebase projesi oluşturur ve ardından bu proje içinde bir Firebase Android Uygulaması oluşturur.
# Terraform configuration to set up providers by version. ... # Configures the provider to use the resource block's specified project for quota checks. ... # Configures the provider to not use the resource block's specified project for quota checks. ... # Creates a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "Project Display Name" project_id = "project-id-for-new-project" # Required for any service that requires the Blaze pricing plan # (like Firebase Authentication with GCIP) billing_account = "000000-000000-000000" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "default" { provider = google-beta.no_user_project_override project = google_project.default.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on. "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "default" { provider = google-beta project = google_project.default.project_id # Waits for the required APIs to be enabled. depends_on = [ google_project_service.default ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "default" { provider = google-beta project = google_project.default.project_id display_name = "My Awesome Android app" package_name = "awesome.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.default, ] }
Kaynak olarak projelerin ve uygulamaların altyapısına aşina değilseniz aşağıdaki belgeleri inceleyin:
- Firebase projelerini anlama
- Firebase proje yönetimi için referans belgeler
# Terraform configuration to set up providers by version. ... # Configures the provider to use the resource block's specified project for quota checks. ... # Configures the provider to not use the resource block's specified project for quota checks. ... # Creates a new Google Cloud project. resource "google_project" "default" { # Use the provider that enables the setup of quota checks for a new project provider = google-beta.no_user_project_override name = "Project Display Name" // learn more about the project name project_id = "project-id-for-new-project" // learn more about the project ID # Required for any service that requires the Blaze pricing plan # (like Firebase Authentication with GCIP) billing_account = "000000-000000-000000" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" // learn more about the Firebase-enabled label } } # Enables required APIs. resource "google_project_service" "default" { # Use the provider without quota checks for enabling APIS provider = google-beta.no_user_project_override project = google_project.default.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on. "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. # This action essentially "creates a Firebase project" and allows the project to use # Firebase services (like Firebase Authentication) and # Firebase tooling (like the Firebase console). # Learn more about the relationship between Firebase projects and Google Cloud. resource "google_firebase_project" "default" { # Use the provider that performs quota checks from now on provider = google-beta project = google_project.default.project_id # Waits for the required APIs to be enabled. depends_on = [ google_project_service.default ] } # Creates a Firebase Android App in the new project created above. # Learn more about the relationship between Firebase Apps and Firebase projects. resource "google_firebase_android_app" "default" { provider = google-beta project = google_project.default.project_id display_name = "My Awesome Android app" # learn more about an app's display name package_name = "awesome.package.name" # learn more about an app's package name # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.default, ] }
Adım 2: 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 aşağıdaki komutları main.tf
dosyanızla aynı dizinde çalıştırın. Bu komutlar hakkında ayrıntılı bilgi için Terraform belgelerine bakın.
Dizinde Terraform komutlarını ilk kez çalıştırıyorsanız, yapılandırma dizinini başlatmanız ve Google Terraform sağlayıcısını yüklemeniz gerekir. Bunu aşağıdaki komutu çalıştırarak yapı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 doğrulayın:
Seçenek 1: Aşağıdaki komutu çalıştırarak terminalinizde yazdırılan konfigürasyona bakın:
terraform show
2. Seçenek: Firebase projenizi Firebase konsolunda görüntüleyin.
Terraform destekli Firebase kaynakları
Aşağıdaki Firebase ve Google kaynaklarında Terraform desteği bulunmaktadır. Ve sürekli olarak daha fazla kaynak ekliyoruz! Dolayısıyla, Terraform ile yönetmek istediğiniz kaynağı göremiyorsanız, kullanılabilir olup olmadığını görmek için kısa süre sonra tekrar kontrol edin veya GitHub deposunda bir sorun bildirerek talepte bulunun.
Firebase proje ve uygulama yönetimi
google_firebase_project
— mevcut bir Google Cloud projesinde Firebase hizmetlerini etkinleştiringoogle_firebase_project_location
— projenin varsayılan Google Cloud kaynaklarının konumunu ayarlarFirebase Uygulamaları
-
google_firebase_apple_app
— Firebase Apple platformları Uygulaması oluşturun veya yönetin -
google_firebase_android_app
— Firebase Android Uygulaması oluşturun veya yönetin -
google_firebase_web_app
— Firebase Web Uygulaması oluşturun veya yönetin
-
Firebase Kimlik Doğrulaması
google_identity_platform_config
— Google Cloud Identity Platform'u (GCIP) (Firebase Kimlik Doğrulaması'nın arka ucudur) etkinleştirin ve proje düzeyinde kimlik doğrulama ayarları sağlayınFirebase Kimlik Doğrulamasını Terraform aracılığıyla yapılandırmak için GCIP'nin etkinleştirilmesi gerekir. Firebase Authentication'ın nasıl kurulacağını öğrenmek için örnek
.tf
dosyasını incelediğinizden emin olun.Terraform'un GCIP ve/veya Firebase Authentication'ı 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ğındakibilling_account
özelliğini ayarlayarak programlı 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 etki alanları gibi daha fazla yapılandırmaya da olanak tanır.
google_identity_platform_default_supported_idp_config
— Google, Facebook veya Apple gibi ortak birleşik Kimlik Sağlayıcıları yapılandırınidentity_platform_oauth_idp_config
— isteğe bağlı OAuth Kimlik Sağlayıcı (IdP) kaynaklarını yapılandırıngoogle_identity_platform_inbound_saml_config
— SAML entegrasyonlarını yapılandırın
Henüz desteklenmiyor:
- Terraform aracılığıyla çok faktörlü kimlik doğrulamayı (MFA) yapılandırma
Firebase Gerçek Zamanlı Veritabanı
-
google_firebase_database_instance
— Gerçek Zamanlı Veritabanı örneği oluşturur
Henüz desteklenmiyor:
- Firebase Gerçek Zamanlı Veritabanı Güvenliği Kurallarını Terraform aracılığıyla dağıtma (programatik seçenekler de dahil olmak üzere diğer araçları kullanarak bu Kuralları nasıl dağıtacağınızı öğrenin)
Bulut Firestore
google_firestore_database
— Cloud Firestore örneği oluşturungoogle_firestore_index
— Cloud Firestore için verimli sorguları etkinleştiringoogle_firestore_document
- bir koleksiyondaki belirli bir belgeyle Cloud Firestore örneğini tohumlayınÖnemli: Bu başlangıç belgesinde gerçek son kullanıcı veya üretim verilerini kullanmayın.
Firebase için Bulut Depolama
google_firebase_storage_bucket
— mevcut bir Cloud Storage paketini Firebase SDK'ları, kimlik doğrulama ve Firebase Güvenlik Kuralları için erişilebilir hale getirin- Bir Firebase projesi için varsayılan bir Cloud Storage paketi oluşturmak için öncelikle
google_app_engine_application
temel hazırlığının yapılması gerekir. Cloud Storage paketlerinin nasıl hazırlanacağı konusunda örnek.tf
dosyasını incelediğinizden emin olun.
- Bir Firebase projesi için varsayılan bir Cloud Storage paketi oluşturmak için öncelikle
google_storage_bucket_object
— Cloud Storage paketine bir nesne ekleyinÖnemli: Bu dosyada gerçek son kullanıcı veya üretim verilerini kullanmayın.
Firebase Güvenlik Kuralları (Cloud Firestore ve Cloud Storage için)
Firebase Gerçek Zamanlı Veritabanının, Firebase Güvenlik Kuralları için farklı bir temel hazırlık sistemi kullandığını unutmayın.
google_firebaserules_ruleset
— Cloud Firestore örneği veya Cloud Storage grubu için geçerli olan Firebase Güvenlik Kurallarını tanımlayıngoogle_firebaserules_release
— Cloud Firestore örneğine veya bir Cloud Storage paketine belirli kural kümelerini dağıtın
Firebase Uygulama Kontrolü
-
google_firebase_app_check_service_config
— bir hizmet için Uygulama Kontrolü uygulamasını etkinleştirin -
google_firebase_app_check_app_attest_config
— App Attest sağlayıcısına bir Apple platformu uygulamasını kaydedin -
google_firebase_app_check_device_check_config
— DeviceCheck sağlayıcısına bir Apple platformu uygulamasını kaydedin -
google_firebase_app_check_play_integrity_config
— bir Android uygulamasını Play Integrity sağlayıcısına kaydedin -
google_firebase_app_check_recaptcha_enterprise_config
— reCAPTCHA Enterprise sağlayıcısına bir web uygulaması kaydedin -
google_firebase_app_check_recaptcha_v3_config
— reCAPTCHA v3 sağlayıcısına bir web uygulaması kaydedin -
google_firebase_app_check_debug_token
— test için hata ayıklama belirteçlerini kullanın
Firebase Uzantıları
-
google_firebase_extensions_instance
— Firebase Uzantısının bir örneğini yükleyin veya güncelleyin
Yaygın kullanım durumları için örnek Terraform yapılandırma dosyaları
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, projeyi bir Cloud Faturalandırma hesabıyla ilişkilendirir (GCIP ile Firebase Kimlik Doğrulaması için Blaze fiyatlandırma planı gereklidir), proje için Firebase hizmetlerini etkinleştirir, GCIP ile Firebase Kimlik Doğrulaması'nı ayarlar ve üç farklı uygulamayı kaydeder proje ile türler.
Firebase Kimlik Doğrulamasını Terraform aracılığıyla ayarlamak için GCIP'yi etkinleştirmenin gerekli olduğunu unutmayın.
# Creates a new Google Cloud project. resource "google_project" "auth" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for Firebase Authentication with GCIP). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "auth" { provider = google-beta.no_user_project_override project = google_project.auth.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "identitytoolkit.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "auth" { provider = google-beta project = google_project.auth.project_id depends_on = [ google_project_service.auth, ] } # Creates an Identity Platform config. # Also enables Firebase Authentication with Identity Platform in the project if not. resource "google_identity_platform_config" "auth" { provider = google-beta project = google_project.auth.project_id # Auto-deletes anonymous users autodelete_anonymous_users = true # Configures local sign-in methods, like anonymous, email/password, and phone authentication. sign_in { allow_duplicate_emails = true anonymous { enabled = true } email { enabled = true password_required = false } phone_number { enabled = true test_phone_numbers = { "+11231231234" = "000000" } } } # Sets an SMS region policy. sms_region_config { allowlist_only { allowed_regions = [ "US", "CA", ] } } # Configures blocking functions. blocking_functions { triggers { event_type = "beforeSignIn" function_uri = "https://us-east1-${google_project.auth.project_id}.cloudfunctions.net/before-sign-in" } forward_inbound_credentials { refresh_token = true access_token = true id_token = true } } # Configures a temporary quota for new signups for anonymous, email/password, and phone number. quota { sign_up_quota_config { quota = 1000 start_time = "" quota_duration = "7200s" } } # Configures authorized domains. authorized_domains = [ "localhost", "${google_project.auth.project_id}.firebaseapp.com", "${google_project.auth.project_id}.web.app", ] # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication. depends_on = [ google_project_service.auth, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "auth" { provider = google-beta project = google_project.auth.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.auth, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "auth" { provider = google-beta project = google_project.auth.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.auth, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "auth" { provider = google-beta project = google_project.auth.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.auth, ] }
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, proje için Firebase hizmetlerini etkinleştirir, projenin varsayılan Gerçek Zamanlı Veritabanı örneğini hazırlar ve projeye üç farklı uygulama türünü kaydeder.
# Creates a new Google Cloud project. resource "google_project" "rtdb" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "rtdb" { provider = google-beta.no_user_project_override project = google_project.rtdb.project_id for_each = toset([ "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebasedatabase.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "rtdb" { provider = google-beta project = google_project.rtdb.project_id } # Provisions the default Realtime Database default instance. resource "google_firebase_database_instance" "database" { provider = google-beta project = google_project.rtdb.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations region = "name-of-region" # This value will become the first segment of the database's URL. instance_id = "${google_project.rtdb.project_id}-default-rtdb" type = "DEFAULT_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database. depends_on = [ google_firebase_project.rtdb, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "rtdb" { provider = google-beta project = google_project.rtdb.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "rtdb" { provider = google-beta project = google_project.rtdb.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "rtdb" { provider = google-beta project = google_project.rtdb.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb, ] }
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, projeyi bir Cloud Faturalandırma hesabıyla ilişkilendirir (birden fazla Gerçek Zamanlı Veritabanı örneği için Blaze fiyatlandırma planı gereklidir), proje için Firebase hizmetlerini etkinleştirir, birden fazla Gerçek Zamanlı Veritabanı örneğinin tedarikini yapar (projenin varsayılan Gerçek Zamanlı Veritabanı dahil) örneği) ve projeye üç farklı uygulama türünü kaydeder.
# Creates a new Google Cloud project. resource "google_project" "rtdb-multi" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for multiple Realtime Database instances). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "rtdb-multi" { provider = google-beta.no_user_project_override project = google_project.rtdb-multi.project_id for_each = toset([ "cloudbilling.googleapis.com", "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebasedatabase.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id } # Provisions the default Realtime Database default instance. resource "google_firebase_database_instance" "database-default" { provider = google-beta project = google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations region = "name-of-region" # This value will become the first segment of the database's URL. instance_id = "${google_project.rtdb-multi.project_id}-default-rtdb" type = "DEFAULT_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database. depends_on = [ google_firebase_project.rtdb-multi, ] } # Provisions an additional Realtime Database instance. resource "google_firebase_database_instance" "database-additional" { provider = google-beta project = google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations # This location doesn't need to be the same as the default database instance. region = "name-of-region" # This value will become the first segment of the database's URL. instance_id = "name-of-additional-database-instance" type = "USER_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database. depends_on = [ google_firebase_project.rtdb-multi, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb-multi, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb-multi, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb-multi, ] }
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, proje için Firebase hizmetlerini etkinleştirir, projenin Cloud Firestore örneğinin temel hazırlığını yapar ve projeye üç farklı uygulama türünü kaydeder.
Ayrıca Cloud Firestore örneği için Firebase Güvenlik Kurallarını sağlar, bir Cloud Firestore dizini oluşturur ve çekirdek verileri içeren bir Cloud Firestore belgesi ekler.
# Creates a new Google Cloud project. resource "google_project" "firestore" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "firestore" { provider = google-beta.no_user_project_override project = google_project.firestore.project_id for_each = toset([ "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "firestore.googleapis.com", "firebaserules.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "firestore" { provider = google-beta project = google_project.firestore.project_id } # Provisions the Firestore database instance. resource "google_firestore_database" "firestore" { provider = google-beta project = google_project.firestore.project_id name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_id = "name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore. depends_on = [ google_firebase_project.firestore, ] } # Creates a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore" { provider = google-beta project = google_project.firestore.project_id source { files { name = "firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started content = file("firestore.rules") } } # Wait for Firestore to be provisioned before creating this ruleset. depends_on = [ google_firestore_database.firestore, ] } # Releases the ruleset for the Firestore instance. resource "google_firebaserules_release" "firestore" { provider = google-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore.name project = google_project.firestore.project_id # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.firestore, ] } # Adds a new Firestore index. resource "google_firestore_index" "indexes" { provider = google-beta project = google_project.firestore.project_id collection = "quiz" query_scope = "COLLECTION" fields { field_path = "question" order = "ASCENDING" } fields { field_path = "answer" order = "ASCENDING" } # Wait for Firestore to be provisioned before adding this index. depends_on = [ google_firestore_database.firestore, ] } # Adds a new Firestore document with seed data. # Don't use real end-user or production data in this seed document. resource "google_firestore_document" "doc" { provider = google-beta project = google_project.firestore.project_id collection = "quiz" document_id = "question-1" fields = "{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}" # Wait for Firestore to be provisioned before adding this document. depends_on = [ google_firestore_database.firestore, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "firestore" { provider = google-beta project = google_project.firestore.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.firestore, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "firestore" { provider = google-beta project = google_project.firestore.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.firestore, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "firestore" { provider = google-beta project = google_project.firestore.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.firestore, ] }
Bu, firestore.rules
adlı yerel bir dosyada olması gereken Cloud Firestore Güvenlik Kurallarının kural kümesidir.
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { allow read: if request.auth != null; allow create: if request.auth != null; allow update: if request.auth != null; } }
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, proje için Firebase hizmetlerini etkinleştirir, projenin varsayılan Cloud Storage paketini hazırlar ve projeye üç farklı uygulama türünü kaydeder.
Ayrıca Cloud Storage paketi için Firebase Güvenlik Kurallarını hazırlar ve pakete bir dosya yükler.
# Creates a new Google Cloud project. resource "google_project" "storage" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "storage" { provider = google-beta.no_user_project_override project = google_project.storage.project_id for_each = toset([ "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebaserules.googleapis.com", "firebasestorage.googleapis.com", "storage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "storage" { provider = google-beta project = google_project.storage.project_id } # Provisions the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default" { provider = google-beta project = google_project.storage.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App. location_id = "name-of-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ] } # Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket" { provider = google-beta project = google_project.storage.project_id bucket_id = google_app_engine_application.default.default_bucket } # Creates a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "storage" { provider = google-beta project = google_project.storage.project_id source { files { # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "storage.rules" content = file("storage.rules") } } # Wait for the default Storage bucket to be provisioned before creating this ruleset. depends_on = [ google_firebase_project.storage, ] } # Releases the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default.default_bucket}" ruleset_name = "projects/${google_project.storage.project_id}/rulesets/${google_firebaserules_ruleset.storage.name}" project = google_project.storage.project_id } # Uploads a new file to the default Storage bucket. # Don't use real end-user or production data in this file. resource "google_storage_bucket_object" "cat-picture" { provider = google-beta name = "cat.png" source = "path/to/cat.png" bucket = google_app_engine_application.default.default_bucket } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "storage" { provider = google-beta project = google_project.storage.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "storage" { provider = google-beta project = google_project.storage.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "storage" { provider = google-beta project = google_project.storage.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage, ] }
Bu, storage.rules
adlı yerel bir dosyada olması gereken Bulut Depolama Güvenlik Kurallarının kural kümesidir.
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, projeyi bir Cloud Faturalandırma hesabıyla ilişkilendirir (birden fazla grup için Blaze fiyatlandırma planı gereklidir), proje için Firebase hizmetlerini etkinleştirir, birden fazla Cloud Storage paketinin temel hazırlığını yapar (projenin varsayılan Cloud Storage grubu dahil) ve projeye üç farklı uygulama türünü kaydeder.
Ayrıca Cloud Storage paketleri için Firebase Güvenlik Kurallarını hazırlar ve varsayılan Cloud Storage paketine bir dosya yükler.
# Creates a new Google Cloud project. resource "google_project" "storage-multi" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for multiple Cloud Storage buckets). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "storage-multi" { provider = google-beta.no_user_project_override project = google_project.storage-multi.project_id for_each = toset([ "cloudbilling.googleapis.com", "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebaserules.googleapis.com", "firebasestorage.googleapis.com", "storage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id } # Provisions the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default-multi" { provider = google-beta project = google_project.storage-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App. location_id = "name-of-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ] } # Provisions an additional Cloud Storage bucket. # Additional Cloud Storage buckets are not provisioned via App Engine. resource "google_storage_bucket" "bucket-multi" { provider = google-beta project = google_project.storage-multi.project_id name = "name-of-additional-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locations # This location does not need to be the same as the default Storage bucket. location = "name-of-region-for-additional-bucket" } # Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket-multi" { provider = google-beta project = google_project.storage-multi.project_id bucket_id = google_app_engine_application.default-multi.default_bucket } # Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "bucket-multi" { provider = google-beta project = google_project.storage-multi.project_id bucket_id = google_storage_bucket.bucket-multi.name } # Creates a ruleset of Firebase Security Rules from a local file. resource "google_firebaserules_ruleset" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id source { files { # Write security rules in a local file named "storage.rules" # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "storage.rules" content = file("storage.rules") } } # Wait for the Storage buckets to be provisioned before creating this ruleset. depends_on = [ google_firebase_project.storage-multi, ] } # Releases the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket-multi" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default-multi.default_bucket}" ruleset_name = "projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}" project = google_project.storage-multi.project_id } # Releases the ruleset to the additional Storage bucket. resource "google_firebaserules_release" "bucket-multi" { provider = google-beta name = "firebase.storage/${google_storage_bucket.bucket-multi.name}" ruleset_name = "projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}" project = google_project.storage-multi.project_id } # Uploads a new file to the default Storage bucket. # Do not use real end-user or production data in this file. resource "google_storage_bucket_object" "cat-picture-multi" { provider = google-beta name = "cat.png" source = "path/to/cat.png" bucket = google_app_engine_application.default-multi.default_bucket } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage-multi, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage-multi, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage-multi, ] }
Bu, storage.rules
adlı yerel bir dosyada olması gereken Bulut Depolama Güvenlik Kurallarının kural kümesidir.
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, proje için Firebase hizmetlerini etkinleştirir, Cloud Firestore örneğinin temel hazırlığını yapar ve ardından varsayılan Cloud Storage paketinin temel hazırlığını yapar.
Ayrıca Cloud Firestore örneği ve varsayılan Cloud Storage grubu için Firebase Güvenlik Kurallarını da sağlar.
# Creates a new Google Cloud project. resource "google_project" "fs" { # fs = Firestore + Storage provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "fs" { provider = google-beta.no_user_project_override project = google_project.fs.project_id for_each = toset([ "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebaserules.googleapis.com", "firebasestorage.googleapis.com", "storage.googleapis.com", "firestore.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "fs" { provider = google-beta project = google_project.fs.project_id } #### Set up Firestore before default Cloud Storage bucket #### # Provisions the Firestore database instance. resource "google_firestore_database" "firestore-fs" { provider = google-beta project = google_project.fs.project_id name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_id = "name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore. depends_on = [ google_firebase_project.fs, ] } # Creates a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore-fs" { provider = google-beta project = google_project.fs.project_id source { files { # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started name = "firestore.rules" content = file("firestore.rules") } } # Wait for Firestore to be provisioned before creating this ruleset. depends_on = [ google_firestore_database.firestore-fs ] } # Releases the ruleset for the Firestore instance. resource "google_firebaserules_release" "firestore-fs" { provider = google-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore-fs.name project = google_project.fs.project_id # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.firestore-fs, ] } #### Set up default Cloud Storage default bucket after Firestore #### # Provisions the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default-bucket-fs" { provider = google-beta project = google_project.fs.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App. location_id = "name-of-region" # Must be in the same location as Firestore (above) # Wait for Firestore to be provisioned first. # Otherwise, the Firestore instance will be provisioned in Datastore mode (unusable by Firebase). depends_on = [ google_firestore_database.firestore-fs, ] } # Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket-fs" { provider = google-beta project = google_project.fs.project_id bucket_id = google_app_engine_application.default-bucket-fs.default_bucket } # Creates a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "default-bucket-fs" { provider = google-beta project = google_project.fs.project_id source { files { # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "storage.rules" content = file("storage.rules") } } # Wait for the Cloud Storage bucket to be provisioned before creating this ruleset. depends_on = [ google_firebase_project.fs, ] } # Releases the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket-fs" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default-bucket-fs.default_bucket}" ruleset_name = "projects/${google_project.fs.project_id}/rulesets/${google_firebaserules_ruleset.default-bucket-fs.name}" project = google_project.fs.project_id }
Bu, firestore.rules
adlı yerel bir dosyada olması gereken Cloud Firestore Güvenlik Kurallarının kural kümesidir.
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { allow read: if request.auth != null; allow create: if request.auth != null; allow update: if request.auth != null; } }
Bu, storage.rules
adlı yerel bir dosyada olması gereken Bulut Depolama Güvenlik Kurallarının kural kümesidir.
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
Bu yapılandırma, yeni bir Google Cloud projesi oluşturur, proje için Firebase hizmetlerini etkinleştirir ve Firebase App Check for Cloud Firestore'u yalnızca Android uygulamanızdan erişilebilecek şekilde ayarlayıp uygulanmasını sağlar.
# Creates a new Google Cloud project. resource "google_project" "appcheck" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "services" { provider = google-beta.no_user_project_override project = google_project.appcheck.project_id for_each = toset([ "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", "firebaseappcheck.googleapis.com", "firestore.googleapis.com", "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created earlier. resource "google_firebase_project" "appcheck" { provider = google-beta project = google_project.appcheck.project_id depends_on = [google_project_service.services] } # Provisions the Firestore database instance. resource "google_firestore_database" "database" { provider = google-beta project = google_firebase_project.appcheck.project name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_id = "name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore. depends_on = [ google_firebase_project.appcheck, ] } # Creates a Firebase Android App in the new project created earlier. resource "google_firebase_android_app" "appcheck" { provider = google-beta project = google_firebase_project.appcheck.project display_name = "Play Integrity app" package_name = "package.name.playintegrity" sha256_hashes = [ # TODO: insert your Android app's SHA256 certificate ] } # It takes a while for App Check to recognize the new app # If your app already exists, you don't have to wait 30 seconds. resource "time_sleep" "wait_30s" { depends_on = [google_firebase_android_app.appcheck] create_duration = "30s" } # Register the Android app with the Play Integrity provider resource "google_firebase_app_check_play_integrity_config" "appcheck" { provider = google-beta project = google_firebase_project.appcheck.project app_id = google_firebase_android_app.appcheck.app_id depends_on = [time_sleep.wait_30s, google_firestore_database.database] lifecycle { precondition { condition = length(google_firebase_android_app.appcheck.sha256_hashes) > 0 error_message = "Provide a SHA-256 certificate on the Android App to use App Check" } } } # Enable enforcement of App Check for Firestore resource "google_firebase_app_check_service_config" "firestore" { provider = google-beta project = google_firebase_project.appcheck.project service_id = "firestore.googleapis.com" depends_on = [google_project_service.services] }
Bu yapılandırma yeni bir Google Cloud projesi oluşturur, proje için Firebase hizmetlerini etkinleştirir ve projeye Firebase Uzantısının yeni bir örneğini 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_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Extensions). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "extensions" { provider = google-beta.no_user_project_override project = google_project.extensions.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "firebase.googleapis.com", "firebaseextensions.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "extensions" { provider = google-beta project = google_project.extensions.project_id depends_on = [ google_project_service.extensions, ] } # Installs an instance of the "Translate Text in Firestore" extension. # Or updates the extension if the specified instance already exists. resource "google_firebase_extensions_instance" "translation" { provider = google-beta project = google_project.extensions.project_id instance_id = "translate-text-in-firestore" config { extension_ref = "firebase/firestore-translate-text" params = { COLLECTION_PATH = "posts/comments/translations" DO_BACKFILL = true LANGUAGES = "ar,en,es,de,fr" INPUT_FIELD_NAME = "input" LANGUAGES_FIELD_NAME = "languages" OUTPUT_FIELD_NAME = "translated" } system_params = { "firebaseextensions.v1beta.function/location" = "us-central1" "firebaseextensions.v1beta.function/memory" = "256" "firebaseextensions.v1beta.function/minInstances" = "0" "firebaseextensions.v1beta.function/vpcConnectorEgressSettings" = "VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED" } } }
Sorun Giderme ve SSS
Bu kılavuz "projeler" ile çalışırken aşağıdaki Terraform özelliklerini kullanır.
- bir
resource
bloğu içindekiproject
Önerilen: Mümkün olduğunda her
resource
bloğunaproject
niteliğini ekleyinTerraform, bir proje niteliğini dahil ederek, belirtilen proje içerisinde kaynak bloğunda belirtilen altyapıyı oluşturacaktır. Bu kılavuz ve örnek yapılandırma dosyalarımızın tümü bu uygulamayı kullanır.
project
ilgili resmi Terraform belgelerine bakın.-
provider
bloğu içindekiuser_project_override
Kaynakların çoğunu sağlamak için
user_project_override = true
kullanmalısınız; bu, kotayı kendi Firebase projenize göre kontrol etmek anlamına gelir. Ancak yeni projenizi kota kontrollerini kabul edebilecek şekilde ayarlamak için öncelikleuser_project_override = false
kullanmanız gerekir.user_project_override
hakkındaki resmi Terraform belgelerine bakın.
gCloud CLI komutlarını çalıştırmak için kullandığınız kullanıcı hesabının Firebase Hizmet Şartları'nı (Firebase Hizmet Şartları) kabul ettiğinden emin olun.
Bu kontrolü, kullanıcı hesabında oturum açan 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 projelerinden herhangi birini görüntüleyemiyorsanız kullanıcı hesabı muhtemelen Firebase Hizmet Şartlarını kabul etmemiştir. Bunu düzeltmek için Firebase konsolu aracılığıyla yeni bir Firebase projesi oluşturun ve proje oluşturma işleminin bir parçası olarak Firebase Hizmet Şartları'nı kabul edin. Bu projeyi konsoldaki Proje Ayarları aracılığıyla hemen silebilirsiniz.
Birkaç dakika bekleyin ve ardından terraform apply
tekrar çalıştırmayı deneyin.
Bunun nedeni çeşitli sistemlerdeki yayılma gecikmesi olabilir. terraform import
komutunu çalıştırarak kaynağı Terraform durumuna aktararak bu sorunu çözmeye çalışın. Daha sonra terraform apply
tekrar çalıştırmayı deneyin.
Her bir kaynağın nasıl içe aktarılacağını Terraform belgelerinin "İçe Aktarma" bölümünde öğrenebilirsiniz (örneğin, Cloud Firestore için "İçe Aktarma" belgeleri ).
Hatanın da gösterdiği gibi, Terraform birden fazla dizini sağlamaya ve/veya aynı anda bir belge oluşturmaya çalışıyor olabilir ve bir eşzamanlılık hatasıyla karşılaşmış olabilir. terraform apply
tekrar çalıştırmayı deneyin.
Bu hata, Terraform'un kotayı hangi projeye göre kontrol edeceğini bilmediği anlamına gelir. Sorunu 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ı, Firebase örneklerinde
google-beta
olanuser_project_override = true
(takma ad yok) ile kullandığınızdan emin olun.
Proje kimliğinin zaten mevcut olmasının olası nedenleri şunlardır:
Bu kimlikle ilişkilendirilen proje başka birine ait.
- Çözümlemek için: Başka bir proje kimliği seçin.
Bu kimlikle ilişkili proje yakın zamanda silindi (geçici silme durumunda).
- Çözümlemek için: Kimlikle ilişkilendirilen projenin size ait olduğunu düşünüyorsanız,
projects.get
REST API'yi kullanarak projenin durumunu kontrol edin.
- Çözümlemek için: Kimlikle ilişkilendirilen projenin size ait olduğunu düşünüyorsanız,
Bu kimlikle ilişkili proje, geçerli kullanıcı altında doğru bir şekilde mevcut. Hatanın olası nedeni, önceki bir
terraform apply
kesintiye uğraması olabilir.- Çözümlemek için: Aşağıdaki komutları çalıştırın:
terraform import google_project.default PROJECT_ID
ve daha sonra
terraform import google_firebase_project.default PROJECT_ID
- Çözümlemek için: Aşağıdaki komutları çalıştırın:
App Engine uygulaması bir Cloud Firestore örneği gerektirir ancak proje başına yalnızca bir Cloud Firestore örneğine sahip olabilirsiniz. Dolayısıyla, hata mesajından da anlaşılacağı gibi, projenin Cloud Firestore örneğini zaten bir konumda sağladıysanız, farklı bir konumda bir Cloud Firestore örneğini sağlamaya çalıştığınızda App Engine hata verecektir. App Engine, halihazırda mevcut Cloud Firestore örneğini "yeniden sağlamaya" çalıştığınızı düşünüyor.
Bu hatayı çözmek için hem Cloud Firestore hem de App Engine uygulaması için aynı konumu kullanın. Cloud Firestore'dan farklı bir konumda bir Cloud Storage paketine ihtiyacınız varsa ek paketler sağlayabilirsiniz ( birden fazla Cloud Storage paketi oluşturmaya yönelik örnek yapılandırmaya bakın).
Bir projenin varsayılan Cloud Storage paketinin temel hazırlığını yaptığınızda ( google_app_engine_application
aracılığıyla) ve projede henüz bir Cloud Firestore örneği yoksa, google_app_engine_application
projenin Cloud Firestore örneğinin temel hazırlığını otomatik olarak yapar.
Dolayısıyla, projenizin Cloud Firestore örneğinin temel hazırlığı zaten yapılmışsa, bir Cloud Firestore örneğinin temel hazırlığını açıkça yapmaya çalışırsanız google_firestore_database
hata verecektir.
Projenin Cloud Firestore örneği sağlandıktan sonra onu "yeniden sağlayamazsınız" veya konumunu değiştiremezsiniz. Hatanın oluşmasını durdurmak için google_firestore_database
kaynak bloğunu yapılandırma dosyanızdan kaldırın. Ancak Cloud Firestore'un temel hazırlığının projenin varsayılan Cloud Storage paketinden önce yapılmasını önerdiğimizi unutmayın (nedenini öğrenmek için aşağıdaki kısma bakın).