Menjadwalkan Ekspor

Halaman ini menjelaskan cara menjadwalkan ekspor data Firestore dalam mode Datastore. Untuk menjalankan ekspor sesuai jadwal, sebaiknya gunakan fungsi Cloud Run dan Cloud Scheduler. Buat Cloud Function yang memulai ekspor dan gunakan Cloud Scheduler untuk menjalankan fungsi Anda.

Sebelum memulai

Sebelum menjadwalkan ekspor data, Anda harus menyelesaikan tugas-tugas berikut:

  1. Mengaktifkan penagihan untuk project Google Cloud Anda. Hanya project Google Cloud dengan penagihan aktif yang dapat menggunakan fitur ekspor dan impor.
  2. Buat bucket Cloud Storage di lokasi dekat lokasi database mode Datastore. Operasi ekspor memerlukan bucket Cloud Storage tujuan. Anda tidak dapat menggunakan bucket Requester Pays untuk operasi ekspor.

Membuat Cloud Function dan tugas Cloud Scheduler

Ikuti langkah-langkah di bawah ini untuk membuat Cloud Function yang memulai ekspor data dan tugas Cloud Scheduler untuk memanggil fungsi tersebut:

Membuat Cloud Function datastore_export

  1. Buka halaman Cloud Functions di konsol Google Cloud.

    Buka Cloud Functions

  2. Klik Create Function
  3. Masukkan nama fungsi seperti datastoreExport
  4. Di bagian Trigger, pilih Cloud Pub/Sub. Cloud Scheduler menggunakan topik pub/sub untuk memanggil fungsi Anda.
  5. Di kolom Topic, pilih Create a topic. Masukkan nama untuk topik pub/sub seperti startDatastoreExport. Catat nama topik karena Anda membutuhkannya untuk membuat tugas Cloud Scheduler.
  6. Pada Source code, pilih Inline editor.
  7. Di dropdown Runtime, pilih Python 3.7.
  8. Masukkan kode berikut untuk main.py:
    # Copyright 2021 Google LLC All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    import base64
    import json
    import os
    
    from google.cloud import datastore_admin_v1
    
    project_id = os.environ.get("GCP_PROJECT")
    client = datastore_admin_v1.DatastoreAdminClient()
    
    
    def datastore_export(event, context):
        """Triggers a Datastore export from a Cloud Scheduler job.
    
        Args:
            event (dict): event[data] must contain a json object encoded in
                base-64. Cloud Scheduler encodes payloads in base-64 by default.
                Object must include a 'bucket' value and can include 'kinds'
                and 'namespaceIds' values.
            context (google.cloud.functions.Context): The Cloud Functions event
                metadata.
        """
        if "data" in event:
            # Triggered via Cloud Scheduler, decode the inner data field of the json payload.
            json_data = json.loads(base64.b64decode(event["data"]).decode("utf-8"))
        else:
            # Otherwise, for instance if triggered via the Cloud Console on a Cloud Function, the event is the data.
            json_data = event
    
        bucket = json_data["bucket"]
        entity_filter = datastore_admin_v1.EntityFilter()
    
        if "kinds" in json_data:
            entity_filter.kinds = json_data["kinds"]
    
        if "namespaceIds" in json_data:
            entity_filter.namespace_ids = json_data["namespaceIds"]
    
        export_request = datastore_admin_v1.ExportEntitiesRequest(
            project_id=project_id, output_url_prefix=bucket, entity_filter=entity_filter
        )
        operation = client.export_entities(request=export_request)
        response = operation.result()
        print(response)
    
  9. Di requirements.txt, tambahkan dependensi berikut:
    google-cloud-datastore==2.20.0
    
  10. Di bagian Titik entri, masukkan datastore_export, nama fungsi dalam main.py.
  11. Klik Deploy untuk men-deploy Cloud Function.

Mengonfigurasi izin akses

Selanjutnya, beri izin Cloud Function untuk memulai operasi ekspor dan menulis ke bucket Cloud Storage Anda.

Cloud Function ini menggunakan akun layanan default project Anda untuk mengautentikasi dan mengizinkan operasi ekspornya. Saat Anda membuat project, akun layanan default dibuat dengan nama berikut:

project_id@

Akun layanan ini memerlukan izin untuk memulai operasi ekspor dan menulis ke bucket Cloud Storage Anda. Untuk memberikan izin ini, tetapkan peran IAM berikut ke akun layanan default:

  • Cloud Datastore Import Export Admin
  • Peran Storage Object User di bucket

