Mulai menggunakan Terraform dan Firebase

Firebase mulai mendukung Terraform. Jika Anda berada dalam tim yang ingin mengotomatiskan dan menstandarkan pembuatan project Firebase dengan menyediakan resource dan mengaktifkan layanan tertentu, penggunaan Terraform dengan Firebase merupakan pilihan tepat.

Alur kerja dasar untuk menggunakan Terraform dengan Firebase mencakup langkah berikut:

  • Membuat dan menyesuaikan file konfigurasi Terraform (file .tf) yang menentukan infrastruktur yang ingin Anda sediakan (yakni, resource yang ingin disediakan dan layanan yang ingin diaktifkan).

  • Menggunakan perintah gcloud CLI yang berantarmuka dengan Terraform untuk menyediakan infrastruktur yang ditentukan dalam file .tf.

Apa yang dapat Anda lakukan dengan Terraform dan Firebase?

Contoh alur kerja umum dalam panduan ini akan membuat project Firebase baru dengan aplikasi Android. Namun, Anda dapat menggunakan Terraform untuk banyak hal lainnya, seperti:

  • Menghapus dan memodifikasi infrastruktur yang ada.

  • Mengelola tugas dan konfigurasi spesifik per produk, seperti:

    • Mengaktifkan penyedia login Firebase Authentication.
    • Membuat bucket Cloud Storage atau instance database dan men-deploy Firebase Security Rules untuk keduanya.

Anda dapat menggunakan perintah dan file konfigurasi Terraform standar untuk menyelesaikan semua tugas ini. Untuk memudahkan Anda, kami juga telah menyediakan contoh file konfigurasi Terraform untuk beberapa kasus penggunaan umum.



Alur kerja umum untuk menggunakan Terraform dengan Firebase

Prasyarat

Panduan ini merupakan pengantar penggunaan Terraform dengan Firebase, sehingga diasumsikan bahwa Anda telah memiliki pemahaman dasar tentang Terraform. Pastikan Anda telah menyelesaikan prasyarat berikut sebelum memulai alur kerja ini.

  • Menginstal Terraform dan memahami Terraform melalui tutorial resminya.

  • Instal Google Cloud CLI (gcloud CLI). Login menggunakan akun pengguna atau akun layanan.


Langkah 1: Membuat dan menyesuaikan file konfigurasi Terraform

File konfigurasi Terraform memerlukan dua bagian utama (yang dijelaskan secara mendetail di bawah):

Menyiapkan provider

Penyiapan provider diperlukan, apa pun produk atau layanan Firebase yang digunakan.

  1. Buat file konfigurasi Terraform (seperti file main.tf) di direktori lokal.

    Dalam panduan ini, Anda akan menggunakan file konfigurasi ini untuk menentukan penyiapan provider dan semua infrastruktur yang Anda inginkan untuk dibuat oleh Terraform. Namun, perlu diperhatikan bahwa ada beberapa opsi terkait cara menyertakan penyiapan provider.

  2. Sertakan penyiapan provider berikut di bagian atas file main.tf.

    Anda harus menggunakan provider google-beta karena ini adalah rilis beta dari penggunaan Firebase dengan Terraform. Berhati-hatilah saat menggunakannya dalam produksi.

    # Terraform configuration to set up providers by version.
    terraform {
      required_providers {
        google-beta = {
          source  = "hashicorp/google-beta"
          version = "~> 5.0"
        }
      }
    }
    
    # Configures the provider to use the resource block's specified project for quota checks.
    provider "google-beta" {
      user_project_override = true
    }
    
    # Configures the provider to not use the resource block's specified project for quota checks.
    # This provider should only be used during project creation and initializing services.
    provider "google-beta" {
      alias = "no_user_project_override"
      user_project_override = false
    }

    Pelajari lebih lanjut berbagai jenis atribut terkait project (termasuk yang dalam panduan ini disebut sebagai "quota-check project") saat menggunakan Terraform dengan Firebase.

  3. Lanjutkan ke bagian berikutnya untuk menyelesaikan file konfigurasi dan menentukan infrastruktur yang akan dibuat.

Menentukan infrastruktur yang akan dibuat menggunakan blok resource

