Menyiapkan dan mengelola project dan produk Firebase melalui Terraform

1. Pengantar

Sasaran

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

Codelab ini terlebih dahulu menjelaskan cara mem-build file konfigurasi Terraform untuk membuat project Firebase baru, diikuti dengan cara mengonfigurasi aplikasi dan produk Firebase yang ingin Anda gunakan dalam project tersebut. Kita juga membahas dasar-dasar command line Terraform, seperti melihat pratinjau perubahan yang akan dilakukan, lalu menerapkannya.

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

Yang akan Anda pelajari

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

Yang Anda butuhkan

Agar dapat menguasai codelab ini, Anda memerlukan kemahiran dasar dalam menggunakan Terraform dan terminologinya, termasuk prasyarat berikut:

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

  • Kode contoh untuk aplikasi web - download kode ini di langkah codelab berikutnya
  • npm pengelola paket (yang biasanya dilengkapi 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 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 pemeriksaan kuota operasi dari Terraform. 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 pada langkah berikutnya di 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", perlu diingat bahwa setiap project Firebase sebenarnya adalah project Google Cloud, hanya saja layanan Firebase diaktifkan untuk project tersebut.

Menambahkan blok untuk API dan project Google Cloud pokok

  1. Pertama, sediakan project Google Cloud pokok.

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

    Anda harus menentukan nama project Anda 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 harus 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 perlu diberi tahu secara eksplisit untuk melakukan pengaktifan ini.

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

    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 pemeriksaan kuota untuk menerima project Jadi, untuk semua penyediaan resource dan pengaktifan layanan berikutnya, Anda harus menggunakan penyedia dengan user_project_override (tidak memerlukan alias).

Tambahkan pemblokiran untuk mengaktifkan layanan Firebase

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

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 perlu 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 mungkin akan 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 berupa web):
    terraform apply
    
  2. Di terminal, Terraform mencetak rencana tindakan yang akan dijalankannya.

    Jika semuanya terlihat seperti yang diharapkan, setujui tindakan tersebut 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 tampilan yang akan dicetak. Status Anda akan berisi nilai khusus 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 dibuat dengan melihatnya di Firebase console.

Project Codelab FriendlyChat Terraform yang dipilih di Firebase console

5. Mendaftarkan aplikasi Firebase Anda melalui Terraform

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

Tambahkan blok untuk mendaftarkan aplikasi web

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

Anda harus 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 di file .tf dan melakukan perubahan 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

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

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

  • Opsi 1 (Direkomendasikan): Menyiapkan Firebase Authentication di konsol, yang tidak memerlukan GCIP.
    • Dengan menggunakan opsi ini, Anda tidak perlu mengaitkan project baru dengan akun Penagihan Cloud.
  • Opsi 2: Menyiapkan 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 mengharuskan 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, cari bagian Build di panel kiri.
  2. Klik Authentication, klik Mulai, lalu klik tab Metode login (atau klik di sini untuk langsung membukanya).
  3. Klik Tambahkan penyedia baru dan, dari bagian Penyedia tambahan, pilih Google.
  4. Aktifkan tombol Aktifkan.
  5. Setel nama aplikasi Anda yang dapat dilihat publik menjadi sesuatu seperti FriendlyChat (ini tidak harus unik secara global).
  6. Pilih Email dukungan project dari menu dropdown, lalu klik Save.Mengonfigurasi Firebase Auth di Firebase console
  7. Anda akan melihat Google sebagai penyedia login yang diaktifkan.Halaman Authentication 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 agar menggunakan paket Blaze dengan mengaitkan akun Penagihan Cloud ke project tersebut.

