Menjadwalkan Ekspor

Halaman ini menjelaskan cara menjadwalkan ekspor Firestore Anda dalam data mode Datastore. Untuk menjalankan ekspor berjadwal, sebaiknya gunakan Cloud Functions 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 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 Anda. Operasi ekspor memerlukan bucket Cloud Storage tujuan. Anda tidak dapat menggunakan bucket Requester Pays untuk operasi ekspor.

Membuat tugas Cloud Scheduler dan Cloud Function

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 Pemicu, pilih Cloud Pub/Sub. Cloud Scheduler menggunakan topik pub/sub untuk memanggil fungsi Anda.
  5. Pada kolom Topik, pilih Buat topik. Masukkan nama untuk topik pub/sub seperti startDatastoreExport. Catat nama topik karena Anda memerlukannya 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.19.0
    
  10. Di bagian Entry point, masukkan datastore_export, nama fungsi di 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@appspot.gserviceaccount.com

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 Owner atau Storage Admin di bucket

Anda dapat menggunakan alat command line gcloud dan gsutil 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@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
    
  2. Tetapkan peran Storage Admin pada bucket Anda. Ganti project_id dan bucket_name, dan jalankan perintah berikut:

    gsutil iam ch serviceAccount:project_id@appspot.gserviceaccount.com:admin \
        gs://bucket_name
    

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. Pada kolom Topik, masukkan nama topik pub/sub yang Anda tetapkan di 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. Secara opsional, Anda dapat menyertakan nilai kinds atau namespaceIDs untuk menetapkan filter entity, misalnya:

    Mengekspor semua entity

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

    Mengekspor dengan filter entity

    • Ekspor entity jenis User atau Task dari semua namespace:

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

    • Ekspor 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"]
      }
      

    • Ekspor entity 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 Cloud Function dan tugas Cloud Scheduler, jalankan tugas Cloud Scheduler Anda di halaman Cloud Scheduler di Google Cloud Console. Jika berhasil, operasi ekspor yang sebenarnya akan dimulai.

  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 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. Lihat mencantumkan semua operasi yang berjalan lama.

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

Buka Cloud Storage