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

1. Giriş

Gol sayısı

Altyapının ve Firebase ürünlerinin programatik yapılandırması dahil olmak üzere, bir Firebase projesi oluşturmak 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 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 uygulama gibi Terraform komut satırıyla ilgili temel bilgileri de ele alacağız.

Firebase projelerini ve ürünlerini Terraform ile oluşturup yönetmeyi öğrenmek istiyorsanız bu codelab'de 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ında nasıl uygulayabilirsiniz? (Dostça Sohbet olarak adlandırılır)
  • Farklı ortamlarda (üretim, hazırlık vb.) paralel (ve senkronize olan) yapılandırmaları tanımlama

Gerekenler

Bu codelab'de başarılı olmak için aşağıdaki ön koşullar da dahil olmak üzere Terraform'da ve terminolojisinde temel düzeyde yeterliliğe sahip olmanız gerekir:

Bu codelab'de, Terraform aracılığıyla sağladığınız öğeleri test edip bunlarla etkileşimde bulunabilmeniz için gerçek bir örnek uygulama sunulmaktadır. Bunun için aşağıdakilere ihtiyacınız olacaktır:

  • Web uygulaması için örnek kod: codelab'in sonraki adımında bu kodu indirin
  • Paket yöneticisi npm (genellikle Node.js ile birlikte gelir) - bu araçları yükleyin
  • Firebase CLI: Bu KSA'yı yükleyin ve giriş yapın.

2. Başlangıç kodunu al

Bu codelab'de, Terraform üzerinden sağladığınız öğeleri gerçek bir web uygulamasıyla test edebilirsiniz. Terraform tarafından temel hazırlığı yapılan kaynakları kullanırken gereken tüm adımları anlamanız için bu işlemi yapmanızı öneririz.

Komut satırından codelab'in GitHub deposunu klonlayın:

git clone https://github.com/firebase/codelab-friendlychat-web

Alternatif olarak, git yüklü değilse depoyu bir 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üne gidin.
  2. Bu dizinin kök dizininde, aşağıdaki ilk kurulumu kullanarak main.tf adında 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
    }
    

Her google-beta sağlayıcısının, Terraform'daki işlemlerin kotasının nasıl kontrol edileceğini user_project_override adında bir özelliğe sahiptir. Çoğu kaynağın temel hazırlığını yapmak için user_project_override = true kullanmanız gerekir. Bu, kotayı kendi Firebase projenizle karşılaştırarak kontrol etmek 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ı kurulumunu ayırt etmenizi sağlar.

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şlatmayı yapmak için main.tf yapılandırma dosyanızla aynı dizinin kök dizininden aşağıdaki komutu çalıştırın:

terraform init

4. Terraform aracılığıyla Firebase projesi oluşturma

"Firebase projesi oluşturmak" için her Firebase projesinin aslında bir Google Cloud projesi olduğunu ve Firebase hizmetlerinin etkinleştirildiğini unutmayın.

Temel Google Cloud projesi ve API'ler için bloklar ekleyin

  1. Önce temel Google Cloud projesini sağlayın.

    main.tf yapılandırma dosyanıza aşağıdaki kaynak bloğunu ekleyin.

    Kendi projenizin adını (ör. "Terraform FriendlyChat Codelab") ve kendi 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ıların bu değeri görmediğini unutmayın. Ancak project_id değeri, projenizi Google'a benzersiz bir şekilde tanımlar, bu nedenle benzersiz bir değer belirttiğinizden emin olun. ziyaret edin. ana.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 etkinleştirmeniz gerekir: Service Usage API ve Firebase Management API.

    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ı açıkça söylenmesi gerekir.

    main.tf yapılandırma dosyanıza (yeni Cloud projesini oluşturan bloğun hemen altında) şu 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ştirdiğinizde yeni projeniz kota kontrollerini kabul edebilir. Bu nedenle, sonraki tüm kaynak sağlama ve hizmet etkinleştirme işlemleri için sağlayıcıyı user_project_override ile kullanmanız gerekir (takma ad gerekmez).

Firebase hizmetlerini etkinleştirmek için blok ekleyin