Mengaktifkan penagihan melalui Terraform

  1. Jika Anda belum memiliki akun Penagihan Cloud, langkah pertama adalah membuat akun baru di Google Cloud Console. Saat Anda melakukannya, catat ID akun penagihan. 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. Mengaktifkan login dengan Google mengharuskan Anda 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 User Type ke External, lalu klik Create.
    3. Di layar berikutnya, selesaikan hal berikut, lalu klik Simpan dan lanjutkan.
      • Setel Nama aplikasi aplikasi yang dapat dilihat publik menjadi sesuatu seperti FriendlyChat (tidak harus unik secara global).
      • Pilih Email dukungan pengguna dari menu dropdown.
      • Masukkan email untuk Informasi kontak developer.
    4. Di layar berikutnya, selesaikan langkah-langkah berikut:
      • Setujui setelan default di halaman Cakupan, lalu klik Simpan dan Lanjutkan.
      • Setujui 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 Buat kredensial, lalu pilih ID klien OAuth.
    2. Dari drop-down Jenis aplikasi, pilih Aplikasi web.
    3. Di kolom Name, masukkan nama aplikasi Anda, misalnya FriendlyChat (ini tidak harus unik secara global).
    4. Izinkan URL aplikasi Anda menggunakan klien OAuth ini, dengan menetapkan setelan berikut:
      • Di bagian Asal JavaScript resmi, klik Tambahkan URI dan masukkan
        https://<PROJECT_ID>.firebaseapp.com, dengan <PROJECT_ID> adalah project ID yang Anda tetapkan di main.tf.
      • Di bagian URI pengalihan yang sah, klik Tambahkan URI dan masukkan
        https://<PROJECT_ID>.firebaseapp.com/__/auth/handler, dengan <PROJECT_ID> adalah ID project yang Anda tetapkan di main.tf.
    5. Klik Save.
    Mendapatkan Client ID dan rahasia OAuth2 dari halaman Credentials di Google Cloud Console
  5. Untuk mengaktifkan login dengan Google menggunakan client ID OAuth dan rahasia klien, tambahkan file main.tf 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 Authentication 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 ID project yang ditentukan sudah ada dan akan membandingkan status project saat ini dengan yang ada di file .tf. {i>Database<i} akan membuat perubahan yang ditemukannya.
  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 Authentication, lalu klik tab Sign-in method (atau klik di sini untuk langsung membukanya).
  3. Anda akan melihat Google sebagai penyedia login yang diaktifkan.Halaman Authentication 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 di 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 menyimpan database.

    Saat mengembangkan aplikasi produksi, Anda ingin aplikasi ini berada 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 (lihat lokasi Cloud Firestore).
  3. Setiap instance database Firestore yang dapat diakses 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 sama 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. Verifikasi bahwa database disediakan dan aturan keamanannya telah diterapkan:
    1. Di Firebase console, cari 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 antara pengguna akhir di 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, sediakan 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 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 dengan blok resource berikut untuk melakukan hal berikut:
    • Membuat kumpulan aturan Aturan Keamanan Firebase dari file lokal.
    • Rilis kumpulan aturan untuk bucket Storage.
    Perhatikan bahwa blok resource ini sama 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. Verifikasi bahwa bucket telah disediakan dan aturan keamanannya telah di-deploy:
    1. Di Firebase console, cari bagian Build di panel kiri.
    2. Buka bagian Storage lalu klik tab Rules.
    Memverifikasi aturan keamanan menggunakan Firebase console

9. Menjalankan aplikasi secara lokal

Sekarang 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 ini belum terhubung ke Firebase, tetapi dengan menyelesaikan langkah-langkah berikutnya dalam codelab ini, semuanya akan berhasil.

