1. Giriş
Gol sayısı
Altyapı ve Firebase ürünlerinin programatik yapılandırması da dahil olmak üzere bir Firebase projesini ayarlamak ve yönetmek için Terraform'u kullanabilirsiniz.
Bu codelab'de önce yeni bir Firebase projesi oluşturmak için Terraform yapılandırma dosyasının nasıl oluşturulacağı, ardından da bu projede kullanmak istediğiniz uygulamaların ve Firebase ürünlerinin nasıl yapılandırılacağı açıklanmaktadır. Ayrıca, yapılacak değişiklikleri önizleme ve ardından uygulama gibi Terraform komut satırının temel özelliklerini de ele alıyoruz.
Firebase projelerini ve ürünlerini Terraform ile nasıl ayarlayıp yöneteceğinizi öğrenmek istiyorsanız bu codelab tam size göre!
Neler öğreneceksiniz?
- Terraform yapılandırma dosyası oluşturma (
*.tf
) - Altyapınızı yönetmek için Terraform CLI komutlarını kullanma
- Kaynaklarınızı ve hizmetlerinizi güncellemek için yapılandırmanızı değiştirme
- Yapılandırmanızı gerçek bir web uygulamasına (Friendly Chat olarak adlandırılır) uygulama
- Farklı ortamlarda (üretim, hazırlık vb.) paralel (ve senkronize) yapılandırmalar nasıl tanımlanır?
Gerekenler
- Terminal/konsol
- Seçtiğiniz IDE/metin düzenleyici (ör. WebStorm, Atom, Sublime veya VS Code)
- Chrome gibi tercih ettiğiniz tarayıcı
- Google Cloud CLI (gcloud CLI): Bu CLI'yı yükleyin ve kullanıcı hesabı veya hizmet hesabı kullanarak giriş yapın.
Bu codelab'i başarıyla tamamlamak için Terraform ve terminolojisi hakkında temel düzeyde bilgi sahibi olmanız gerekir. Aşağıdaki ön koşullar da bu kapsamdadır:
- Terraform'u yükleyin ve resmi eğitimlerini kullanarak Terraform'a aşina olun.
Bu codelab, Terraform aracılığıyla sağladığınız kaynakları test edip bunlarla etkileşim kurabilmeniz için gerçek bir örnek uygulama sunar. Bunun için aşağıdakilere ihtiyacınız vardır:
- Bir web uygulaması için örnek kod. Bu kodu codelab'in bir sonraki adımında indirebilirsiniz.
- Paket yöneticisi npm (genellikle Node.js ile birlikte gelir) - Bu araçları yükleyin.
- Firebase CLI: Bu CLI'yı yükleyin ve oturum açın.
2. Başlangıç kodunu alma
Bu codelab'de, Terraform aracılığıyla sağladığınız kaynakları gerçek bir web uygulamasıyla test edebilirsiniz. Terraform ile sağlanan kaynakları kullanmak için gereken tüm adımları anlamak amacıyla bu testi yapmanızı öneririz.
Codelab'in GitHub deposunu komut satırından kopyalayın:
git clone https://github.com/firebase/codelab-friendlychat-web
Alternatif olarak, git yüklü değilse depoyu ZIP dosyası olarak indirebilirsiniz.
3. Terraform yapılandırması oluşturma
Terraform kurulumu
- İndirilen örnek uygulamanın kod tabanında
web
dizininin kök bölümüne gidin. - Bu dizinin kök dizininde, aşağıdaki ilk kurulumla
main.tf
adlı bir Terraform yapılandırma dosyası oluşturun:
main.tf# Terraform configuration to set up providers by version. terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "~> 4.0" } } } # Configure the provider not to use the specified project for quota check. # This provider should only be used during project creation and initializing services. provider "google-beta" { alias = "no_user_project_override" user_project_override = false } # Configure the provider that uses the new project's quota. provider "google-beta" { user_project_override = true }
google-beta
sağlayıcıların her birinde, Terraform'daki işlemlerin kota kontrolünün nasıl yapılacağını belirleyen user_project_override
adlı bir özellik bulunur. Çoğu kaynağı sağlarken user_project_override = true
kullanmanız gerekir. Bu, kotayı kendi Firebase projenize göre kontrol etmeniz gerektiği anlamına gelir. Ancak yeni projenizi kota kontrollerini kabul edecek şekilde ayarlamak için önce user_project_override=false
kullanmanız gerekir. Terraform alias
söz dizimi, bu codelab'in sonraki adımlarında iki sağlayıcı kurulumu arasında ayrım yapmanıza olanak tanır.
Dizinde Terraform'u başlatın
İlk kez yeni bir yapılandırma oluşturmak için yapılandırmada belirtilen sağlayıcının indirilmesi gerekir.
Bu başlatma işlemini yapmak için main.tf
yapılandırma dosyanızla aynı dizinin kökünden aşağıdaki komutu çalıştırın:
terraform init
4. Terraform aracılığıyla Firebase projesi oluşturma
"Firebase projesi oluşturma" işlemiyle ilgili olarak, her Firebase projesinin aslında Firebase hizmetlerinin etkinleştirildiği bir Google Cloud projesi olduğunu unutmamak önemlidir.
Temel alınan Google Cloud projesi ve API'ler için blok ekleme
- Öncelikle temel Google Cloud projesini sağlayın.
main.tf
yapılandırma dosyanıza aşağıdaki kaynak bloğunu ekleyin.
Kendi proje adınızı (ör."Terraform FriendlyChat Codelab"
) ve proje kimliğinizi (ör."terraform-codelab-your-initials"
) belirtmeniz gerekir.name
değerinin yalnızca Firebase arayüzlerinde kullanıldığını ve son kullanıcılara görünmediğini unutmayın. Ancakproject_id
değeri, projenizi Google'da benzersiz şekilde tanımlar. Bu nedenle, benzersiz bir değer belirttiğinizden emin olun. main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } }
- Ardından, gerekli temel API'leri (Service Usage API ve Firebase Management API) etkinleştirmeniz gerekir.
Bu API etkinleştirme işlemi, Firebase projesi oluşturmak için Firebase konsolunu kullandığınızda genellikle arka planda gerçekleştirilir ancak Terraform'a bu etkinleştirme işlemini yapması için açıkça talimat verilmesi gerekir.main.tf
yapılandırma dosyanıza (yeni Cloud projesini oluşturan bloğun hemen altına) aşağıdaki kaynak bloğunu ekleyin:
main.tf Service Usage API'yi etkinleştirerek yeni projenizin kota kontrollerini kabul etmesini sağlayabilirsiniz. Bu nedenle, sonraki tüm kaynak sağlama ve hizmet etkinleştirme işlemleri için... # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false }
user_project_override
sağlayıcısını kullanmanız gerekir (takma ad gerekmez).
Firebase hizmetlerini etkinleştirmek için blok ekleme
"Firebase projesi oluşturmak" için yapılması gereken son şey, projede Firebase hizmetlerini etkinleştirmektir.
main.tf
yapılandırma dosyanızda aşağıdaki kaynak bloğunu ekleyin.
Hemen yukarıda belirtildiği gibi, bu kaynak bloğunun with user_project_override
sağlayıcısını kullandığını unutmayın (takma ad gerekmez).
main.tf
...
# Enable Firebase services for the new project created above.
resource "google_firebase_project" "default" {
provider = google-beta
project = google_project.default.project_id
# Wait until the required APIs are enabled.
depends_on = [
google_project_service.firebase,
google_project_service.serviceusage,
]
}
Yukarıdaki kaynak bloğunda, Terraform'a temel API'lerin etkinleştirilmesini beklemesini söyleyen depends_on
ifadesini görebilirsiniz. Bu ifade olmadan Terraform, bağımlılık hakkında bilgi sahibi olmaz ve kaynakları paralel olarak sağlarken hatalarla karşılaşabilir.
Yapılandırmayı uygulama
- Yeni kaynakları sağlama ve yapılandırma dosyanızda belirtilen API'leri etkinleştirme için
main.tf
dosyanızla (web
olmalıdır) aynı dizinin kökünden aşağıdaki komutu çalıştırın:terraform apply
- Terminalde Terraform, gerçekleştireceği işlemlerin planını yazdırır.
Her şey beklendiği gibi görünüyorsayes
girerek işlemleri onaylayın.
main.tfTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_firebase_project.default will be created + resource "google_firebase_project" "default" { + display_name = (known after apply) + id = (known after apply) + project = "terraform-friendlychat-codelab" + project_number = (known after apply) } # google_project.default will be created + resource "google_project" "default" { + auto_create_network = true + id = (known after apply) + labels = { + "firebase" = "enabled" } + name = "Terraform FriendlyChat Codelab" + number = (known after apply) + project_id = "terraform-friendlychat-codelab" + skip_delete = (known after apply) } # google_project_service.firebase will be created + resource "google_project_service" "firebase" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "firebase.googleapis.com" } # google_project_service.serviceusage will be created + resource "google_project_service" "serviceusage" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "serviceusage.googleapis.com" } Plan: 4 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes # <----
Değişiklikleri uygulamadan yalnızca önizlemek istiyorsanız bunun yerine terraform plan
komutunu kullanabilirsiniz.
Değişiklikleri doğrulama
Terraform çalışmayı tamamladıktan sonra aşağıdaki komutu çalıştırarak Terraform tarafından sağlanan tüm kaynakların ve etkinleştirilen hizmetlerin durumunu inceleyebilirsiniz:
terraform show
Yazdırılan belgenin nasıl görünmesi gerektiğine dair bir örneği aşağıda bulabilirsiniz. Durumunuz, projenize özgü değerler içerir.
# google_firebase_project.default:
resource "google_firebase_project" "default" {
display_name = "Terraform FriendlyChat Codelab"
id = "projects/terraform-friendlychat-codelab"
project = "terraform-friendlychat-codelab"
project_number = "000000000"
}
# google_project.default:
resource "google_project" "default" {
auto_create_network = true
id = "projects/terraform-friendlychat-codelab"
labels = {
"firebase" = "enabled"
}
name = "Terraform FriendlyChat Codelab"
number = "000000000"
project_id = "terraform-friendlychat-codelab"
}
# google_project_service.firebase:
resource "google_project_service" "firebase" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/firebase.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "firebase.googleapis.com"
}
# google_project_service.serviceusage:
resource "google_project_service" "serviceusage" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/serviceusage.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "serviceusage.googleapis.com"
}
Alternatif olarak, projeyi Firebase konsolunda görüntüleyerek oluşturulduğunu doğrulayabilirsiniz.
5. Firebase uygulamanızı Terraform üzerinden kaydetme
Firebase'i kullanmak için uygulamanızın her platform varyantını Firebase projenize kaydetmeniz gerekir. Bu codelab'de, Terraform aracılığıyla sağladığınız kaynakları test etmek ve bunlarla etkileşim kurmak için gerçek bir uygulama kullanacaksınız. Bu uygulama bir web uygulaması olduğundan Terraform'a, yeni oluşturduğunuz Firebase projesine bir Firebase web uygulaması kaydetmesini söylemeniz gerekir.
Web uygulamasını kaydetmek için bir blok ekleyin
Web uygulamanızı Firebase projenize kaydetmek için main.tf
dosyanıza aşağıdaki kaynak bloğunu ekleyin.
Web uygulamanız için kendi display_name
değerinizi belirtmeniz gerekir. Bu adın yalnızca Firebase arayüzlerinde kullanıldığını ve son kullanıcılar tarafından görülemediğini unutmayın.
main.tf
...
# Create a Firebase Web App in the new project created above.
resource "google_firebase_web_app" "default" {
provider = google-beta
project = google_firebase_project.default.project
display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>"
deletion_policy = "DELETE"
}
Yapılandırmayı uygulama
- Yeni kaynağı sağlamak için
main.tf
dosyanızla (web
olmalıdır) aynı dizinin kökünden aşağıdaki komutu çalıştırın. Bu komutun yeni bir Google Cloud projesi oluşturmayacağını unutmayın. Terraform, belirtilen proje kimliğine sahip bir projenin zaten var olduğunu algılar, projenin mevcut durumunuterraform apply
.tf
dosyasındaki durumla karşılaştırır ve bulduğu değişiklikleri yapar. - Yazdırılan işlem planını inceleyin. Her şey beklendiği gibi görünüyorsa
yes
yazıp Enter tuşuna basarak işlemleri onaylayın.
Değişiklikleri doğrulama
Yeni sağlanan kaynağın durumunu incelemek için aşağıdaki komutu çalıştırabilirsiniz:
terraform show
Alternatif olarak, Firebase konsolunda görüntüleyerek uygulamanın projenize başarıyla kaydedildiğini doğrulayabilirsiniz. Proje ayarları'na gidin ve Uygulamalarınız bölümüne ilerleyin.
6. Firebase Authentication'ı ayarlama
Kimlik doğrulama, her uygulamanın önemli bir parçasıdır. Son kullanıcıların web uygulamanızda Google Hesaplarıyla oturum açmasına izin vermek için Firebase Authentication'ı etkinleştirebilir ve Google ile oturum açma yöntemini ayarlayabilirsiniz.
Bu codelab'de Firebase Authentication'ı ayarlamak için iki farklı seçenek sunduğumuzu unutmayın:
- 1. seçenek (önerilir): Konsolda Firebase Authentication'ı ayarlayın. Bu işlem için GCIP gerekmez.
- Bu seçeneği kullandığınızda yeni projenizi bir Cloud Faturalandırma hesabıyla ilişkilendirmeniz gerekmez.
- 2. seçenek: Google Cloud Identity Platform (GCIP) API'lerini kullanarak Terraform üzerinden Firebase Authentication'ı ayarlayın.
- Bu seçeneği kullanmak, yeni projenizi bir Cloud Faturalandırma hesabıyla ilişkilendirmeniz gerektiği anlamına gelir. Bunun nedeni, GCIP'nin projenin Blaze fiyatlandırma planında olmasını gerektirmesidir.
1. seçenek: Firebase konsolunu kullanarak kimlik doğrulamayı ayarlama
Firebase konsolunu kullanarak Firebase Authentication'ı ayarlamak için projenizin Blaze fiyatlandırma planında olması gerekmez.
Firebase Authentication'ı ayarlama ve Google ile oturum açma adımları:
- Firebase konsolunda, sol paneldeki Build (Oluştur) bölümünü bulun.
- Kimlik doğrulama'yı, Başlayın'ı ve ardından Oturum açma yöntemi sekmesini tıklayın (veya doğrudan bu sekmeye gitmek için burayı tıklayın).
- Yeni sağlayıcı ekle'yi tıklayın ve Ek sağlayıcılar bölümünden Google'ı seçin.
- Etkinleştir açma/kapatma düğmesini etkinleştirin.
- Uygulamanızın herkese açık adını
FriendlyChat
gibi bir ad olarak ayarlayın (bu adın genel olarak benzersiz olması gerekmez). - Açılır menüden bir Proje destek e-postası seçin ve Kaydet'i tıklayın.
- Google'ı etkin bir oturum açma sağlayıcısı olarak görmelisiniz.
2. seçenek: Google Cloud Identity Platform (GCIP) API'lerini kullanarak Terraform üzerinden kimlik doğrulamayı ayarlama
Firebase Authentication'ı Terraform üzerinden ayarlamak için GCIP API'lerini kullanmanız gerekir. Bu nedenle, projenin Blaze fiyatlandırma planında olması gerekir. Bir Cloud Faturalandırma Hesabı'nı projeyle ilişkilendirerek Firebase projenizi Blaze planını kullanacak şekilde yükseltirsiniz.
Terraform üzerinden faturalandırmayı etkinleştirme
- Henüz bir Cloud Faturalandırma Hesabınız yoksa ilk adım Google Cloud Console'da yeni bir hesap oluşturmaktır. Bu işlemi yaptığınızda faturalandırma hesabı kimliğini not edin. Faturalandırma hesabı kimliğini, projenizle ilişkili Faturalandırma hesabı kimliği bölümündeki Faturalandırma sayfasında bulabilirsiniz.
- Terraform aracılığıyla projenizde faturalandırmayı etkinleştirmek için
billing_account
özelliğinimain.tf
dosyanızdaki mevcutgoogle_project
kaynağına ekleyin:
main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Add this line with your Cloud Billing account ID # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } ...
Terraform aracılığıyla Firebase Authentication'ı ve Google ile oturum açmayı etkinleştirme
- Firebase Authentication'ı GCIP ile sağlamak için
main.tf
dosyanıza aşağıdaki kaynak bloklarını ekleyin:
main.tf... # Enable the Identity Toolkit API. resource "google_project_service" "auth" { provider = google-beta project = google_firebase_project.default.project service = "identitytoolkit.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Create an Identity Platform config. # Also, enable Firebase Authentication using Identity Platform (if Authentication isn't yet enabled). resource "google_identity_platform_config" "auth" { provider = google-beta project = google_firebase_project.default.project # For example, you can configure to auto-delete anonymous users. autodelete_anonymous_users = true # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication. depends_on = [ google_project_service.auth, ] }
- Google ile oturum açmayı etkinleştirmek için OAuth istemcinizin olması gerekir. Bu kurulumu yapmak için Google Cloud Console'un API'ler ve Hizmetler bölümüne gidin.
- Bu proje için ilk kez istemci kimliği oluşturduğunuzdan OAuth izin ekranınızı yapılandırmanız gerekir.
- OAuth kullanıcı rızası ekranı sayfasını açın ve yeni oluşturduğunuz projeyi seçin.
- Kullanıcı Türü'nü Harici olarak ayarlayın ve Oluştur'u tıklayın.
- Sonraki ekranda aşağıdakileri tamamlayıp Kaydet ve devam et'i tıklayın.
- Uygulamanızın herkese açık Uygulama adını
FriendlyChat
gibi bir adla değiştirin (bu adın genel olarak benzersiz olması gerekmez). - Açılır menüden bir Kullanıcı desteği e-postası seçin.
- Geliştiricinin iletişim bilgileri için bir e-posta adresi girin.
- Uygulamanızın herkese açık Uygulama adını
- Sonraki ekranlarda aşağıdakileri tamamlayın:
- Kapsamlar sayfasında varsayılanları kabul edip Kaydet ve Devam Et'i tıklayın.
- Test kullanıcıları sayfasında varsayılanları kabul edin ve Kaydet ve Devam Et'i tıklayın.
- Özeti inceleyin ve Kontrol paneline dön'ü tıklayın.
- Kimlik Bilgileri sayfasında aşağıdaki adımları uygulayarak bir OAuth istemcisi oluşturun:
- Kimlik bilgisi oluştur'u tıklayın ve OAuth istemci kimliği'ni seçin.
- Application type (Uygulama türü) açılır listesinden Web application'ı (Web uygulaması) seçin.
- Name (Ad) alanına uygulamanızın adını girin (örneğin,
FriendlyChat
). Bu adın genel olarak benzersiz olması gerekmez. - Aşağıdaki ayarları yaparak uygulamanızın URL'sinin bu OAuth istemcisini kullanmasına izin verin:
- Yetkilendirilmiş JavaScript kaynakları bölümünde URI ekle'yi tıklayın ve
https://<PROJECT_ID>.firebaseapp.com
değerini girin. Burada<PROJECT_ID>
,main.tf
içinde ayarladığınız proje kimliğidir. - Yetkilendirilmiş yönlendirme URI'leri bölümünde URI ekle'yi tıklayın ve
https://<PROJECT_ID>.firebaseapp.com/__/auth/handler
değerini girin. Burada<PROJECT_ID>
,main.tf
içinde ayarladığınız proje kimliğidir.
- Yetkilendirilmiş JavaScript kaynakları bölümünde URI ekle'yi tıklayın ve
- Kaydet'i tıklayın.
- OAuth istemci kimliğinizi ve istemci gizli anahtarınızı kullanarak Google ile oturum açmayı etkinleştirmek için
main.tf
dosyanıza aşağıdaki bloğu ekleyin:
main.tf... variable "oauth_client_secret" { type = string description = "OAuth client secret. For this codelab, you can pass in this secret through the environment variable TF_VAR_oauth_client_secret. In a real app, you should use a secret manager service." sensitive = true } resource "google_identity_platform_default_supported_idp_config" "google_sign_in" { provider = google-beta project = google_firebase_project.default.project enabled = true idp_id = "google.com" client_id = "<YOUR_OAUTH_CLIENT_ID>" client_secret = var.oauth_client_secret depends_on = [ google_identity_platform_config.auth ] }
Yapılandırmayı uygulama
- Yapılandırmanıza göre kimlik doğrulama ayarlamak için
main.tf
dosyanızla (web
olmalıdır) aynı dizinin kökünden aşağıdaki komutları çalıştırın:export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
terraform apply
terraform apply
komutunu çalıştırmanın yeni bir Google Cloud projesi oluşturmayacağını unutmayın. Terraform, belirtilen proje kimliğine sahip bir projenin zaten mevcut olduğunu algılar ve projenin mevcut durumunu.tf
dosyasındaki durumla karşılaştırır. Ardından, bulduğu değişiklikleri yapar. - Yazdırılan işlem planını inceleyin. Her şey beklendiği gibi görünüyorsa
yes
yazıp Enter tuşuna basarak işlemleri onaylayın.
Değişiklikleri doğrulama
- Firebase konsolunda, sol paneldeki Build (Oluştur) bölümünü bulun.
- Kimlik doğrulama'yı ve ardından Oturum açma yöntemi sekmesini tıklayın (veya doğrudan gitmek için burayı tıklayın).
- Google'ı etkin bir oturum açma sağlayıcısı olarak görmelisiniz.
7. Firestore veritabanı ve güvenlik kurallarını ayarlama
Bu codelab'in web uygulamasında, son kullanıcılar arasındaki mesajları bir Firestore veritabanında depolayacaksınız.
- Gerekli API'leri etkinleştirmek ve veritabanı örneğini sağlamak için
main.tf
dosyanıza aşağıdaki kaynak bloklarını ekleyin:
main.tf... # Enable required APIs for Cloud Firestore. resource "google_project_service" "firestore" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "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 } # Provision the Firestore database instance. resource "google_firestore_database" "default" { provider = google-beta project = google_firebase_project.default.project name = "(default)" # See available locations: # https://firebase.google.com/docs/firestore/locations location_id = "<NAME_OF_DESIRED_REGION>" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, # authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" depends_on = [ google_project_service.firestore ] }
<NAME_OF_DESIRED_REGION>
değerini, veritabanının bulunmasını istediğiniz bölgeyle değiştirin.
Üretim uygulaması geliştirirken bu değerin, kullanıcıların çoğunluğuna yakın ve Cloud Functions gibi diğer Firebase hizmetleriyle ortak bir bölgede olmasını istersiniz. Bu codelab içinus-east1
(Güney Karolina) bölgesini veya size en yakın bölgeyi kullanabilirsiniz (bkz. Cloud Firestore konumları).- Firebase'in erişebildiği her Firestore veritabanı örneği, Firebase Güvenlik Kuralları ile korunmalıdır.
Bu codelab'in örnek kodu,firestore.rules
dosyasında bir dizi güvenli Firestore kuralı sağlar. Bu dosyayıweb
dizininin kökünden bulabilirsiniz. - Aşağıdakileri yapmak için
main.tf
dosyanıza aşağıdaki kaynak bloklarını ekleyin:- Yerel
firestore.rules
dosyasından Firebase Güvenlik Kuralları kuralları kümesi oluşturun. - Firestore örneği için kurallar kümesini yayınlayın.
firebase deploy --only firestore:rules
.
main.tf komutunu çalıştırmaya eşdeğer olduğunu unutmayın.... # Create a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore" { provider = google-beta project = google_firebase_project.default.project 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.default, ] } # Release 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_firebase_project.default.project # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.default, ] lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.firestore ] } }
- Yerel
- Firestore veritabanını sağlama ve güvenlik kurallarını dağıtmak için
terraform apply
komutunu çalıştırın. - Veritabanının sağlandığını ve güvenlik kurallarının dağıtıldığını doğrulayın:
- Firebase konsolunda, sol paneldeki Build (Oluştur) bölümünü bulun.
- Firestore Veritabanı bölümüne gidin ve Kurallar sekmesini tıklayın.
8. Cloud Storage paketi ve güvenlik kurallarını ayarlama
Bu codelab'in web uygulamasında, son kullanıcılar arasında paylaşılan resimleri bir Cloud Storage paketinde depolayacaksınız.
- Gerekli API'leri etkinleştirmek ve Cloud Storage varsayılan paketinizi sağlamak için
main.tf
dosyanıza aşağıdaki kaynak bloklarını ekleyin.
Projenizin varsayılan Cloud Storage paketinin Google App Engine aracılığıyla sağlandığını ve Firestore veritabananızla aynı konuma sahip olması gerektiğini unutmayın. Daha fazla bilgi için App Engine konumları'na bakın.
Projenizde birden fazla paket olmasını istiyorsanız bunlarıgoogle_storage_bucket
kaynağını kullanarak sağlayın (bu codelab'de gösterilmemiştir).
main.tf... # Enable required APIs for Cloud Storage for Firebase. resource "google_project_service" "storage" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "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 } # Provision the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default" { provider = google-beta project = google_firebase_project.default.project # 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_DESIRED_REGION_FOR_DEFAULT_BUCKET>" # Must be in the same location as Firestore (above) # Wait until Firestore is provisioned first. depends_on = [ google_firestore_database.default ] } # Make 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_firebase_project.default.project bucket_id = google_app_engine_application.default.default_bucket }
- Firebase'in erişebildiği her Cloud Storage paketi Firebase güvenlik kurallarıyla korunmalıdır.
Bu codelab'in örnek kodu,web
dizininin kökünden bulabileceğinizstorage.rules
dosyasında bir dizi güvenli Firestore kuralı sağlar. - Aşağıdakileri yapmak için
main.tf
dosyanıza aşağıdaki kaynak bloklarını ekleyin:- Yerel dosyadan Firebase Güvenlik Kuralları kuralları kümesi oluşturun.
- Depolama paketi için kurallar grubunu yayınlayın.
firebase deploy --only storage
.
main.tf komutunu çalıştırmaya eşdeğer olduğunu unutmayın.... # Create a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "storage" { provider = google-beta project = google_firebase_project.default.project 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_storage_bucket.default-bucket, ] } # Release 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_firebase_project.default.project}/rulesets/${google_firebaserules_ruleset.storage.name}" project = google_firebase_project.default.project lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.storage ] } }
- Varsayılan Cloud Storage paketini sağlama ve güvenlik kurallarını dağıtmak için
terraform apply
komutunu çalıştırın. - Paketin sağlandığını ve güvenlik kurallarının dağıtıldığını doğrulayın:
- Firebase konsolunda, sol paneldeki Build (Oluştur) bölümünü bulun.
- Depolama alanı bölümüne gidin ve Kurallar sekmesini tıklayın.
9. Uygulamanızı yerel olarak çalıştırma
Artık web uygulamanızı ilk kez çalıştırmaya hazırsınız. Uygulamanızı yerel olarak sunmak için Firebase Hosting emülatörünü kullanırsınız.
- Yeni bir terminal penceresi açın ve
web
dizininden aşağıdaki Firebase CLI komutunu çalıştırarak emülatörü başlatın:firebase emulators:start --project=<PROJECT_ID>
- Tarayıcınızda, web uygulamanızı CLI tarafından döndürülen yerel URL'de (genellikle
http://localhost:5000
) açın.
FriendlyChat uygulamanızın henüz çalışmayan kullanıcı arayüzünü görmeniz gerekir. Uygulama henüz Firebase'e bağlı değil ancak bu codelab'in sonraki adımlarını tamamladığınızda bağlanacak.
Web uygulamanızda değişiklik yaptığınızda (bu codelab'in sonraki adımlarında yapacağınız gibi) yerel URL'yi bu değişikliklerle güncellemek için tarayıcınızı yenilemeniz gerektiğini unutmayın.
10. Firebase'i yükleme, yapılandırma ve başlatma
Bir uygulamanın Firebase ile çalışması için uygulamanızda Firebase SDK'sı ve Firebase projenizin Firebase yapılandırması bulunmalıdır.
Bu codelab'in örnek kodu, uygulamada çeşitli Firebase ürünlerini kullanmak için gereken tüm bağımlılıkları ve işlevleri içeren, çalışan bir uygulamadır. Nelerin yapıldığını görmek isterseniz web/package.json
ve web/src/index.js
'e bakabilirsiniz.
Örnek kodun çoğu tamamlanmış olsa da uygulamanızı çalıştırmak için Firebase SDK'yı yükleme, derlemenizi başlatma, Firebase yapılandırmasını uygulamanıza ekleme ve son olarak Firebase'i başlatma gibi birkaç işlem yapmanız gerekir.
Firebase SDK'sını yükleyin ve webpack derlemenizi başlatın
Uygulamanızın derleme işlemini başlatmak için birkaç komut çalıştırmanız gerekir.
- Yeni bir terminal penceresi açın.
web
dizininin kök dizininde olduğunuzdan emin olun.- Firebase SDK'sını indirmek için
npm install
komutunu çalıştırın. - Bağımlılıkları güncellemek için
npm update
komutunu çalıştırın. - webpack'i başlatmak için
npm run start
komutunu çalıştırın.
Codelab'in geri kalanında webpack, kaynak kodunuzu sürekli olarak yeniden oluşturacak.
Firebase yapılandırmanızı uygulamanıza ekleme
Firebase SDK'larının hangi Firebase projesini kullanmasını istediğinizi bilmesi için Firebase yapılandırmanızı uygulamanıza da eklemeniz gerekir.
Bu codelab'de Firebase yapılandırmanızı almak için iki farklı seçeneğiniz vardır:
- 1. seçenek: Firebase yapılandırmanızı Firebase konsolundan alın.
- 2. seçenek: Firebase yapılandırmanızı Terraform aracılığıyla alın.
1. seçenek: Yapılandırmayı Firebase konsolundan alıp kod tabanınıza ekleyin
- Firebase konsolunda Proje ayarları'na gidin.
- Uygulamalarınız kartına gidin ve web uygulamanızı seçin.
- Firebase SDK snippet bölmesinde Config'i (Yapılandırma) seçin ve yapılandırma snippet'ini kopyalayın.
- Yapılandırmanızı uygulamanızın
web/src/firebase-config.js
dosyasına aşağıdaki gibi yapıştırın:
firebase-config.js... const config = { apiKey: "<API_KEY>", authDomain: "<PROJECT_ID>.firebaseapp.com", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", messagingSenderId: "<SENDER_ID>", appId: "<APP_ID>", measurementId: "<G-MEASUREMENT_ID>", }; ...
2. seçenek: Yapılandırmayı Terraform üzerinden edinip kod tabanınıza ekleme
Alternatif olarak, Firebase yapılandırmanızı Terraform üzerinden KSA'da çıkış değeri olarak alabilirsiniz.
main.tf
dosyanızdagoogle_firebase_web_app
kaynak bloğunuzu (bir web uygulamasını projenize kaydeden blok) bulun.- Bu bloktan hemen sonra aşağıdaki blokları ekleyin:
main.tf... data "google_firebase_web_app_config" "default" { provider = google-beta project = google_firebase_project.default.project web_app_id = google_firebase_web_app.default.app_id } output "friendlychat_web_app_config" { value = { projectId = google_firebase_project.default.project appId = google_firebase_web_app.default.app_id apiKey = data.google_firebase_web_app_config.default.api_key authDomain = data.google_firebase_web_app_config.default.auth_domain storageBucket = lookup(data.google_firebase_web_app_config.default, "storage_bucket", "") messagingSenderId = lookup(data.google_firebase_web_app_config.default, "messaging_sender_id", "") measurementId = lookup(data.google_firebase_web_app_config.default, "measurement_id", "") } } ...
data
veoutput
blokları altyapıyı herhangi bir şekilde değiştirmek için tasarlanmadığından yalnızca aşağıdaki komutları çalıştırmanız gerekir.- Web uygulamanızın Firebase yapılandırmasını dizininizin Terraform durumuna yüklemek için şu komutu çalıştırın:
terraform refresh
- Firebase yapılandırma değerlerini yazdırmak için şu komutu çalıştırın:
Aşağıda bir yapılandırmanın örnek çıktısı verilmiştir. Yazdırılan çıktınızda projenizin ve uygulamanızın değerleri yer alır.terraform output –json
{ "friendlychat_web_app_config": { "sensitive": false, "type": [ "object", { "apiKey": "string", "appId": "string", "authDomain": "string", "measurementId": "string", "messagingSenderId": "string", "projectId": "string", "storageBucket": "string" } ], "value": { "apiKey": "<API_KEY>", "appId": "<APP_ID>", "authDomain": "<PROJECT_ID>.firebaseapp.com", "measurementId": "<G-MEASUREMENT_ID>", "messagingSenderId": "<SENDER_ID>", "projectId": "<PROJECT_ID>", "storageBucket": "<PROJECT_ID>.appspot.com" } } }
- Web uygulamanızın Firebase yapılandırmasını dizininizin Terraform durumuna yüklemek için şu komutu çalıştırın:
value
haritasındaki değerleri kopyalayın.- Bu değerleri (yapılandırmanızı) uygulamanızın
web/src/firebase-config.js
dosyasına aşağıdaki gibi yapıştırın:
firebase-config.js... const config = { apiKey: "<API_KEY>", appId: "<APP_ID>", authDomain: "<PROJECT_ID>.firebaseapp.com", measurementId: "<G-MEASUREMENT_ID>", messagingSenderId: "<SENDER_ID>", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", }; ...
Uygulamanızda Firebase'i başlatma
Son olarak, Firebase'i başlatmak için uygulamanızın web/src/index.js
dosyasına aşağıdakileri ekleyin:
...
const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);
Uygulamanızı deneme
Firebase için her şey yapılandırıldığına göre artık işlevsel web uygulamanızı deneyebilirsiniz.
- Uygulamanıza hizmet veren tarayıcıyı yenileyin.
- Artık Google ile oturum açabilir ve sohbete mesaj göndermeye başlayabilirsiniz. Resim dosyalarınız varsa bunları da yükleyebilirsiniz.
11. Yapılandırmanızı ortamlar arasında çoğaltma
Terraform, benzer şekilde yapılandırılmış birden fazla altyapıyı yönetme konusunda mükemmeldir (örneğin, üretim projesine benzer bir hazırlık Firebase projesi oluşturma).
Bu codelab'de, hazırlık ortamı olarak kullanılacak ikinci bir Firebase projesi oluşturacaksınız.
Bu hazırlık projesini oluşturmak için mevcut bir yapılandırmayı kopyalamak üzere iki seçeneğiniz vardır:
- 1. seçenek: Terraform yapılandırmasının bir kopyasını oluşturun.
Bu seçenek, kopyalanan projenin kaynak projeden ne kadar farklı olabileceği konusunda en fazla esnekliği sunar. - 2. seçenek: Yapılandırmaları
for_each
ile yeniden kullanın.
Bu seçenek, her proje önemli ölçüde farklılık göstermemesi ve değişiklikleri tüm projelere aynı anda yaymak istemeniz durumunda daha fazla kod yeniden kullanımı sunar.
1. seçenek: Terraform yapılandırmasının kopyasını oluşturun
Bu seçenek, kopyalanan projenin kaynak projeden ne kadar farklı olabileceği konusunda en fazla esnekliği sunar. Örneğin, farklı görünen adlara ve aşamalı kullanıma sunma işlemlerine sahip uygulamalar.
web
dizininizin kök dizinindemain_staging.tf
adlı yeni bir Terraform yapılandırma dosyası oluşturun.main.tf
dosyanızdaki tüm kaynak bloklarını (terraform
veprovider
blokları hariç) kopyalayıpmain_staging.tf
dosyanıza yapıştırın.- Ardından, her bir kopyalanmış kaynak bloğunuzu
main_staging.tf
içinde değiştirerek hazırlık projenizle çalışmasını sağlamanız gerekir:- Kaynak etiketleri: Çakışmayı önlemek için yeni bir ad kullanın. Örneğin,
resource "google_project" "default"
dosyasınıresource "google_project" "staging"
olarak yeniden adlandırın. - Kaynak referansları: Her birini güncelleyin. Örneğin,
google_firebase_project.default.project
uygulamasınıgoogle_firebase_project.staging.project
sürümüne güncelleyin.
main_staging.tf
dosyasının tam yapılandırmasını bu codelab'in GitHub deposunda bulabilirsiniz:web/terraform-checkpoints/replicate-config/main_staging-copypaste.tf
Bu yapılandırmayı kullanmak istiyorsanız aşağıdakileri yaptığınızdan emin olun:- Yapılandırmayı
main_staging-copypaste.tf
etiketinden kopyalayın vemain_staging.tf
dosyanıza yapıştırın. main_staging.tf
dosyanızda aşağıdakileri yapın:google_project
kaynak bloğundaname
özelliğini,project-id
özelliğini ve (Terraform üzerinden kimlik doğrulama ayarladıysanız)billing_account
özelliğini kendi değerlerinizle güncelleyin.google_firebase_web_app
kaynak bloğundadisplay_name
özelliğini kendi değerinizle güncelleyin.google_firestore_database
vegoogle_app_engine_application
kaynak bloklarındalocation_id
özelliklerini kendi değerinizle güncelleyin.
# Create a new Google Cloud project. resource "google_project" "staging" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_STAGING_PROJECT>" project_id = "<PROJECT_ID_OF_STAGING_PROJECT" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } # Enable the required underlying Service Usage API. resource "google_project_service" "staging_serviceusage" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "staging_firebase" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for the new project created above. resource "google_firebase_project" "staging" { provider = google-beta project = google_project.staging.project_id # Wait until the required APIs are enabled. depends_on = [ google_project_service.staging_serviceusage, google_project_service.staging_firebase, ] } # Create a Firebase Web App in the new project created above. resource "google_firebase_web_app" "staging" { provider = google-beta project = google_firebase_project.staging.project display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" }
- Kaynak etiketleri: Çakışmayı önlemek için yeni bir ad kullanın. Örneğin,
- Yeni "hazırlama" Firebase projenizi ve tüm kaynaklarını sağlama ve hizmetlerini etkinleştirmek için
terraform apply
komutunu çalıştırın. - Her şeyin beklendiği gibi sağlandığını ve etkinleştirildiğini doğrulamak için Firebase konsolunda daha önce yaptığınız gibi kontrol edin.
2. seçenek: Yapılandırmaları for_each
ile yeniden kullanma
Bu seçenek, her projenin önemli ölçüde farklılık göstermemesi ve değişiklikleri tüm projelere aynı anda yaymak istemeniz durumunda daha fazla kod yeniden kullanımı sunar. Terraform dilinde for_each
meta-argümanını kullanır.
main.tf
dosyanızı açın.- Kopyalamak istediğiniz her kaynak bloğuna aşağıdaki gibi bir
for_each
meta bağımsız değişkeni ekleyin:
main.tf# Create new Google Cloud projects. resource "google_project" "default" { provider = google-beta.no_user_project_override name = each.value # Create a unique project ID for each project, with each ID starting with <PROJECT_ID>. project_id = "<PROJECT_ID>-${each.key}" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the projects to display in any list of Firebase projects. labels = { "firebase" = "enabled" } for_each = { prod = "<PROJECT_NAME_OF_PROD_PROJECT>" staging = "<PROJECT_NAME_OF_STAGING_PROJECT>" } } # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for each of the new projects created above. resource "google_firebase_project" "default" { provider = google-beta for_each = google_project.default project = each.value.project_id depends_on = [ google_project_service.serviceusage, google_project_service.firebase, ] } # Create a Firebase Web App in each of the new projects created above. resource "google_firebase_web_app" "default" { provider = google-beta for_each = google_firebase_project.default project = each.value.project # The Firebase Web App created in each project will have the same display name. display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" } # NOTE: For this codelab, we recommend setting up Firebase Authentication # using the Firebase console. However, if you set up Firebase Authentication # using Terraform, copy-paste from your main.tf the applicable blocks. # Make sure to add the `for_each` meta-argument into each block. # Copy-paste from your main.tf file the applicable resource blocks # for setting up Cloud Firestore (including rules) and # for setting up Cloud Storage for Firebase (including rules). # Make sure to add the `for_each` meta-argument into each block.
for_each
meta bağımsız değişkenini kullanan birmain.tf
dosyasının tam yapılandırmasını bu codelab'in GitHub deposunda bulabilirsiniz:web/terraform-checkpoints/replicate-config/main-foreach.tf
Bu yapılandırmayı kullanmak istiyorsanız aşağıdakileri yaptığınızdan emin olun:- Yapılandırmayı
main-foreach.tf
etiketinden kopyalayın vemain.tf
dosyanıza yapıştırın. main.tf
dosyanızda aşağıdakileri yapın:google_project
kaynak bloğundaname
özelliğini,project-id
özelliğini ve (Terraform üzerinden kimlik doğrulama ayarladıysanız)billing_account
özelliğini kendi değerlerinizle güncelleyin.google_firebase_web_app
kaynak bloğundadisplay_name
özelliğini kendi değerinizle güncelleyin.google_firestore_database
vegoogle_app_engine_application
kaynak bloklarındalocation_id
özelliklerini kendi değerinizle güncelleyin.
- Yapılandırmayı
- Bu yapılandırmayı hemen uygulamak yerine, Terraform'un bu yapılandırmayı mevcut altyapıya kıyasla nasıl yorumladığıyla ilgili birkaç şeyi anlamak ve düzeltmek önemlidir.
- Şu anda
for_each
kullanan bu yapılandırmayı uyguladıysanız kaynak adresleri aşağıdaki gibi görünür: Ancak bu codelab'in ilk bölümünde oluşturduğunuz mevcut proje, Terraform'da aşağıdaki şekilde bilinir:google_project.default["prod"] google_project.default["staging"] google_firebase_project.default["prod"] google_firebase_project.default["staging"] google_firebase_web_app.default["prod"] google_firebase_web_app.default["staging"]
google_project.default google_firebase_project.default google_firebase_android_app.default
- Geçerli duruma göre Terraform'un hangi işlemleri yapacağını görmek için
terraform plan
komutunu çalıştırın.
Çıktıda, Terraform'un bu kod laboratuvarının ilk bölümünde oluşturduğunuz projeyi sileceği ve iki yeni proje oluşturacağı gösterilmelidir. Bunun nedeni, Terraform'ungoogle_project.default
adresindeki projeningoogle_project.default["prod"]
adresine taşındığını bilmemesidir. - Bu sorunu düzeltmek için
terraform state mv
komutunu çalıştırın:terraform state mv "google_project.default" "google_project.default[\"prod\"]"
- Benzer şekilde, diğer tüm kaynak bloklarını düzeltmek için
terraform state mv
,google_firebase_project
,google_firebase_web_app
vemain.tf
dosyanızdaki diğer tüm kaynak blokları için çalıştırın. - Şimdi
terraform plan
komutunu tekrar çalıştırırsanız Terraform'un bu kod laboratuvarının ilk bölümünde oluşturduğunuz projeyi sileceğini göstermemesi gerekir.
- Şu anda
- Yeni "hazırlama" Firebase projenizi ve tüm kaynaklarını sağlama ve hizmetlerini etkinleştirmek için
terraform apply
komutunu çalıştırın. - Her şeyin beklendiği gibi sağlandığını ve etkinleştirildiğini doğrulamak için Firebase konsolunda daha önce yaptığınız gibi kontrol edin.
12. Bonus adım: Hazırlık ve üretim uygulamalarınızı dağıtın
- Uygulamanızın kod tabanında,
firebase-config.js
değerini bunun yerine hazırlama projenizdeki Firebase yapılandırmasını kullanacak şekilde değiştirin.
Firebase yapılandırmanızı nasıl alacağınızı ve uygulamanıza nasıl ekleyeceğinizi hatırlamak için bu codelab'in önceki adımına (Firebase yapılandırmanızı uygulamanıza ekleme) bakın. web
dizininizin kökünden aşağıdaki komutu çalıştırarak uygulamanızı hazırlama Firebase projenize dağıtın.firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
firebase deploy
çıkışında yazdırılan URL'yi kullanarak tarayıcıda hazırlık uygulamanızı açın. Oturum açmayı, mesaj göndermeyi ve resim yüklemeyi deneyin.
Bir uygulamayı Firebase projesine dağıttığınızda, emüle edilmiş kaynaklar değil gerçek Firebase kaynakları kullanılır. Hazırlık uygulamanızla etkileşimde bulunduğunuzda, Firebase konsolundaki hazırlık projenizde verilerin ve resimlerin göründüğünü görmeniz gerekir.- Uygulamanızı hazırlama ortamında test ettikten sonra
firebase-config.js
, tekrar üretim projesinin Firebase yapılandırmasını (bu codelab'de oluşturduğunuz ilk proje) kullanacak şekilde değiştirin. web
dizininizin kökünden, uygulamanızı üretim Firebase projenize dağıtmak için aşağıdaki komutu çalıştırın.firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
- Üretim uygulamanızı,
firebase deploy
çıkışında yazdırılan URL aracılığıyla tarayıcıda açın. Oturum açmayı, mesaj göndermeyi ve resim yüklemeyi deneyin.
Verilerin ve resimlerin Firebase konsolundaki üretim projenizde göründüğünü görmelisiniz. - Bu codelab'deki iki uygulamayla etkileşiminiz bittiğinde Firebase'in bu uygulamalara hizmet vermesini durdurabilirsiniz. Projelerinizin her biri için aşağıdaki komutu çalıştırın:
firebase hosting:disable --project=<STAGING_PROJECT_ID>
firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
13. Tebrikler!
Gerçek zamanlı sohbet web uygulamasını yapılandırmak için Terraform'u kullandınız. Ayrıca, hazırlık ve üretim için ayrı Firebase projeleri oluşturarak geliştirme ortamlarıyla ilgili en iyi uygulamaları takip etmişsinizdir.
İşlediğimiz konular
- Bulut kaynaklarını yönetmek için Terraform KSA'yı kullanma
- Firebase ürünlerini (Authentication, Firestore, Cloud Storage ve Güvenlik Kuralları) yapılandırmak için Terraform'u kullanma
- Firebase Local Emulator Suite'i kullanarak bir web uygulamasını yerel olarak çalıştırma ve test etme
- Firebase'i web uygulamasına aktarma
- Yapılandırmayı birden çok ortamda kopyalamak için Terraform'u kullanma
Firebase ve Terraform hakkında daha fazla bilgi için dokümanlarımızı inceleyin. Terraform desteği olan tüm Firebase ürünlerinin listesini, yaygın kullanım alanlarına yönelik örnek Terraform yapılandırmalarını ve faydalı sorun giderme bilgilerini ve SSS'yi bulabilirsiniz.