"Firebase projesi oluşturmak" için gereken son şey projede Firebase hizmetlerini etkinleştirmektir.

main.tf yapılandırma dosyanıza aşağıdaki kaynak bloğunu ekleyin.

Yukarıda belirtildiği gibi, bu kaynak bloğunun sağlayıcıyı user_project_override ile kullandığını unutmayın (takma ad gerekmez).

ana.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 bildiren depends_on ifadesini görebilirsiniz. Bu ifade olmadan, Terraform bağımlılıktan haberdar olmaz ve kaynakların paralel olarak sağlanması sırasında hatalarla karşılaşabilir.

Yapılandırmayı uygulama

  1. Yeni kaynakların temel hazırlığını yapmak ve yapılandırma dosyanızda belirtilen API'leri etkinleştirmek için main.tf dosyanızla aynı dizinin (web olmalıdır) kök dizininden aşağıdaki komutu çalıştırın:
    terraform apply
    
  2. Terraform, terminalde gerçekleştireceği işlemlerin planını yazdırır.

    Her şey beklendiği gibi görünüyorsa işlemleri yes yazarak 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 önizlemeniz gerekiyorsa bunun yerine terraform plan komutunu kullanabilirsiniz.

Değişiklikleri doğrulama

Terraform çalışmayı bitirdikten sonra, aşağıdaki komutu çalıştırarak Terraform'un sağladığı tüm kaynak ve hizmetlerin durumunu inceleyebilirsiniz:

terraform show

Aşağıda, yazdırılmış olarak göreceğiniz bir örnek verilmiştir. Eyaletiniz, projenize özgü değerleri içerecektir.

# 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, Firebase konsolunda görüntüleyerek projenin oluşturulduğunu doğrulayabilirsiniz.

Firebase konsolunda seçilen Terraform FriendlyChat Codelab projesi

5. Firebase uygulamanızı Terraform üzerinden kaydedin

Firebase'i kullanmak için uygulamanızın her platform varyantını Firebase projenize kaydetmeniz gerekir. Bu codelab'de, Terraform üzerinden sağladığınız içeriği 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 projenize bir Firebase Web Uygulaması kaydetmesini bildirmeniz gerekir.

Web uygulamasını kaydetmek için 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 öğenizi belirtmeniz gerekir. Bu adın yalnızca Firebase arayüzlerinde kullanıldığını ve son kullanıcılara görünmediğini unutmayın.

ana.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ğın temel hazırlığını yapmak için, main.tf dosyanızla aynı dizinin kök dizininden (web olmalıdır) aşağıdaki komutu çalıştırın.
    terraform apply
    
    Bu komutun yeni bir Google Cloud projesini yeniden oluşturmayacağını unutmayın. Terraform, belirtilen proje kimliğine sahip bir projenin zaten var olduğunu tespit edip projenin geçerli durumunu .tf dosyasındakilerle karşılaştırır ve bulduğu değişiklikleri yapar.
  2. Yazdırılan eylem planını inceleyin. Her şey beklendiği gibi görünüyorsa işlemleri onaylamak için yes yazın ve Enter tuşuna basın.

Değişiklikleri doğrulama

Aşağıdaki komutu çalıştırarak yeni sağlanan kaynağın durumunu inceleyebilirsiniz:

terraform show

Alternatif olarak, uygulamayı Firebase konsolunda görüntüleyerek uygulamanın projenize başarıyla kaydedildiğini doğrulayabilirsiniz. Proje ayarları'na, ardından Uygulamalarınız bölümüne ilerleyin.

6. Firebase Authentication'ı kurma

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 sağladığımızı unutmayın:

  • 1. Seçenek (Önerilen): Konsolda Firebase Authentication'ı kurun. Bu, GCIP gerektirmez.
    • Bu seçeneği kullandığınızda yeni projenizi bir Cloud Faturalandırma Hesabı ile ilişkilendirmeniz gerekmez.
  • 2. Seçenek: Google Cloud Identity Platform (GCIP) API'lerini kullanarak Terraform üzerinden Firebase Authentication'ı kurun.
    • GCIP, projenin Blaze fiyatlandırma planı kapsamında olmasını gerektirdiğinden bu seçeneği kullanırsanız yeni projenizi bir Cloud Faturalandırma Hesabı ile ilişkilendirmeniz gerekir.

