Menyiapkan dan mengelola project serta produk Firebase melalui Terraform

1. Pengantar

Sasaran

Anda dapat menggunakan Terraform untuk menyiapkan dan mengelola project Firebase, termasuk konfigurasi infrastruktur terprogram dan produk Firebase.

Codelab ini pertama menjelaskan cara membangun file konfigurasi Terraform untuk membuat project Firebase baru, diikuti dengan cara mengonfigurasi aplikasi dan produk Firebase yang ingin Anda gunakan dalam project tersebut. Kami juga membahas dasar-dasar command line Terraform, seperti melihat pratinjau perubahan yang akan dibuat, lalu menerapkannya.

Jika Anda ingin mempelajari cara menyiapkan dan mengelola project dan produk Firebase dengan Terraform, codelab ini cocok untuk Anda.

Yang akan Anda pelajari

  • Cara membuat file konfigurasi Terraform (*.tf)
  • Cara menggunakan perintah CLI Terraform untuk mengelola infrastruktur
  • Cara mengubah konfigurasi untuk mengupdate resource dan layanan
  • Cara menerapkan konfigurasi Anda di aplikasi web sungguhan (disebut Friendly Chat)
  • Cara menentukan konfigurasi paralel (dan sinkron) di berbagai lingkungan (produksi, staging, dll.)

Yang Anda butuhkan

Agar berhasil menyelesaikan codelab ini, Anda memerlukan kecakapan dasar dalam Terraform dan terminologinya, termasuk prasyarat berikut:

Codelab ini menyediakan aplikasi contoh yang sebenarnya sehingga Anda dapat menguji dan berinteraksi dengan apa yang Anda sediakan melalui Terraform. Untuk melakukannya, Anda memerlukan hal berikut:

  • Kode contoh untuk aplikasi web - download kode ini pada langkah codelab berikutnya
  • Pengelola paket npm (yang biasanya disertakan dengan Node.js) - instal alat ini
  • Firebase CLI - instal CLI ini dan login

2. Mendapatkan kode awal

Dalam codelab ini, Anda dapat menguji apa yang Anda sediakan melalui Terraform dengan aplikasi web sungguhan. Sebaiknya lakukan hal ini agar Anda dapat memahami semua langkah yang diperlukan untuk menggunakan resource yang disediakan Terraform.

Clone repositori GitHub codelab dari command line:

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

Atau, jika belum menginstal git, Anda dapat mendownload repositori sebagai file ZIP.

3. Membuat konfigurasi Terraform

Penyiapan Terraform

  1. Di codebase aplikasi contoh yang didownload, buka root direktori web.
  2. Di root direktori tersebut, buat file konfigurasi Terraform bernama main.tf dengan penyiapan awal berikut:

    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
    }
    

Setiap penyedia google-beta memiliki atribut bernama user_project_override yang menentukan cara operasi dari Terraform akan diperiksa kuotanya. Untuk menyediakan sebagian besar resource, Anda harus menggunakan user_project_override = true, yang berarti memeriksa kuota terhadap project Firebase Anda sendiri. Namun, untuk menyiapkan project baru agar dapat menerima pemeriksaan kuota, Anda harus menggunakan user_project_override=false terlebih dahulu. Sintaksis alias Terraform memungkinkan Anda membedakan antara dua penyiapan penyedia di langkah berikutnya dalam codelab ini.

Melakukan inisialisasi Terraform di direktori

Membuat konfigurasi baru untuk pertama kalinya memerlukan download penyedia yang ditentukan dalam konfigurasi.

Untuk melakukan inisialisasi ini, jalankan perintah berikut dari root direktori yang sama dengan file konfigurasi main.tf Anda:

terraform init

4. Membuat project Firebase melalui Terraform

Untuk "membuat project Firebase", penting untuk diingat bahwa setiap project Firebase sebenarnya adalah project Google Cloud, hanya dengan layanan Firebase yang diaktifkan.