Dalam file konfigurasi Terraform (untuk panduan ini, file main.tf), Anda harus menentukan semua infrastruktur yang Anda inginkan untuk dibuat oleh Terraform (artinya, semua resource yang ingin disediakan dan semua layanan yang ingin diaktifkan). Dalam panduan ini, temukan daftar lengkap semua resource Firebase yang mendukung Terraform.

  1. Buka file main.tf.

  2. Pada penyiapan provider, sertakan konfigurasi blok resource berikut.

    Contoh dasar ini akan membuat project Firebase baru, lalu membuat Aplikasi Android Firebase di dalam project tersebut.

    # Terraform configuration to set up providers by version.
    ...
    
    # Configures the provider to use the resource block's specified project for quota checks.
    ...
    
    # Configures the provider to not use the resource block's specified project for quota checks.
    ...
    
    # Creates a new Google Cloud project.
    resource "google_project" "default" {
      provider   = google-beta.no_user_project_override
    
      name       = "Project Display Name"
      project_id = "project-id-for-new-project"
      # Required for any service that requires the Blaze pricing plan
      # (like Firebase Authentication with GCIP)
      billing_account = "000000-000000-000000"
    
      # Required for the project to display in any list of Firebase projects.
      labels = {
        "firebase" = "enabled"
      }
    }
    
    # Enables required APIs.
    resource "google_project_service" "default" {
      provider = google-beta.no_user_project_override
      project  = google_project.default.project_id
      for_each = toset([
        "cloudbilling.googleapis.com",
        "cloudresourcemanager.googleapis.com",
        "firebase.googleapis.com",
        # Enabling the ServiceUsage API allows the new project to be quota checked from now on.
        "serviceusage.googleapis.com",
      ])
      service = each.key
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Enables Firebase services for the new project created above.
    resource "google_firebase_project" "default" {
      provider = google-beta
      project  = google_project.default.project_id
    
      # Waits for the required APIs to be enabled.
      depends_on = [
        google_project_service.default
      ]
    }
    
    # Creates a Firebase Android App in the new project created above.
    resource "google_firebase_android_app" "default" {
      provider = google-beta
    
      project      = google_project.default.project_id
      display_name = "My Awesome Android app"
      package_name = "awesome.package.name"
    
      # Wait for Firebase to be enabled in the Google Cloud project before creating this App.
      depends_on = [
        google_firebase_project.default,
      ]
    }


Langkah 2: Menjalankan perintah Terraform untuk membuat infrastruktur yang ditentukan

Untuk menyediakan resource dan mengaktifkan layanan yang ditentukan dalam file main.tf, jalankan perintah berikut dari direktori yang sama dengan file main.tf Anda. Untuk mendapatkan informasi selengkapnya tentang perintah ini, lihat dokumentasi Terraform.

  1. Jika ini adalah pertama kalinya Anda menjalankan perintah Terraform di direktori, Anda harus menginisialisasi direktori konfigurasi dan menginstal provider Google Terraform. Lakukan hal ini dengan menjalankan perintah berikut:

    terraform init
  2. Buat infrastruktur yang ditentukan dalam file main.tf dengan menjalankan perintah berikut:

    terraform apply
  3. Pastikan bahwa segala sesuatunya telah disediakan atau diaktifkan seperti yang diharapkan:

    • Opsi 1: Lihat konfigurasi yang tercetak di terminal dengan menjalankan perintah berikut:

      terraform show
    • Opsi 2: Lihat project Firebase di Firebase console.



Resource Firebase yang memiliki dukungan Terraform

Resource Firebase dan Google berikut memiliki dukungan Terraform. Kami juga menambahkan lebih banyak resource dari waktu ke waktu. Jadi, jika Anda belum menemukan resource yang ingin dikelola dengan Terraform, segera periksa kembali untuk mengetahui apakah resource tersebut telah tersedia, atau kirimkan permintaan dengan melaporkan masalah di repo GitHub.


Pengelolaan aplikasi dan project Firebase

  • google_firebase_project — mengaktifkan layanan Firebase di project Google Cloud yang ada

  • Aplikasi Firebase


Firebase Authentication

Belum didukung:

  • Mengonfigurasi autentikasi multi-faktor (MFA) melalui Terraform

Firebase Realtime Database

Belum didukung:

  • Men-deploy Firebase Realtime Database Security Rules melalui Terraform (pelajari cara men-deploy Rules ini menggunakan alat lain, termasuk opsi terprogram)

Cloud Firestore

  • google_firestore_database — membuat instance Cloud Firestore

  • google_firestore_index — mengaktifkan kueri yang efisien untuk Cloud Firestore

  • google_firestore_document — membuat seed instance Cloud Firestore dengan dokumen tertentu dalam suatu kumpulan

    Penting: Jangan gunakan data produksi atau pengguna akhir sebenarnya dalam dokumen seed ini.


Cloud Storage for Firebase

  • google_firebase_storage_bucket — membuat bucket Cloud Storage yang ada dapat diakses untuk Firebase SDK, autentikasi, dan Firebase Security Rules

  • google_storage_bucket_object — menambahkan objek ke bucket Cloud Storage

    Penting: Jangan gunakan data produksi atau pengguna akhir sebenarnya dalam file ini.


Firebase Security Rules (untuk Cloud Firestore dan Cloud Storage)

Perhatikan bahwa Firebase Realtime Database menggunakan sistem penyediaan yang berbeda untuk Firebase Security Rules-nya.

  • google_firebaserules_ruleset — menentukan Firebase Security Rules yang berlaku untuk instance Cloud Firestore atau bucket Cloud Storage

  • google_firebaserules_release — men-deploy kumpulan aturan tertentu ke instance Cloud Firestore atau bucket Cloud Storage


Firebase App Check


Firebase Extensions



Contoh file konfigurasi Terraform untuk kasus penggunaan umum



Pemecahan masalah dan pertanyaan umum (FAQ)