1. seçenek: Firebase konsolunu kullanarak Authentication'ı ayarlama

Firebase konsolunu kullanarak Firebase Authentication'ı ayarlamak için projenizin Blaze fiyatlandırma planında olması gerekmez.

Firebase Authentication'ı ayarlamak ve Google ile oturum açmak için aşağıdaki adımları uygulayın:

  1. Firebase konsolunda, sol panelden Derleme bölümünü bulun.
  2. Kimlik doğrulama'yı, Başlayın'ı, ardından Oturum açma yöntemi sekmesini tıklayın (veya doğrudan bu sayfaya 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ünde Google'ı seçin.
  4. Etkinleştir düğmesini açık konuma getirin.
  5. Uygulamanızın herkese açık adını FriendlyChat gibi bir ada ayarlayın (bunun global olarak benzersiz olması gerekmez).
  6. Açılır menüden bir Proje desteği e-posta adresi seçin ve ardından 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örmeniz gerekir.Firebase konsolu Kimlik doğrulama sayfası: Google ile Oturum Açma etkin

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, projenin Blaze fiyatlandırma planına dahil olması gerektiği anlamına gelir. Projeyle bir Cloud Faturalandırma hesabı ilişkilendirerek Firebase projenizi Blaze planını kullanacak şekilde yükseltirsiniz.

Terraform üzerinden faturalandırmayı etkinleştirme

  1. Cloud Faturalandırma hesabınız yoksa ilk olarak Google Cloud Console'da yeni bir hesap oluşturun. Bunu yaparken Faturalandırma hesabı kimliğini not edin. Faturalandırma hesabı kimliği, projenizle ilişkili Faturalandırma hesabı kimliğindeki Faturalandırma sayfasında bulunabilir.Google Cloud konsolunu kullanarak faturalandırma hesabını etkinleştirme
  2. Projenizde Terraform aracılığıyla faturalandırmayı etkinleştirmek için main.tf dosyanızdaki mevcut google_project kaynağına bir billing_account özelliği 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"
      }
    }
    
    ...
    

Firebase Authentication'ı etkinleştirin ve Terraform üzerinden Google ile oturum açın

  1. Firebase Authentication'ı GCIP ile sağlamak için main.tf dosyanıza şu 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çma özelliğini etkinleştirmek için bir OAuth istemciniz olması gerekir. API'ler ve Hizmetler bölümünü ziyaret edin.
  3. Bu proje için ilk kez bir istemci kimliği oluşturduğunuzdan OAuth izin ekranınızı yapılandırmanız gerekir.
    1. OAuth izin ekranı sayfasını açın ve az önce oluşturduğunuz projeyi seçin.
    2. Kullanıcı Türü'nü Harici olarak ayarlayın ve Oluştur'u tıklayın.
    3. Bir sonraki ekranda aşağıdaki adımları tamamlayın ve ardından Kaydet ve devam et'i tıklayın.
      • Uygulamanızın herkese açık Uygulama adını FriendlyChat gibi bir ada ayarlayın (bunun global olarak benzersiz olması gerekmez).
      • Açılır menüden bir Kullanıcı desteği e-postası seçin.
      • Geliştirici iletişim bilgileri için bir e-posta girin.
    4. Sonraki ekranlarda aşağıdaki işlemleri tamamlayın:
      • Kapsamlar sayfasında varsayılanları kabul edin ve ardından Kaydet ve Devam Et'i tıklayın.
      • Test kullanıcıları sayfasındaki varsayılanları kabul edin ve ardından Kaydet ve Devam Et'i tıklayın.
      • Özeti inceleyin ve ardından Kontrol paneline dön'ü tıklayın.
      Google Cloud konsolunu kullanarak OAuth2 istemcisini yapılandırma
  4. Aşağıdaki adımları uygulayarak Kimlik bilgileri sayfasında bir OAuth istemcisi oluşturun:
    1. Create credentials'ı (Kimlik bilgileri oluştur) tıklayın ve OAuth istemci kimliği'ni seçin.
    2. Uygulama türü açılır menüsünden Web uygulaması'nı seçin.
    3. Ad alanına uygulamanızın adını girin (ör. FriendlyChat). (Bunun genel olarak benzersiz olması gerekmez).
    4. Aşağıdakileri ayarlayarak uygulamanızın URL'sinin bu OAuth istemcisini kullanmasına izin verin:
      • Yetkili JavaScript kaynakları altında, 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.
      • Yetkili yönlendirme URI'leri altında, 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 Kimlik Bilgileri sayfasından OAuth2 İstemci Kimliği&#39;ni ve sırrını alma
  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 şu bloku 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. Authentication'ı yapılandırmanıza göre ayarlamak için main.tf dosyanızla aynı dizinin kök dizininden (web olmalıdır) aşağıdaki komutları çalıştırın:
    export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
    
    terraform apply
    
    terraform apply çalıştırdığınızda yeni bir Google Cloud projesinin yeniden oluşturulmayacağını unutmayın. Terraform, belirtilen proje kimliğine sahip bir projenin zaten var olduğunu tespit edip projenin mevcut durumunu .tf dosyasındaki durumla karşılaştırır. Ardından, bulduğu değişiklikleri yapar.
  2. Yazdırılan eylem planını inceleyin. Her şey beklendiği gibi görünüyorsa işlemleri onaylamak için yes yazın ve Enter tuşuna basın.