Menambahkan blok untuk project dan API Google Cloud yang mendasarinya

  1. Pertama, sediakan project Google Cloud yang mendasarinya.

    Pada file konfigurasi main.tf, tambahkan blok resource berikut.

    Anda harus menentukan nama project sendiri (seperti "Terraform FriendlyChat Codelab") dan project ID Anda sendiri (seperti "terraform-codelab-your-initials"). Perhatikan bahwa nilai name hanya digunakan dalam antarmuka Firebase dan tidak terlihat oleh pengguna akhir. Namun, nilai project_id secara unik mengidentifikasi project Anda ke Google, jadi pastikan Anda menentukan nilai yang unik. 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. Selanjutnya, Anda perlu mengaktifkan API dasar yang diperlukan: Service Usage API dan Firebase Management API.

    Pengaktifan API ini biasanya ditangani di balik layar saat Anda menggunakan Firebase console untuk membuat project Firebase, tetapi Terraform harus diberi tahu secara eksplisit untuk melakukan pengaktifan ini.

    Ke file konfigurasi main.tf (tepat di bawah blok yang membuat project Cloud baru), tambahkan blok resource berikut:

    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
    }
    
    Dengan mengaktifkan Service Usage API, project baru Anda akan dapat menerima pemeriksaan kuota. Jadi, untuk semua penyediaan resource dan pengaktifan layanan berikutnya, Anda harus menggunakan penyedia dengan user_project_override (tidak perlu alias).

Menambahkan blok untuk mengaktifkan layanan Firebase

Hal terakhir yang diperlukan untuk "membuat project Firebase" adalah mengaktifkan layanan Firebase di project.

Melanjutkan di file konfigurasi main.tf, tambahkan blok resource berikut.

Seperti yang disebutkan di atas, perhatikan bahwa blok resource ini menggunakan penyedia dengan user_project_override (tidak diperlukan alias).

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,
  ]
}

Di blok resource di atas, Anda mungkin melihat klausa depends_on, yang memberi tahu Terraform untuk menunggu API yang mendasarinya diaktifkan. Tanpa klausul ini, Terraform tidak mengetahui dependensi dan dapat mengalami error saat menyediakan resource secara paralel.

Terapkan konfigurasi:

  1. Untuk menyediakan resource baru dan mengaktifkan API yang ditentukan dalam file konfigurasi, jalankan perintah berikut dari root direktori yang sama dengan file main.tf Anda (yang seharusnya web):
    terraform apply
    
  2. Di terminal, Terraform akan mencetak rencana tindakan yang akan dilakukannya.

    Jika semuanya terlihat seperti yang diharapkan, setujui tindakan dengan memasukkan yes.

    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 # <----
    

Perhatikan bahwa jika Anda hanya perlu melihat pratinjau perubahan tanpa menerapkannya, Anda dapat menggunakan perintah terraform plan.

Memvalidasi perubahan

Setelah Terraform selesai berjalan, Anda dapat memeriksa status semua resource dan layanan yang disediakan Terraform yang diaktifkan dengan menjalankan perintah berikut:

terraform show

Berikut adalah contoh yang akan Anda lihat dicetak. Status Anda akan berisi nilai spesifik untuk project Anda.

# 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"
}

Atau, Anda dapat memverifikasi bahwa project telah dibuat dengan melihatnya di Firebase console.

Project Codelab Terraform FriendlyChat yang dipilih di Firebase console

5. Mendaftarkan aplikasi Firebase melalui Terraform

Untuk menggunakan Firebase, Anda harus mendaftarkan setiap varian platform aplikasi Anda di project Firebase. Dalam codelab ini, Anda akan menggunakan aplikasi sungguhan untuk menguji dan berinteraksi dengan apa yang Anda sediakan melalui Terraform. Aplikasi ini adalah aplikasi web, jadi Anda perlu memberi tahu Terraform untuk mendaftarkan Aplikasi Web Firebase dalam project Firebase yang baru dibuat.

Menambahkan blok untuk mendaftarkan aplikasi web

Untuk mendaftarkan aplikasi web di project Firebase, tambahkan file main.tf dengan blok resource berikut.

Anda perlu menentukan display_name sendiri untuk aplikasi web Anda. Perhatikan bahwa nama ini hanya digunakan dalam antarmuka Firebase dan tidak terlihat oleh pengguna akhir.

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"
}

Terapkan konfigurasi:

  1. Untuk menyediakan resource baru, jalankan perintah berikut dari root direktori yang sama dengan file main.tf Anda (yang seharusnya web).
    terraform apply
    
    Perhatikan bahwa perintah ini tidak akan membuat ulang project Google Cloud baru. Terraform akan mendeteksi bahwa project dengan project ID yang ditentukan sudah ada dan akan membandingkan status project saat ini dengan yang ada dalam file .tf dan membuat perubahan apa pun yang ditemukannya.
  2. Tinjau rencana tindakan yang dicetak. Jika semuanya terlihat seperti yang diharapkan, ketik yes, lalu tekan Enter untuk menyetujui tindakan.