Anda dapat menggunakan Google Cloud CLI untuk menetapkan peran ini. Anda dapat mengakses alat ini dari Cloud Shell di konsol Google Cloud:
Mulai Cloud Shell

  1. Tetapkan peran Cloud Datastore Import Export Admin. Ganti project_id dan jalankan perintah berikut:

    gcloud projects add-iam-policy-binding project_id \
        --member serviceAccount:project_id@ \
        --role roles/datastore.importExportAdmin
  2. Tetapkan peran Storage Object User pada bucket Anda. Ganti bucket_name dan project_id, dan jalankan perintah berikut:

    gcloud storage buckets add-iam-policy-binding gs://bucket_name \
        --member=serviceAccount:project_id@ \
        --role=roles/storage.objectUser

Buat tugas Cloud Scheduler

Selanjutnya, buat tugas Cloud Scheduler yang memanggil Cloud Function datastore_export:

  1. Buka halaman Cloud Scheduler di konsol Google Cloud:

    Buka Cloud Scheduler

  2. Klik Create Job.

  3. Masukkan nama di kolom Name untuk tugas seperti scheduledDatastoreExport.

  4. Masukkan Frequency dalam format unix-cron.

  5. Pilih zona waktu di Timezone.

  6. Pada Target, pilih Pub/Sub. Di kolom Topic, masukkan nama topik pub/sub yang Anda tetapkan di samping Cloud Function, startDatastoreExport dalam contoh di atas.

  7. Di kolom Payload, masukkan objek JSON untuk mengonfigurasi operasi ekspor. Cloud Function datastore_export memerlukan nilai bucket. Anda dapat menyertakan nilai kinds atau namespaceIDs secara opsional untuk menetapkan filter entity, misalnya:

    Mengekspor semua entity

    {
    "bucket": "gs://bucket_name"
    }
    

    Mengekspor dengan filter entity

    • Mengekspor entity jenis User atau Task dari semua namespace:

      {
      "bucket": "gs://bucket_name",
      "kinds": ["User", "Task"]
      }
      

    • Mengekspor entity jenis User atau Task dari namespace default dan Testers. Gunakan string kosong ("") untuk menentukan namespace default:

      {
      "bucket": "gs://bucket_name",
      "kinds": ["User", "Task"],
      "namespaceIds": ["", "Testers"]
      }
      

    • Mengekspor entity jenis apa pun dari namespace default dan Testers. Gunakan string kosong ("") untuk menentukan namespace default:

      {
      "bucket": "gs://bucket_name",
      "namespaceIds": ["", "Testers"]
      }
      

    Dengan bucket_name adalah nama bucket Cloud Storage Anda.

  8. Klik Create.

Menguji ekspor terjadwal

Untuk menguji tugas Cloud Function dan Cloud Scheduler, jalankan tugas Cloud Scheduler di halaman Cloud Scheduler di konsol Google Cloud. Jika berhasil, tindakan ini akan memulai operasi ekspor yang sebenarnya.

  1. Buka halaman Cloud Scheduler di konsol Google Cloud.
    Buka Cloud Scheduler

  2. Di baris untuk tugas Cloud Scheduler baru, klik Run now.

    Setelah beberapa detik, klik Muat ulang. Tugas Cloud Scheduler akan memperbarui kolom hasil menjadi Success dan Last run menjadi waktu saat ini.

Halaman Cloud Scheduler hanya mengonfirmasi bahwa tugas tersebut mengirim pesan ke topik pub/sub. Untuk melihat apakah permintaan ekspor Anda berhasil, lihat log Cloud Function Anda.

Melihat log Cloud Function

Untuk melihat apakah Cloud Function berhasil memulai operasi ekspor, lihat halaman Logs Explorer di konsol Google Cloud.

Buka Logs Explorer

Log untuk Cloud Function melaporkan error dan inisiasi ekspor yang berhasil.

Melihat progres ekspor

Anda dapat menggunakan perintah gcloud datastore operations list untuk melihat progres operasi ekspor Anda, lihat mencantumkan semua operasi yang berjalan lama.

Setelah operasi ekspor selesai, Anda dapat melihat file output-nya di bucket Cloud Storage. Layanan ekspor terkelola menggunakan stempel waktu untuk mengatur operasi ekspor Anda:

Buka Cloud Storage