Değişiklikleri doğrulama

  1. Firebase konsolunda, sol panelden Derleme 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 bu sayfaya gitmek için burayı tıklayın).
  3. Google'ı etkin bir oturum açma sağlayıcısı olarak görmeniz gerekir.Firebase konsolu Kimlik doğrulama sayfası: Google ile Oturum Açma etkin

7. Firestore veritabanı ve Güvenlik Kuralları oluşturma

Bu codelab'in web uygulamasında, son kullanıcılar arasındaki mesajları bir Firestore veritabanında depolarsınız.

  1. Gerekli API'leri etkinleştirmek ve veritabanı örneğinin temel hazırlığını yapmak 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> kısmını, veritabanının yerleştirilmesini istediğiniz bölgeyle değiştirin.

    Üretim uygulaması geliştirirken, bu uygulamanın kullanıcıların çoğunluğuna yakın bir bölgede olmasını ve Cloud Functions gibi diğer Firebase hizmetlerinde yaygın olarak kullanılmasını tercih edebilirsiniz. Bu codelab için us-east1 (Güney Carolina) ya da size en yakın bölgeyi kullanabilirsiniz (Cloud Firestore konumlarına bakın).
  3. Firebase'in erişebildiği her Firestore veritabanı örneği, Firebase Güvenlik Kuralları tarafından korunmalıdır.

    Bu codelab'in örnek kodu, web dizininin kök dizininde bulabileceğiniz firestore.rules dosyasında bir dizi güvenli Firestore kuralları sağlar.
  4. Aşağıdakileri yapmak için, aşağıdaki kaynak bloklarıyla main.tf dosyanızı ekleyin:
    • Yerel firestore.rules dosyasından Firebase Güvenlik Kuralları kural kümesini oluşturun.
    • Firestore örneği için kural kümesini bırakın.
    ziyaret edin. Bu kaynak bloklarının, Firebase konsolunda Yayınla düğmesini tıklama veya firebase deploy --only firestore:rules çalıştırma ile eşdeğer olduğunu unutmayın.

    main.tf
    ...
    
    # 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ğlamak 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 panelden Derleme bölümünü bulun.
    2. Firestore Veritabanı bölümüne gidin ve ardından Kurallar sekmesini tıklayın.
    Firebase konsolunu kullanarak Cloud Firestore kurallarını doğrulama

8. Cloud Storage paketi ve Güvenlik Kuralları oluşturma