Memvalidasi perubahan

Anda dapat memeriksa status resource yang baru disediakan dengan menjalankan perintah berikut:

terraform show

Atau, Anda dapat memverifikasi bahwa aplikasi berhasil didaftarkan di project Anda dengan melihatnya di Firebase console. Buka Project settings, lalu scroll ke bawah ke bagian Your apps.

6. Menyiapkan Firebase Authentication

Autentikasi adalah bagian penting dari aplikasi apa pun. Untuk mengizinkan pengguna akhir login ke aplikasi web Anda dengan Akun Google mereka, Anda dapat mengaktifkan Firebase Authentication dan menyiapkan metode login dengan Google.

Perhatikan bahwa dalam codelab ini, kami menyediakan dua opsi berbeda untuk menyiapkan Firebase Authentication:

  • Opsi 1 (Direkomendasikan): Siapkan Firebase Authentication di konsol, yang tidak memerlukan GCIP.
    • Dengan menggunakan opsi ini, Anda tidak perlu mengaitkan project baru dengan akun Penagihan Cloud.
  • Opsi 2: Siapkan Firebase Authentication melalui Terraform menggunakan API Google Cloud Identity Platform (GCIP).
    • Menggunakan opsi ini berarti Anda harus mengaitkan project baru dengan akun Penagihan Cloud karena GCIP mewajibkan project menggunakan paket harga Blaze.

Opsi 1: Menyiapkan Authentication menggunakan Firebase console

Untuk menyiapkan Firebase Authentication menggunakan Firebase console, project Anda tidak perlu menggunakan paket harga Blaze.

Berikut cara menyiapkan Firebase Authentication dan login dengan Google:

  1. Di Firebase console, temukan bagian Build di panel kiri.
  2. Klik Autentikasi, klik Mulai, lalu klik tab Metode login (atau klik di sini untuk langsung membukanya).
  3. Klik Tambahkan penyedia baru, lalu dari bagian Penyedia tambahan, pilih Google.
  4. Aktifkan tombol Aktifkan.
  5. Tetapkan nama aplikasi yang ditampilkan kepada publik ke sesuatu seperti FriendlyChat (nama ini tidak harus unik secara global).
  6. Pilih Email dukungan project dari menu dropdown, lalu klik Simpan.Mengonfigurasi Firebase Auth di Firebase console
  7. Anda akan melihat Google sebagai penyedia login yang diaktifkan.Halaman Authentication di Firebase console: Login dengan Google diaktifkan

Opsi 2: Menyiapkan Autentikasi melalui Terraform menggunakan API Google Cloud Identity Platform (GCIP)

Untuk menyiapkan Firebase Authentication melalui Terraform, Anda harus menggunakan GCIP API, yang berarti project harus menggunakan paket harga Blaze. Anda mengupgrade project Firebase untuk menggunakan paket Blaze dengan mengaitkan akun Penagihan Cloud dengan project.

Mengaktifkan penagihan melalui Terraform

  1. Jika Anda belum memiliki akun Layanan Penagihan Cloud, langkah pertamanya adalah membuat akun baru di Konsol Google Cloud. Saat Anda melakukannya, catat ID Akun penagihannya. ID Akun penagihan dapat ditemukan di halaman Billing di ID akun penagihan yang terkait dengan project Anda.Mengaktifkan akun penagihan menggunakan Konsol Google Cloud
  2. Untuk mengaktifkan penagihan di project Anda melalui Terraform, tambahkan atribut billing_account ke resource google_project yang ada di file main.tf Anda:

    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"
      }
    }
    
    ...
    

