Mengotomatiskan pengelolaan resource

Anda dapat mengotomatiskan pembuatan database Firestore dengan proses berikut:

  1. Buat project Google Cloud baru. Setiap project dibatasi untuk satu database Firestore.
  2. Buat aplikasi App Engine. Firestore bergantung pada App Engine. Anda harus mengaktifkan App Engine untuk menggunakan Firestore.
  3. Membuat database Firestore.

Halaman ini menjelaskan cara menyelesaikan proses ini menggunakan REST API, alat command-line gcloud, dan Terraform.

Membuat database dengan REST API

Anda dapat menyediakan database Firestore menggunakan Resource Manager API dan App Engine Admin API.

Autentikasi dan otorisasi

Untuk mengakses Resource Manager API dan App Engine Admin API, Anda harus mengautentikasi permintaan dengan token akses. Token akses Anda memerlukan cakupan OAuth 2.0:

https://www.googleapis.com/auth/cloud-platform

Untuk menyiapkan autentikasi aplikasi, baca artikel mengenai menyiapkan autentikasi untuk aplikasi produksi server ke server.

Saat mengembangkan dan menguji aplikasi, Anda dapat memperoleh token akses menggunakan:

gcloud auth application-default print-access-token.

Otorisasi

Akun layanan atau akun pengguna terautentikasi memerlukan izin resourcemanager.projects.create untuk membuat project baru. Peran IAM Project Creator, misalnya, memberikan izin ini.

Untuk memberikan peran ini, baca artikel mengenai cara memberikan, mengubah, dan mencabut akses ke resource.

Membuat database dan project baru

  1. Gunakan metode projects.create untuk memulai operasi pembuatan project. Dalam isi permintaan, tentukan resource Project, misalnya:

    HTTP

    POST https://cloudresourcemanager.googleapis.com/v1/projects HTTP/1.1
    
    Authorization: Bearer access-token
    Accept: application/json
    Content-Type: application/json
    
    {
      "projectId": "project-id"
    }
          

    Ganti kode berikut:

    Jika berhasil, permintaan akan menampilkan nama operasi:

    200:
    
    {
      "name": "operations/cp.6311184959990822268"
    }
        
  2. Gunakan nama operasi dari langkah sebelumnya dan metode operations.get Resource Manager untuk mengonfirmasi pembuatan project:

    HTTP

    GET https://cloudresourcemanager.googleapis.com/v1/operations/operation-name HTTP/1.1
    
    Authorization: Bearer access-token
    Accept: application/json
    

    Saat pembuatan proyek berhasil, responsnya mencakup bidang berikut:

    "done": true,
          
  3. Gunakan metode apps.create App Engine Admin API untuk membuat aplikasi App Engine dan database Firestore. Dalam isi permintaan, tentukan resource Application dan sertakan kolom databaseType, misalnya:

    HTTP

    POST https://appengine.googleapis.com/v1/apps HTTP/1.1
    
    Authorization: Bearer access_token
    Accept: application/json
    Content-Type: application/json
    
    {
      "databaseType": "CLOUD_FIRESTORE",
      "id": "project-id",
      "locationId": "location"
    }
          

    Ganti kode berikut:

    • project-id adalah ID project yang Anda buat.
    • location menetapkan lokasi aplikasi App Engine dan database Firestore Anda. Setelah lokasi ditetapkan, Anda tidak dapat mengubahnya. Untuk mengetahui daftar lengkap lokasi yang didukung, baca bagian Lokasi App Engine.

      App Engine dan Firestore mendukung lokasi yang sama, tetapi region App Engine berikut dipetakan ke multi-region Firestore:

      • us-central (Iowa) membuat database Firestore di multi-region nam5 (Amerika Serikat).
      • europe-west (Belgia) membuat database Firestore di multi-region eur3 (Eropa).

    Permintaan menampilkan nama operasi:

    200:
    
    {
      "name": "apps/project-id/operations/8612e502-4aeb-4f12-9e41-bbac0a0b819c",
      "metadata": {
        "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
        "method": "google.appengine.v1.Applications.CreateApplication",
        "insertTime": "2020-06-05T23:34:32.587Z",
        "user": "username",
        "target": "apps/project-id"
      }
    }
            
  4. Gunakan nama operasi dari langkah sebelumnya dan apps.operations.get untuk mengonfirmasi pembuatan database:

    HTTP

    GET https://appengine.googleapis.com/v1/operation-name HTTP/1.1
    
    Authorization: Bearer access-token
    Accept: application/json
        

    Saat operasi berhasil, responsnya akan mencakup kolom berikut:

    "done": true,
          

Menambahkan akun penagihan dan layanan Firebase

Untuk mengaitkan akun penagihan dengan project secara terprogram, gunakan metode projects.updateBillingInfo.

Untuk mengaktifkan layanan Firebase untuk project Anda secara terprogram, pelajari cara menyiapkan dan mengelola project Firebase menggunakan Management REST API.