Perlu diperhatikan bahwa setiap kali Anda membuat perubahan pada aplikasi web (seperti yang akan Anda lakukan pada langkah-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 dapat berfungsi dengan Firebase, aplikasi Anda memerlukan Firebase SDK dan konfigurasi Firebase untuk project Firebase Anda.

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

Meskipun kode contoh sebagian besar sudah selesai, 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.

Instal Firebase SDK dan mulai build webpack Anda

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 membangun ulang kode sumber Anda.

Menambahkan konfigurasi Firebase ke aplikasi

Anda juga perlu menambahkan konfigurasi Firebase ke aplikasi sehingga Firebase SDK mengetahui project Firebase yang ingin digunakan.

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 file web/src/firebase-config.js aplikasi, seperti:

    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 blok 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 di direktori, jalankan perintah ini:
      terraform refresh
      
    2. Untuk mencetak nilai konfigurasi Firebase, jalankan perintah ini:
      terraform output –json
      
      Berikut adalah contoh output konfigurasi. Output cetak akan berisi nilai aplikasi dan project 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 Anda, seperti:

    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 Anda

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

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

11. Mereplikasi konfigurasi Anda di seluruh lingkungan

Terraform ahli 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 yang akan menjadi 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 paling besar terkait seberapa besar perbedaan antara project yang direplikasi dan project sumber.
  • Opsi 2: Gunakan kembali konfigurasi dengan for_each.
    Opsi ini menawarkan lebih banyak penggunaan kembali kode jika setiap project tidak berbeda secara signifikan dan Anda ingin menerapkan perubahan ke semua project sekaligus.

Opsi 1: Buat salinan konfigurasi Terraform

Opsi ini menawarkan fleksibilitas paling besar terkait seberapa besar perbedaan antara project yang direplikasi dan project sumber, seperti memiliki aplikasi dengan nama tampilan yang berbeda dan peluncuran bertahap.

  1. Di root direktori web, buat file konfigurasi Terraform baru bernama main_staging.tf.
  2. Salin semua blok resource dari file main.tf Anda (kecuali untuk blok terraform dan provider), lalu tempel ke file main_staging.tf Anda.
  3. Kemudian, Anda perlu memodifikasi setiap blok resource yang direplikasi di main_staging.tf agar dapat berfungsi dengan project staging:
    • 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, update google_firebase_project.default.project menjadi google_firebase_project.staging.project.
    Anda dapat menemukan konfigurasi lengkap 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 tempel 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 Authentication 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 project Firebase "staging" baru Anda beserta semua resource-nya dan 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 ulang kode jika setiap project tidak memiliki perbedaan yang signifikan dan Anda ingin menerapkan perubahan ke semua project sekaligus. Class ini menggunakan argumen meta for_each dalam bahasa Terraform.

  1. Buka file main.tf.
  2. Ke setiap blok resource yang ingin direplikasi, tambahkan argumen meta for_each, seperti berikut:

    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 argumen meta for_each dalam 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 tempel 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 Authentication 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, penting untuk memahami dan memperbaiki 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 sudah ada yang Anda buat di bagian pertama codelab ini dikenal 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 diambil Terraform dengan mempertimbangkan status saat ini.

      Output harus 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, tampilan tersebut seharusnya tidak menunjukkan bahwa Terraform akan menghapus project yang Anda buat di bagian pertama codelab ini.
  4. Jalankan terraform apply untuk menyediakan project Firebase "staging" baru Anda 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 Anda, ubah firebase-config.js untuk menggunakan konfigurasi Firebase dari project staging.

    Untuk mengingatkan diri Anda sendiri cara mendapatkan konfigurasi Firebase dan menambahkannya ke aplikasi, lihat langkah awal codelab ini, Tambahkan konfigurasi Firebase ke aplikasi Anda.
  2. Di root direktori web, 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 menggunakan konfigurasi Firebase project produksi (project pertama yang Anda buat di codelab ini).
  5. Di root direktori web, jalankan perintah berikut untuk men-deploy aplikasi ke project Firebase produksi Anda.
    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 untuk codelab ini, Anda dapat menghentikan Firebase menayangkannya. 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. Anda juga 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 Aturan Keamanan)
  • 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 lebih lanjut tentang Firebase dan Terraform, buka dokumentasi kami. Anda dapat menemukan daftar semua produk Firebase yang memiliki dukungan Terraform, contoh konfigurasi Terraform untuk kasus penggunaan umum, serta pemecahan masalah dan FAQ yang bermanfaat.