Mengaktifkan Firebase Authentication dan login dengan Google melalui Terraform

  1. Untuk menyediakan Firebase Authentication dengan GCIP, tambahkan file main.tf dengan blok resource berikut:

    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. Untuk mengaktifkan login dengan Google, Anda harus memiliki klien OAuth. Buka bagian APIs & Services di Konsol Google Cloud untuk melakukan penyiapan ini.
  3. Karena ini adalah pertama kalinya Anda membuat client ID untuk project ini, Anda perlu mengonfigurasi layar izin OAuth.
    1. Buka halaman OAuth consent screen, lalu pilih project yang baru saja Anda buat.
    2. Tetapkan Jenis Pengguna ke Eksternal, lalu klik Buat.
    3. Di layar berikutnya, selesaikan langkah-langkah berikut, lalu klik Simpan dan lanjutkan.
      • Tetapkan Nama aplikasi aplikasi Anda yang ditampilkan kepada publik menjadi sesuatu seperti FriendlyChat (tidak perlu unik secara global).
      • Pilih Email dukungan pengguna dari menu dropdown.
      • Masukkan email untuk Informasi kontak developer.
    4. Pada layar berikutnya, selesaikan langkah-langkah berikut:
      • Terima setelan default di halaman Cakupan, lalu klik Simpan dan Lanjutkan.
      • Terima setelan default di halaman Test users, lalu klik Save and Continue.
      • Tinjau ringkasan, lalu klik Kembali ke dasbor.
      Mengonfigurasi klien OAuth2 menggunakan Konsol Google Cloud
  4. Siapkan klien OAuth di halaman Credentials dengan melakukan hal berikut:
    1. Klik Create credentials, lalu pilih OAuth client ID.
    2. Dari drop-down Application type, pilih Web application.
    3. Di kolom Name, masukkan nama aplikasi Anda, misalnya FriendlyChat (nama ini tidak harus unik secara global).
    4. Izinkan URL aplikasi Anda menggunakan klien OAuth ini, dengan menetapkan hal berikut:
      • Di bagian Asal JavaScript resmi, klik Tambahkan URI, lalu masukkan
        https://<PROJECT_ID>.firebaseapp.com, dengan <PROJECT_ID> adalah ID project yang Anda tetapkan di main.tf.
      • Di bagian Authorized redirect URIs, klik Add URI dan masukkan
        https://<PROJECT_ID>.firebaseapp.com/__/auth/handler, dengan <PROJECT_ID> adalah project ID yang Anda tetapkan di main.tf.
    5. Klik Save.
    Mendapatkan client ID dan secret OAuth2 dari halaman Kredensial konsol Google Cloud
  5. Untuk mengaktifkan login dengan Google menggunakan client ID OAuth dan rahasia klien, tambahkan file main.tf Anda dengan blok berikut:

    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
      ]
    }
    

Terapkan konfigurasi:

  1. Untuk menyiapkan Autentikasi sesuai dengan konfigurasi Anda, jalankan perintah berikut dari root direktori yang sama dengan file main.tf Anda (yang seharusnya web):
    export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
    
    terraform apply
    
    Perhatikan bahwa menjalankan terraform apply tidak akan membuat ulang project Google Cloud baru. Terraform akan mendeteksi bahwa project dengan project ID yang ditentukan sudah ada dan akan membandingkan status project saat ini dengan yang ada di file .tf. Kemudian, alat ini akan membuat perubahan apa pun yang ditemukan.
  2. Tinjau rencana tindakan yang dicetak. Jika semuanya terlihat seperti yang diharapkan, ketik yes, lalu tekan Enter untuk menyetujui tindakan.

Memvalidasi perubahan

  1. Di Firebase console, cari bagian Build di panel kiri.
  2. Klik Autentikasi, lalu klik tab Metode login (atau klik di sini untuk langsung membukanya).
  3. Anda akan melihat Google sebagai penyedia login yang diaktifkan.Halaman Authentication di Firebase console: Login dengan Google diaktifkan

7. Menyiapkan database Firestore dan Aturan Keamanannya

Untuk aplikasi web codelab ini, Anda akan menyimpan pesan di antara pengguna akhir dalam database Firestore.

  1. Untuk mengaktifkan API yang diperlukan dan menyediakan instance database, tambahkan file main.tf dengan blok resource berikut:

    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. Ubah <NAME_OF_DESIRED_REGION> ke region tempat Anda ingin database berada.

    Saat mengembangkan aplikasi produksi, sebaiknya tempatkan aplikasi di region yang dekat dengan sebagian besar pengguna dan sama dengan layanan Firebase lainnya, seperti Cloud Functions. Untuk codelab ini, Anda dapat menggunakan us-east1 (South Carolina) atau menggunakan region terdekat dengan Anda (lihat lokasi Cloud Firestore).
  3. Setiap instance database Firestore yang dapat diakses oleh Firebase harus dilindungi oleh Aturan Keamanan Firebase.

    Kode contoh codelab ini menyediakan kumpulan aturan Firestore yang aman dalam file firestore.rules, yang dapat Anda temukan di root direktori web.
  4. Tambahkan file main.tf dengan blok resource berikut untuk melakukan hal berikut:
    • Buat kumpulan aturan Aturan Keamanan Firebase dari file firestore.rules lokal.
    • Rilis kumpulan aturan untuk instance Firestore.
    Perhatikan bahwa blok resource ini melakukan tindakan yang setara dengan mengklik tombol Publish di Firebase console atau menjalankan firebase deploy --only firestore:rules.

    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. Jalankan terraform apply untuk menyediakan database Firestore dan men-deploy aturan keamanannya.
  6. Pastikan database telah disediakan dan aturan keamanannya telah di-deploy:
    1. Di Firebase console, temukan bagian Build di panel kiri.
    2. Buka bagian Firestore Database, lalu klik tab Rules.
    Memverifikasi aturan Cloud Firestore menggunakan Firebase console