Membuat database dengan gcloud

Anda dapat menggunakan alat command line gcloud untuk mengotomatiskan pembuatan database dalam skrip Bash atau PowerShell. Dalam skrip Anda, lakukan langkah-langkah berikut:

  1. Buat project baru dengan gcloud projects create:

    gcloud projects create project-id
  2. Aktifkan App Engine dengan gcloud app create:

    gcloud app create --region=region --project=project-id

    dengan region adalah lokasi aplikasi App Engine dan database Firestore Anda. Setelah lokasi ditetapkan, Anda tidak dapat mengubahnya. Untuk mengetahui daftar lengkap lokasi yang didukung, baca bagian lokasi App Engine.

    App Engine dan Firestore mendukung lokasi yang sama, tetapi region App Engine berikut dipetakan ke multi-region Firestore:

    • us-central (Iowa) membuat database Firestore di multi-region nam5 (Amerika Serikat).
    • europe-west (Belgia) membuat database Firestore di multi-region eur3 (Eropa).
  3. Aktifkan App Engine Admin API dengan gcloud services enable:

    gcloud services enable appengine.googleapis.com --project=project-id
  4. Buat database Firestore dengan gcloud alpha firestore databases create atau gcloud alpha datastore databases create:

    gcloud alpha firestore databases create --project=project-id --region=region

    Untuk membuat Firestore dalam database mode Datastore, gunakan:

    gcloud alpha datastore databases create --project=project-id --region=region

    Untuk region, nilai yang digunakan harus sama dengan yang Anda gunakan untuk mengaktifkan App Engine.

Membuat database dengan Terraform

Untuk menyediakan database Firestore dengan Terraform, gunakan resource google_firestore_database.

Misalnya, file konfigurasi Terraform berikut membuat project baru dan menyediakan database Firestore:

firestore.tf

provider "google" {
  credentials = file("credentials-file")
}

resource "google_project" "my_project" {
  name       = "My Project"
  project_id = "project-id"
}

resource "google_project_service" "firestore" {
  project = google_project.my_project.project_id
  service = "firestore.googleapis.com"
}

resource "google_firestore_database" "database" {
  project     = google_project.my_project.project_id
  name        = "(default)"
  location_id = "location"
  type        = "FIRESTORE_NATIVE"

  depends_on = [google_project_service.firestore]
}

Ganti kode berikut:

  • credentials-file adalah jalur ke file kunci akun layanan Anda.
  • project-id adalah project ID Anda. Project ID harus unik.
  • location adalah lokasi kedua database Firestore Anda. Setelah lokasi ditetapkan, Anda tidak dapat mengubahnya. Untuk mengetahui daftar lengkap lokasi yang didukung, lihat Lokasi Firestore.

Jika Anda ingin menggunakan App Engine, gunakan resource google_app_engine_application. Tetapkan database_type ke CLOUD_FIRESTORE atau CLOUD_DATASTORE_COMPATIBILITY.

provider "google" {
  credentials = file("credentials-file")
}

resource "google_project" "my_project" {
  name = "My Project"
  project_id = "project-id"
}

resource "google_app_engine_application" "app" {
  project     = google_project.my_project.project_id
  location_id = "location"
  database_type = "CLOUD_FIRESTORE"
}
  • us-central (Iowa) membuat database Firestore di multi-region nam5 (Amerika Serikat).
  • europe-west (Belgia) membuat database Firestore di multi-region eur3 (Eropa).

Selain itu, Firestore tersedia di beberapa region yang tidak termasuk dalam App Engine.

Membuat indeks dalam database

Database Firestore dapat mencakup indeks kolom tunggal atau indeks komposit. Anda dapat mengedit file konfigurasi Terraform agar dapat membuat indeks untuk database Anda.

Indeks kolom tunggal

Contoh file konfigurasi Terraform berikut membuat indeks kolom tunggal di kolom name dalam koleksi chatrooms:

firestore.tf

resource "random_id" "variable"{
  byte_length = 8
}

resource "google_firestore_field" "single-index" {
  project = "project-id"
  database = "(default)"
  collection = "chatrooms_${random_id.variable.hex}"
  field = "name"

  index_config {
    indexes {
        order = "ASCENDING"
        query_scope = "COLLECTION_GROUP"
    }
    indexes {
        array_config = "CONTAINS"
    }
  }

  ttl_config {}
}
  • Ganti project-id dengan project ID Anda. Project ID harus unik.

Indeks komposit

Contoh file konfigurasi Terraform berikut membuat indeks komposit untuk kombinasi kolom name dan kolom description dalam koleksi chatrooms:

firestore.tf

resource "google_firestore_index" "composite-index" {
  project = "project-id"

  collection = "chatrooms"

  fields {
    field_path = "name"
    order      = "ASCENDING"
  }

  fields {
    field_path = "description"
    order      = "DESCENDING"
  }

}
  • Ganti project-id dengan project ID Anda. Project ID harus unik.