Firebase proje ve ürünlerini Terraform üzerinden oluşturup yönetin

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

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:

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

  1. İndirilen örnek uygulamanın kod tabanında web dizininin kök bölümüne gidin.
  2. 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

  1. Ö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. Ancak project_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"
      }
    }
    
  2. 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
    ...
    
    # 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
    }
    
    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 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

  1. 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
    
  2. Terminalde Terraform, gerçekleştireceği işlemlerin planını yazdırır.

    Her şey beklendiği gibi görünüyorsa yes girerek işlemleri onaylayın.

    main.tf
    Terraform 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.

Firebase konsolunda seçilen Terraform FriendlyChat Codelab projesi

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

  1. 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.
    terraform apply
    
    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 durumunu .tf dosyasındaki durumla karşılaştırır ve bulduğu değişiklikleri yapar.
  2. 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ı:

  1. Firebase konsolunda, sol paneldeki Build (Oluştur) bölümünü bulun.
  2. 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).
  3. Yeni sağlayıcı ekle'yi tıklayın ve Ek sağlayıcılar bölümünden Google'ı seçin.
  4. Etkinleştir açma/kapatma düğmesini etkinleştirin.
  5. Uygulamanızın herkese açık adını FriendlyChat gibi bir ad olarak ayarlayın (bu adın genel olarak benzersiz olması gerekmez).
  6. Açılır menüden bir Proje destek e-postası seçin ve Kaydet'i tıklayın.Firebase konsolunda Firebase Auth&#39;u yapılandırma
  7. Google'ı etkin bir oturum açma sağlayıcısı olarak görmelisiniz.Firebase konsolunun Kimlik Doğrulama sayfası: Google ile oturum açma etkinleştirildi

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

  1. 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.Google Cloud Console&#39;u kullanarak faturalandırma hesabını etkinleştirme
  2. Terraform aracılığıyla projenizde faturalandırmayı etkinleştirmek için billing_account özelliğini main.tf dosyanızdaki mevcut google_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

  1. 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,
      ]
    }
    
  2. 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.
  3. Bu proje için ilk kez istemci kimliği oluşturduğunuzdan OAuth izin ekranınızı yapılandırmanız gerekir.
    1. OAuth kullanıcı rızası ekranı sayfasını açın ve yeni oluşturduğunuz projeyi seçin.
    2. Kullanıcı Türü'nü Harici olarak ayarlayın ve Oluştur'u tıklayın.
    3. 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.
    4. 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.
      Google Cloud Console&#39;u kullanarak OAuth2 istemcisini yapılandırma
  4. Kimlik Bilgileri sayfasında aşağıdaki adımları uygulayarak bir OAuth istemcisi oluşturun:
    1. Kimlik bilgisi oluştur'u tıklayın ve OAuth istemci kimliği'ni seçin.
    2. Application type (Uygulama türü) açılır listesinden Web application'ı (Web uygulaması) seçin.
    3. Name (Ad) alanına uygulamanızın adını girin (örneğin, FriendlyChat). Bu adın genel olarak benzersiz olması gerekmez.
    4. 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.
    5. Kaydet'i tıklayın.
    Google Cloud Console&#39;daki Kimlik Bilgileri sayfasından OAuth2 istemci kimliğini ve gizli anahtarını edinme
  5. 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

  1. 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.
  2. 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

  1. Firebase konsolunda, sol paneldeki Build (Oluştur) bölümünü bulun.
  2. 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).
  3. Google'ı etkin bir oturum açma sağlayıcısı olarak görmelisiniz.Firebase konsolunun Kimlik Doğrulama sayfası: Google ile oturum açma etkinleştirildi

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.

  1. 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
      ]
    }
    
  2. <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çin us-east1 (Güney Karolina) bölgesini veya size en yakın bölgeyi kullanabilirsiniz (bkz. Cloud Firestore konumları).
  3. 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.
  4. 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.
    Bu kaynak bloklarının, Firebase konsolunda Yayınla düğmesini tıklamaya veya 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
        ]
      }
    }
    
  5. Firestore veritabanını sağlama ve güvenlik kurallarını dağıtmak için terraform apply komutunu çalıştırın.
  6. Veritabanının sağlandığını ve güvenlik kurallarının dağıtıldığını doğrulayın:
    1. Firebase konsolunda, sol paneldeki Build (Oluştur) bölümünü bulun.
    2. Firestore Veritabanı bölümüne gidin ve Kurallar sekmesini tıklayın.
    Firebase konsolunu kullanarak Cloud Firestore kurallarını doğrulama

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.

  1. 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
    }
    
  2. 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ğiniz storage.rules dosyasında bir dizi güvenli Firestore kuralı sağlar.
  3. 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.
    Bu kaynak bloklarının, Firebase konsolunda Yayınla düğmesini tıklamaya veya 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
        ]
      }
    }
    
  4. Varsayılan Cloud Storage paketini sağlama ve güvenlik kurallarını dağıtmak için terraform apply komutunu çalıştırın.
  5. Paketin sağlandığını ve güvenlik kurallarının dağıtıldığını doğrulayın:
    1. Firebase konsolunda, sol paneldeki Build (Oluştur) bölümünü bulun.
    2. Depolama alanı bölümüne gidin ve Kurallar sekmesini tıklayın.
    Firebase konsolunu kullanarak güvenlik kurallarını doğrulama

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.

  1. 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>
    
  2. 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.

  1. Yeni bir terminal penceresi açın.
  2. web dizininin kök dizininde olduğunuzdan emin olun.
  3. Firebase SDK'sını indirmek için npm install komutunu çalıştırın.
  4. Bağımlılıkları güncellemek için npm update komutunu çalıştırın.
  5. 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

  1. Firebase konsolunda Proje ayarları'na gidin.
  2. Uygulamalarınız kartına gidin ve web uygulamanızı seçin.
  3. Firebase SDK snippet bölmesinde Config'i (Yapılandırma) seçin ve yapılandırma snippet'ini kopyalayın.
  4. 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.

  1. main.tf dosyanızda google_firebase_web_app kaynak bloğunuzu (bir web uygulamasını projenize kaydeden blok) bulun.
  2. 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", "")
      }
    }
    
    ...
    
  3. data ve output blokları altyapıyı herhangi bir şekilde değiştirmek için tasarlanmadığından yalnızca aşağıdaki komutları çalıştırmanız gerekir.
    1. Web uygulamanızın Firebase yapılandırmasını dizininizin Terraform durumuna yüklemek için şu komutu çalıştırın:
      terraform refresh
      
    2. Firebase yapılandırma değerlerini yazdırmak için şu komutu çalıştırın:
      terraform output –json
      
      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.
      {
        "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"
          }
        }
      }
      
  4. value haritasındaki değerleri kopyalayın.
  5. 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:

index.js

...

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.

  1. Uygulamanıza hizmet veren tarayıcıyı yenileyin.
  2. 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.

  1. web dizininizin kök dizininde main_staging.tf adlı yeni bir Terraform yapılandırma dosyası oluşturun.
  2. main.tf dosyanızdaki tüm kaynak bloklarını (terraform ve provider blokları hariç) kopyalayıp main_staging.tf dosyanıza yapıştırın.
  3. 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:
    1. Yapılandırmayı main_staging-copypaste.tf etiketinden kopyalayın ve main_staging.tf dosyanıza yapıştırın.
    2. main_staging.tf dosyanızda aşağıdakileri yapın:
      • google_project kaynak bloğunda name ö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ğunda display_name özelliğini kendi değerinizle güncelleyin.
      • google_firestore_database ve google_app_engine_application kaynak bloklarında location_id özelliklerini kendi değerinizle güncelleyin.
    main_staging.tf
    # 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"
    }
    
  4. 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.
  5. 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.

  1. main.tf dosyanızı açın.
  2. 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 bir main.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:
    1. Yapılandırmayı main-foreach.tf etiketinden kopyalayın ve main.tf dosyanıza yapıştırın.
    2. main.tf dosyanızda aşağıdakileri yapın:
      • google_project kaynak bloğunda name ö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ğunda display_name özelliğini kendi değerinizle güncelleyin.
      • google_firestore_database ve google_app_engine_application kaynak bloklarında location_id özelliklerini kendi değerinizle güncelleyin.
  3. 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.
    1. Şu anda for_each kullanan bu yapılandırmayı uyguladıysanız kaynak adresleri aşağıdaki gibi görünür:
      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"]
      
      Ancak bu codelab'in ilk bölümünde oluşturduğunuz mevcut proje, Terraform'da aşağıdaki şekilde bilinir:
      google_project.default
      google_firebase_project.default
      google_firebase_android_app.default
      
    2. 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'un google_project.default adresindeki projenin google_project.default["prod"] adresine taşındığını bilmemesidir.
    3. Bu sorunu düzeltmek için terraform state mv komutunu çalıştırın:
      terraform state mv "google_project.default" "google_project.default[\"prod\"]"
      
    4. Benzer şekilde, diğer tüm kaynak bloklarını düzeltmek için terraform state mv, google_firebase_project, google_firebase_web_app ve main.tf dosyanızdaki diğer tüm kaynak blokları için çalıştırın.
    5. Ş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.
  4. 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.
  5. 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

  1. 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.
  2. 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>
    
  3. 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.
  4. 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.
  5. 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>
    
  6. Ü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.
  7. 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.