8. Menyiapkan bucket Cloud Storage dan Aturan Keamanannya

Untuk aplikasi web codelab ini, Anda akan menyimpan gambar yang dibagikan di antara pengguna akhir dalam bucket Cloud Storage.

  1. Untuk mengaktifkan API yang diperlukan dan menyediakan bucket default Cloud Storage, tambahkan file main.tf dengan blok resource berikut.

    Perhatikan bahwa bucket Cloud Storage default untuk project Anda disediakan melalui Google App Engine dan harus memiliki lokasi yang sama dengan database Firestore Anda. Lihat Lokasi App Engine untuk informasi selengkapnya.

    Jika Anda menginginkan beberapa bucket di project, penyediakan menggunakan resource google_storage_bucket (tidak ditampilkan dalam codelab ini).

    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. Setiap bucket Cloud Storage yang dapat diakses oleh Firebase harus dilindungi oleh Aturan Keamanan Firebase.

    Kode contoh codelab ini menyediakan kumpulan aturan Firestore yang aman dalam file storage.rules, yang dapat Anda temukan di root direktori web.
  3. Tambahkan file main.tf Anda dengan blok resource berikut untuk melakukan hal berikut:
    • Buat kumpulan aturan Aturan Keamanan Firebase dari file lokal.
    • Merilis kumpulan aturan untuk bucket Storage.
    Perhatikan bahwa blok resource ini melakukan tindakan yang setara dengan mengklik tombol Publish di Firebase console atau menjalankan firebase deploy --only storage.

    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. Jalankan terraform apply untuk menyediakan bucket Cloud Storage default dan men-deploy aturan keamanannya.
  5. Pastikan bucket disediakan dan aturan keamanannya di-deploy:
    1. Di Firebase console, temukan bagian Build di panel kiri.
    2. Buka bagian Storage, lalu klik tab Rules.
    Memverifikasi aturan keamanan menggunakan Firebase console

9. Menjalankan aplikasi secara lokal