Bu codelab'in web uygulamasında, son kullanıcılar arasında paylaşılan görüntüleri 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 üzerinden sağlandığını ve Firestore veritabanınızla aynı konumda olması gerektiğini unutmayın. Daha fazla bilgi için App Engine konumları başlıklı makaleyi inceleyin.

    Projenizde birden fazla paket olmasını istiyorsanız google_storage_bucket kaynağını kullanarak bu paketlerin temel hazırlığını yapı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ı ile korunmalıdır.

    Bu codelab'in örnek kodu, web dizininin kök dizininde bulabileceğiniz storage.rules dosyasında bir dizi güvenli Firestore kuralları sağlar.
  3. Aşağıdakileri yapmak için, aşağıdaki kaynak bloklarıyla main.tf dosyanızı ekleyin:
    • Yerel dosyadan Firebase Güvenlik Kuralları kural kümesini oluşturun.
    • Storage paketinin kural kümesini bırakın.
    ziyaret edin. Bu kaynak bloklarının, Firebase konsolunda Yayınla düğmesini tıklama veya firebase deploy --only storage çalıştırma ile eşdeğer olduğunu unutmayın.

    main.tf
    ...
    
    # 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ğlamak ve güvenlik kurallarını dağıtmak için terraform apply çalıştırın.
  5. Paketin temel hazırlığının yapıldığını ve güvenlik kurallarının dağıtıldığını doğrulayın:
    1. Firebase konsolunda, sol panelden Derleme 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 dizininde 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ı KSA tarafından döndürülen yerel URL'de açın (genellikle http://localhost:5000).

FriendlyChat uygulamanızın (henüz) çalışmayan kullanıcı arayüzünü görürsünüz. Uygulama henüz Firebase'e bağlanmadı ancak bu codelab'in sonraki adımları tamamlandıktan sonra Firebase'e bağlanabileceksiniz.