Kini Anda siap menjalankan aplikasi web untuk pertama kalinya! Anda akan menggunakan emulator Firebase Hosting untuk menayangkan aplikasi secara lokal.

  1. Buka jendela terminal baru dan, dari direktori web, jalankan perintah Firebase CLI berikut untuk memulai emulator:
    firebase emulators:start --project=<PROJECT_ID>
    
  2. Di browser, buka aplikasi web di URL lokal yang ditampilkan oleh CLI (biasanya http://localhost:5000).

Anda akan melihat UI aplikasi FriendlyChat, yang belum berfungsi. Aplikasi belum terhubung ke Firebase, tetapi dengan menyelesaikan langkah-langkah berikutnya di codelab ini, aplikasi akan terhubung.

Perhatikan bahwa setiap kali Anda membuat perubahan pada aplikasi web (seperti yang akan Anda lakukan pada langkah berikut di codelab ini), muat ulang browser Anda untuk memperbarui URL lokal dengan perubahan tersebut.

10. Menginstal, mengonfigurasi, dan melakukan inisialisasi Firebase

Agar aplikasi berfungsi dengan Firebase, aplikasi Anda memerlukan Firebase SDK dan konfigurasi Firebase untuk project Firebase.

Kode contoh untuk codelab ini sudah merupakan aplikasi yang berfungsi dengan semua dependensi dan fungsi yang diperlukan untuk menggunakan berbagai produk Firebase di aplikasi. Anda dapat melihat web/package.json dan web/src/index.js jika ingin mengetahui hal yang telah dilakukan.

Meskipun sebagian besar kode contoh sudah lengkap, Anda masih perlu melakukan beberapa hal untuk menjalankan aplikasi, termasuk: menginstal Firebase SDK, memulai build, menambahkan konfigurasi Firebase ke aplikasi, dan terakhir melakukan inisialisasi Firebase.

Menginstal Firebase SDK dan memulai build webpack

Anda perlu menjalankan beberapa perintah untuk memulai build aplikasi.

  1. Buka jendela terminal baru.
  2. Pastikan Anda berada di root direktori web.
  3. Jalankan npm install untuk mendownload Firebase SDK.
  4. Jalankan npm update untuk mengupdate dependensi apa pun.
  5. Jalankan npm run start untuk memulai webpack.

Untuk codelab lainnya, webpack kini akan terus mem-build ulang kode sumber Anda.

Menambahkan konfigurasi Firebase ke aplikasi

Anda juga perlu menambahkan konfigurasi Firebase ke aplikasi agar Firebase SDK mengetahui project Firebase yang Anda inginkan untuk digunakan oleh mereka.

Untuk codelab ini, Anda memiliki dua opsi berbeda untuk mendapatkan konfigurasi Firebase:

  • Opsi 1: Dapatkan konfigurasi Firebase dari Firebase console.
  • Opsi 2: Dapatkan konfigurasi Firebase Anda melalui Terraform.

Opsi 1: Dapatkan konfigurasi dari Firebase console dan tambahkan ke codebase Anda

  1. Di Firebase console, buka Project settings.
  2. Scroll ke bawah ke kartu Your apps, lalu pilih aplikasi web Anda.
  3. Pilih Config dari panel cuplikan Firebase SDK, lalu salin cuplikan konfigurasi.
  4. Tempelkan konfigurasi Anda ke dalam file web/src/firebase-config.js aplikasi, seperti ini:

    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>",
    };
    
    ...
    

Opsi 2: Dapatkan konfigurasi melalui Terraform dan tambahkan ke codebase Anda

Atau, Anda bisa mendapatkan konfigurasi Firebase melalui Terraform sebagai nilai output di CLI.

  1. Dalam file main.tf, temukan blok resource google_firebase_web_app (blok yang mendaftarkan aplikasi web dengan project Anda).
  2. Segera setelah blok tersebut, tambahkan blok berikut:

    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. Karena blok data dan output tidak dimaksudkan untuk memodifikasi infrastruktur dengan cara apa pun, Anda hanya perlu menjalankan perintah berikut.
    1. Untuk memuat konfigurasi Firebase aplikasi web Anda ke status Terraform direktori Anda, jalankan perintah ini:
      terraform refresh
      
    2. Untuk mencetak nilai konfigurasi Firebase, jalankan perintah ini:
      terraform output –json
      
      Berikut adalah contoh output konfigurasi. Hasil cetak akan berisi nilai project dan aplikasi Anda.
      {
        "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. Salin nilai dari dalam peta value.
  5. Tempelkan nilai ini (konfigurasi Anda) ke dalam file web/src/firebase-config.js aplikasi, seperti berikut:

    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",
    };
    
    ...
    

Melakukan inisialisasi Firebase di aplikasi

Terakhir, untuk melakukan inisialisasi Firebase, tambahkan file web/src/index.js aplikasi Anda dengan kode berikut:

index.js

...

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

Mencoba aplikasi

Sekarang setelah semuanya dikonfigurasi untuk Firebase, Anda dapat mencoba aplikasi web fungsional Anda.

  1. Muat ulang browser yang menayangkan aplikasi Anda.
  2. Sekarang Anda dapat login dengan Google dan mulai memposting pesan ke chat. Jika memiliki file gambar, Anda bahkan dapat menguploadnya.

11. Mereplikasi konfigurasi Anda di seluruh lingkungan

Terraform unggul dalam mengelola beberapa infrastruktur yang dikonfigurasi serupa (misalnya, menyiapkan project Firebase staging yang mirip dengan project produksi).

Dalam codelab ini, Anda akan membuat project Firebase kedua sebagai lingkungan staging.