Web uygulamanızda her değişiklik yaptığınızda (bu codelab'in aşağıdaki adımlarında yapacağınız gibi), yerel URL'yi bu değişikliklerle güncellemek için tarayıcınızı yenileyin.

10. Firebase'i yükleme, yapılandırma ve başlatma

Bir uygulamanın Firebase ile çalışmasını sağlamak için uygulamanızda Firebase SDK'sı ve Firebase projenizde Firebase yapılandırması bulunmalıdır.

Bu codelab'in örnek kodu, uygulamada çeşitli Firebase ürünlerini kullanmak için gerekli tüm bağımlılıkları ve gerekli işlevleri içeren, çalışan bir uygulamadır. Yapılan işlemleri görmek için web/package.json ve web/src/index.js sürümlerine bakabilirsiniz.

Örnek kod çoğunlukla tamamlanmış olsa da uygulamanızın çalışması için Firebase SDK'sını yüklemek, derlemenizi başlatmak, Firebase yapılandırmasını uygulamanıza eklemek ve son olarak da Firebase'i başlatmak gibi bazı işlemler yapmanız gerekir.

Firebase SDK'sını yükleyin ve web paketi derlemenizi başlatın

Uygulamanızın derlemesini başlatmak için birkaç komut çalıştırmanız gerekiyor.

  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. Web paketini başlatmak için npm run start komutunu çalıştırın.

Codelab'in geri kalanında webpack artık kaynak kodunuzu sürekli olarak yeniden oluşturacak.

Firebase yapılandırmanızı uygulamanıza ekleyin

Ayrıca, Firebase SDK'larının hangi Firebase projesini kullanmak istediğinizi bilmesi için Firebase yapılandırmanızı uygulamanıza 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 üzerinden alın.

1. Seçenek: Firebase konsolundan yapılandırmayı alıp kod tabanınıza ekleyin

  1. Firebase konsolunda Proje ayarlarınıza gidin.
  2. Uygulamalarınız kartına ilerleyin ve web uygulamanızı seçin.
  3. Firebase SDK snippet'i bölmesinde Yapılandırma'yı 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 şekilde 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 aracılığıyla alın ve kod tabanınıza ekleyin

Alternatif olarak, Firebase yapılandırmanızı Terraform üzerinden KSA'da bir çıkış değeri olarak alabilirsiniz.

  1. main.tf dosyanızda, google_firebase_web_app kaynak blokunuzu (projenize bir web uygulaması kaydeden blok) bulun.
  2. Bu engellemenin hemen ardından 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 bloğu ve output bloğu, 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, örnek bir yapılandırma çıkışı verilmiştir. Yazdırılan çıkışınız, projenizin ve uygulamanızın değerlerini içerir.
      {
        "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 şekilde 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şlatın

Son olarak, Firebase'i başlatmak için uygulamanızın web/src/index.js dosyasına aşağıdakini ekleyin:

index.js

...

const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);

Uygulamanızı deneyin

Artık her şey Firebase için yapılandırıldığına göre işlevsel web uygulamanızı deneyebilirsiniz.

  1. Uygulamanızı sunmak için tarayıcıyı yenileyin.
  2. Artık Google ile oturum açabilir ve sohbette mesaj yayınlamaya başlayabilirsiniz. Resim dosyalarınız varsa bunları bile yükleyebilirsiniz!

11. Yapılandırmanızı ortamlar arasında çoğaltın

Terraform, benzer şekilde yapılandırılmış birden fazla altyapıyı (ör. üretim projesine benzer bir Firebase projesi oluşturma) yönetme konusunda uzmandır.

Bu codelab'de, hazırlık ortamı olacak ikinci bir Firebase projesi oluşturacaksınız.

Bu hazırlık projesini oluşturmak üzere mevcut bir yapılandırmayı çoğaltmak için iki seçeneğiniz vardır:

  • 1. Seçenek: Terraform yapılandırmasının bir kopyasını oluşturun.
    Bu seçenek, çoğaltılan projenin kaynak projeden ne kadar farklı olabileceği konusunda en yüksek esnekliği sunar.
  • 2. Seçenek: Yapılandırmaları for_each ile yeniden kullanma.
    Her projenin önemli ölçüde farklılık göstermemesi gerekiyorsa ve değişiklikleri aynı anda tüm projelere yaymak istiyorsanız bu seçenek, kodların daha fazla yeniden kullanılmasını sağlar.

1. Seçenek: Terraform yapılandırmasının bir kopyasını oluşturma

Bu seçenek, kopyalanan projenin kaynak projeden ne kadar farklı olabileceği (ör. farklı görünen adlara ve aşamalı sunumlara sahip uygulamalar) bulunması açısından en fazla esnekliği sunar.

  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ın ve main_staging.tf dosyanıza yapıştırın.
  3. Ardından hazırlık projenizde çalışmaları için main_staging.tf ürününde çoğaltılan kaynak bloklarınızın her birini değiştirmeniz gerekir:
    • Kaynak etiketleri: Çakışmayı önlemek için yeni bir ad kullanın. Örneğin, resource "google_project" "default" adını resource "google_project" "staging" olarak değiştirin.
    • Kaynak referansları: Her birini güncelleyin. Örneğin, google_firebase_project.default.project değerini google_firebase_project.staging.project olarak güncelleyin.
    ziyaret edin. main_staging.tf dosyasının tüm 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. main_staging-copypaste.tf hizmetinden yapılandırmayı kopyalayıp 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 (Kimlik Doğrulama'yı Terraform üzerinden 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.
    ziyaret edin. 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ırlık" ayarınızın temel hazırlığını yapmak için terraform apply komutunu çalıştırın Firebase projesi ve tüm kaynakları ile hizmetlerini etkinleştirebilir.
  5. Daha önce olduğu gibi Firebase konsolunda kontrol ederek her şeyin beklendiği gibi yapıldığını ve etkinleştirildiğini doğrulayın.

2. Seçenek: Yapılandırmaları for_each ile yeniden kullanma

Bu seçenek, projelerin önemli ölçüde farklılık göstermemesi gerekiyorsa ve değişiklikleri aynı anda tüm projelere yaymak istiyorsanız kodların daha fazla yeniden kullanılmasını sağlar. Terraform dilindeki for_each meta bağımsız değişkenini kullanır.

  1. main.tf dosyanızı açın.
  2. Çoğaltmak istediğiniz her kaynak bloğuna bir for_each meta bağımsız değişkeni ekleyin. Örneğin:

    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 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. main-foreach.tf hizmetinden yapılandırmayı kopyalayıp 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 (Kimlik Doğrulama'yı Terraform üzerinden 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 mevcut altyapıya kıyasla bu yapılandırmayı nasıl yorumladığıyla ilgili birkaç noktanın anlaşılması ve düzeltilmesi ö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 proje Terraform olarak bilinir:
      google_project.default
      google_firebase_project.default
      google_firebase_android_app.default
      
    2. Mevcut durumda Terraform'un hangi işlemleri gerçekleştireceğini görmek için terraform plan komutunu çalıştırın.

      Çıktıda, Terraform'un bu codelab'in ilk bölümünde oluşturduğunuz projeyi sileceği ve iki yeni proje oluşturacağı gösterilecektir. 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 amacıyla google_firebase_project, google_firebase_web_app ve main.tf dosyanızdaki diğer tüm kaynak blokları için terraform state mv komutunu çalıştırın.
    5. Artık terraform plan uygulamasını tekrar çalıştırırsanız Terraform'un bu codelab'in ilk bölümünde oluşturduğunuz projeyi sileceği görünmeyecektir.
  4. Yeni "hazırlık" ayarınızın temel hazırlığını yapmak için terraform apply komutunu çalıştırın Firebase projesi ve tüm kaynakları ile hizmetlerini etkinleştirebilir.
  5. Daha önce olduğu gibi Firebase konsolunda kontrol ederek her şeyin beklendiği gibi yapıldığını ve etkinleştirildiğini doğrulayın.

12. Ek adım: Hazırlık ve üretim uygulamalarınızı dağıtma

  1. Uygulamanızın kod tabanında, bunun yerine hazırlık projenizdeki Firebase yapılandırmasını kullanmak üzere firebase-config.js değerini 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ı olan Firebase yapılandırmanızı uygulamanıza ekleme bölümüne göz atın.
  2. Uygulamanızı, hazırlıktaki Firebase projenize dağıtmak için web dizininizin kök dizininde aşağıdaki komutu çalıştırın.
    firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
    
  3. Hazırlık uygulamanızı tarayıcıda firebase deploy çıkışında yazdırılan URL ile 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şim kurarken Firebase konsolundaki hazırlık projenizde veriler ve resimler görürsünüz.
  4. Uygulamanızı hazırlık aşamasında test ettikten sonra firebase-config.js öğesini tekrar üretim projesinin Firebase yapılandırmasını (bu codelab'de oluşturduğunuz ilk proje) kullanacak şekilde değiştirin.
  5. Uygulamanızı, üretim Firebase projenize dağıtmak için web dizininizin kök dizininde aşağıdaki komutu çalıştırın.
    firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
    
  6. Üretim uygulamanızı, firebase deploy çıktısında yazdırılan URL aracılığıyla tarayıcıda açın. Oturum açmayı, mesaj göndermeyi ve resim yüklemeyi deneyin.

    Firebase konsolundaki üretim projenizde veriler ve resimler göreceksiniz.
  7. Bu codelab'deki iki uygulamayla etkileşimi tamamladığınızda Firebase'in bunları sunmasını 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ı bir sohbet web uygulaması 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ına yönelik en iyi uygulamalardan yararlandınız.

İşlediğimiz konular

  • Bulut kaynaklarını yönetmek için Terraform CLI'ı kullanma
  • Firebase ürünlerini (Kimlik Doğrulama, 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 bir web uygulamasına aktarma
  • Bir yapılandırmayı birden fazla ortamda kopyalamak için Terraform'u kullanma

Firebase ve Terraform hakkında daha fazla bilgi için belgelerimizi inceleyin. Terraform desteği sunan tüm Firebase ürünlerinin listesini, yaygın kullanım alanları için örnek Terraform yapılandırmalarını, faydalı sorun giderme ve SSS bölümünü burada bulabilirsiniz.