Untuk mereplikasi konfigurasi yang ada guna membuat project staging ini, Anda memiliki dua opsi:

  • Opsi 1: Buat salinan konfigurasi Terraform.
    Opsi ini menawarkan fleksibilitas terbesar terkait seberapa besar perbedaan antara project replika dan project sumber.
  • Opsi 2: Menggunakan kembali konfigurasi dengan for_each.
    Opsi ini menawarkan lebih banyak penggunaan kembali kode jika setiap project tidak boleh berbeda secara signifikan dan Anda ingin menyebarkan perubahan ke semua project sekaligus.

Opsi 1: Buat salinan konfigurasi Terraform

Opsi ini menawarkan fleksibilitas paling besar untuk seberapa banyak project yang direplikasi dapat berbeda dari project sumber, seperti memiliki aplikasi dengan nama tampilan dan peluncuran bertahap yang berbeda.

  1. Di root direktori web, buat file konfigurasi Terraform baru bernama main_staging.tf.
  2. Salin semua blok resource dari file main.tf (kecuali blok terraform dan provider), lalu tempelkan ke dalam file main_staging.tf.
  3. Anda kemudian perlu memodifikasi setiap blok resource replika di main_staging.tf agar dapat berfungsi dengan project staging Anda:
    • Label resource: Gunakan nama baru untuk menghindari konflik. Misalnya, ganti nama resource "google_project" "default" menjadi resource "google_project" "staging".
    • Referensi resource: Perbarui setiap referensi. Misalnya, perbarui google_firebase_project.default.project ke google_firebase_project.staging.project.
    Anda dapat menemukan konfigurasi lengkap dari file main_staging.tf di repositori GitHub codelab ini:

    web/terraform-checkpoints/replicate-config/main_staging-copypaste.tf

    Jika ingin menggunakan konfigurasi ini, pastikan Anda melakukan hal berikut:
    1. Salin konfigurasi dari main_staging-copypaste.tf, lalu tempelkan ke file main_staging.tf Anda.
    2. Di file main_staging.tf Anda, lakukan hal berikut:
      • Di blok resource google_project, perbarui atribut name, atribut project-id, dan (jika Anda menyiapkan Autentikasi melalui Terraform) atribut billing_account dengan nilai Anda sendiri.
      • Di blok resource google_firebase_web_app, perbarui atribut display_name dengan nilai Anda sendiri.
      • Di blok resource google_firestore_database dan google_app_engine_application, perbarui atribut location_id dengan nilai Anda sendiri.
    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. Jalankan terraform apply untuk menyediakan "staging" baru Project Firebase dan semua resource-nya serta mengaktifkan layanannya.
  5. Pastikan semuanya telah disediakan dan diaktifkan seperti yang diharapkan dengan memeriksanya di Firebase console seperti sebelumnya.

Opsi 2: Menggunakan kembali konfigurasi dengan for_each

Opsi ini menawarkan lebih banyak penggunaan kembali kode jika setiap project tidak akan berbeda secara signifikan dan Anda ingin menerapkan perubahan ke semua project sekaligus. Fungsi ini menggunakan argumen meta for_each dalam bahasa Terraform.

  1. Buka file main.tf.
  2. Tambahkan meta-argumen for_each ke setiap blok resource yang ingin direplikasi, seperti ini:

    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.
    
    Anda dapat menemukan konfigurasi lengkap file main.tf yang menggunakan meta-argumen for_each di repositori GitHub codelab ini:

    web/terraform-checkpoints/replicate-config/main-foreach.tf

    Jika ingin menggunakan konfigurasi ini, pastikan Anda melakukan hal berikut:
    1. Salin konfigurasi dari main-foreach.tf, lalu tempelkan ke file main.tf Anda.
    2. Di file main.tf Anda, lakukan hal berikut:
      • Di blok resource google_project, perbarui atribut name, atribut project-id, dan (jika Anda menyiapkan Autentikasi melalui Terraform) atribut billing_account dengan nilai Anda sendiri.
      • Di blok resource google_firebase_web_app, perbarui atribut display_name dengan nilai Anda sendiri.
      • Di blok resource google_firestore_database dan google_app_engine_application, perbarui atribut location_id dengan nilai Anda sendiri.
  3. Daripada langsung menerapkan konfigurasi ini, sebaiknya pahami dan perbaiki beberapa hal tentang cara Terraform menafsirkan konfigurasi ini dibandingkan dengan infrastruktur yang ada.
    1. Saat ini, jika Anda menerapkan konfigurasi ini yang menggunakan for_each, alamat resource akan terlihat seperti berikut:
      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"]
      
      Namun, project yang ada yang Anda buat di bagian pertama codelab ini diketahui oleh Terraform sebagai berikut:
      google_project.default
      google_firebase_project.default
      google_firebase_android_app.default
      
    2. Jalankan terraform plan untuk melihat tindakan yang akan dilakukan Terraform berdasarkan status saat ini.

      Output akan menunjukkan bahwa Terraform akan menghapus project yang Anda buat di bagian pertama codelab ini dan membuat dua project baru. Hal ini karena Terraform tidak mengetahui bahwa project di alamat google_project.default telah dipindahkan ke alamat baru google_project.default["prod"].
    3. Untuk memperbaikinya, jalankan perintah terraform state mv:
      terraform state mv "google_project.default" "google_project.default[\"prod\"]"
      
    4. Demikian pula, untuk memperbaiki semua blok resource lainnya, jalankan terraform state mv untuk google_firebase_project, google_firebase_web_app, dan semua blok resource lainnya dalam file main.tf Anda.
    5. Sekarang, jika Anda menjalankan terraform plan lagi, Terraform tidak akan menampilkan bahwa Terraform akan menghapus project yang Anda buat di bagian pertama codelab ini.
  4. Jalankan terraform apply untuk menyediakan project Firebase "staging" baru beserta semua resource-nya dan mengaktifkan layanannya.
  5. Pastikan semuanya telah disediakan dan diaktifkan seperti yang diharapkan dengan memeriksanya di Firebase console seperti sebelumnya.

12. Langkah bonus: Deploy aplikasi staging dan produksi Anda

  1. Di codebase aplikasi, ubah firebase-config.js untuk menggunakan konfigurasi Firebase dari project staging Anda.

    Untuk mengingat cara mendapatkan konfigurasi Firebase dan menambahkannya ke aplikasi, lihat langkah sebelumnya di codelab ini, Menambahkan konfigurasi Firebase ke aplikasi.
  2. Di root direktori web Anda, jalankan perintah berikut untuk men-deploy aplikasi ke project Firebase staging.
    firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
    
  3. Buka aplikasi staging di browser melalui URL yang dicetak dalam output firebase deploy. Coba login, kirim pesan, dan upload gambar.

    Saat Anda men-deploy aplikasi ke project Firebase, aplikasi tersebut menggunakan resource Firebase sungguhan, bukan resource yang diemulasi. Saat berinteraksi dengan aplikasi staging, Anda akan melihat data dan gambar muncul di project staging di Firebase console.
  4. Setelah menguji aplikasi Anda dalam staging, ubah kembali firebase-config.js agar menggunakan konfigurasi Firebase project produksi (project pertama yang Anda buat di codelab ini).
  5. Di root direktori web Anda, jalankan perintah berikut untuk men-deploy aplikasi ke project Firebase produksi.
    firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
    
  6. Buka aplikasi produksi di browser melalui URL yang dicetak dalam output firebase deploy. Coba login, kirim pesan, dan upload gambar.

    Anda akan melihat data dan gambar muncul di project produksi di Firebase console.
  7. Setelah selesai berinteraksi dengan kedua aplikasi tersebut untuk codelab ini, Anda dapat menghentikan Firebase agar tidak menyajikannya. Jalankan perintah berikut untuk setiap project Anda:
    firebase hosting:disable --project=<STAGING_PROJECT_ID>
    
    firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
    

13. Selamat!

Anda telah menggunakan Terraform untuk mengonfigurasi aplikasi web chat real-time. Dan Anda telah mengikuti praktik terbaik untuk lingkungan pengembangan dengan membuat project Firebase terpisah untuk staging dan produksi.

Yang telah kita bahas

  • Menggunakan Terraform CLI untuk mengelola resource cloud
  • Menggunakan Terraform untuk mengonfigurasi produk Firebase (Authentication, Firestore, Cloud Storage, dan Security Rules)
  • Menjalankan dan menguji aplikasi web secara lokal menggunakan Firebase Local Emulator Suite
  • Mengimpor Firebase ke aplikasi web
  • Menggunakan Terraform untuk mereplikasi konfigurasi di beberapa lingkungan

Untuk mengetahui informasi selengkapnya tentang Firebase dan Terraform, buka dokumentasi kami. Anda dapat menemukan daftar semua produk Firebase dengan dukungan Terraform, contoh konfigurasi Terraform untuk kasus penggunaan umum, serta pemecahan masalah dan FAQ yang bermanfaat.