Halaman ini menjelaskan cara menjadwalkan ekspor data Cloud Firestore Anda. Untuk menjalankan ekspor berjadwal, sebaiknya gunakan Cloud Functions dan Cloud Scheduler.
Sebelum memulai
Sebelum menjadwalkan ekspor data terkelola, Anda harus menyelesaikan tugas-tugas berikut:
- Aktifkan penagihan untuk project Google Cloud Anda. Hanya project Google Cloud dengan penagihan aktif yang dapat menggunakan fitur ekspor dan impor.
- Operasi ekspor memerlukan bucket Cloud Storage tujuan. Buat bucket Cloud Storage di lokasi dekat lokasi database Cloud Firestore. 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 Node.js yang memulai ekspor data Cloud Firestore dan tugas Cloud Scheduler untuk memanggil fungsi tersebut:
Firebase CLI
-
Instal Firebase CLI. Di direktori baru, inisialisasi CLI untuk Cloud Functions:
firebase init functions --project PROJECT_ID
- Pilih JavaScript untuk bahasa.
- Jika ingin, aktifkan ESLint.
- Masukkan
y
untuk menginstal dependensi.
-
Ganti kode dalam file
functions/index.js
dengan yang berikut ini:const functions = require('firebase-functions'); const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME'; exports.scheduledFirestoreExport = functions.pubsub .schedule('every 24 hours') .onRun((context) => { const projectId = process.env.GCP_PROJECT; const databaseName = client.databasePath(projectId, '(default)'); return client.exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or set to a list of collection IDs to export, // collectionIds: ['users', 'posts'] collectionIds: [] }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); }) .catch(err => { console.error(err); throw new Error('Export operation failed'); }); });
-
Dalam kode di atas, ubah hal berikut ini:
- Ganti
BUCKET_NAME
dengan nama bucket Anda. - Ubah
every 24 hours
untuk mengatur jadwal ekspor Anda. Gunakan sintaksis AppEngine cron.yaml atau format unix-cron (* * * * *
). -
Ubah
collectionIds: []
untuk mengekspor grup koleksi yang ditentukan saja. Biarkan apa adanya untuk mengekspor semua koleksi.
- Ganti
-
Deploy fungsi yang dijadwalkan:
firebase deploy --only functions
GCP Console
Membuat Cloud Function
-
Buka halaman Cloud Functions di GCP Console:
- Klik Create Function
- Masukkan nama fungsi seperti
firestoreExport
- Pada Trigger, pilih Cloud Pub/Sub
- Pada Topic, pilih Create new Topic. Masukkan nama untuk topik pub/sub, seperti
initiateFirestoreExport
. Catat nama topik karena Anda membutuhkannya untuk membuat tugas Cloud Scheduler. - Pada Source code, pilih Inline editor. Masukkan
kode berikut di bagian
index.js
:const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME' exports.scheduledFirestoreExport = (event, context) => { const databaseName = client.databasePath( process.env.GCP_PROJECT, '(default)' ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or define a list of collection IDs: // collectionIds: ['users', 'posts'] collectionIds: [], }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); return response; }) .catch(err => { console.error(err); }); };
Pada kode di atas, ubah kode berikut:- Ganti
BUCKET_NAME
dengan nama bucket Anda. -
Ubah
collectionIds: []
untuk mengekspor grup koleksi yang ditentukan saja. Biarkan apa adanya untuk mengekspor semua koleksi.
- Ganti
- Di bagian
package.json
, tambahkan dependensi berikut:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }
- Di bagian Function to execute, masukkan
scheduledFirestoreExport
, nama fungsi dalamindex.js
. - Klik Create untuk men-deploy Cloud Function.
Membuat tugas Cloud Scheduler
Selanjutnya, buat tugas Cloud Scheduler yang memanggil Cloud Function Anda:
-
Buka halaman Cloud Scheduler di GCP Console:
- Klik Create Job.
- Masukkan nama di kolom Name untuk tugas seperti
scheduledFirestoreExport
. - Masukkan frekuensi waktu di kolom Frequency, misalnya
every 24 hours
. - Pilih zona waktu di Timezone.
- Pada Target, pilih Pub/Sub. Pada kolom Topic, masukkan nama topik pub/sub yang Anda tetapkan di Cloud Function,
initiateFirestoreExport
dalam contoh di atas. - Pada kolom Payload, masukkan
start export
. Tugas membutuhkan penentuan payload, tetapi Cloud Function di atas tidak benar-benar menggunakan nilai ini. - Klik Create.
Mengonfigurasi izin akses
Selanjutnya, beri izin Cloud Function untuk memulai operasi ekspor dan menulis ke bucket GCS 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
atauStorage Admin
di bucket
Anda dapat menggunakan alat command line gcloud
dan gsutil
untuk menetapkan peran ini.
Jika belum diinstal, alat ini dapat diakses dari Cloud Shell di Google Cloud Platform Console:
Mulai Cloud Shell
-
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
-
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
Jika Anda menonaktifkan atau menghapus akun layanan default App Engine, aplikasi App Engine akan kehilangan akses ke database Cloud Firestore Anda. Jika telah menonaktifkan akun layanan App Engine, Anda dapat mengaktifkannya kembali. Lihat mengaktifkan akun layanan. Jika telah menghapus akun layanan App Engine dalam 30 hari terakhir, Anda dapat memulihkannya. Lihat membatalkan penghapusan akun layanan.
Menguji tugas Cloud Scheduler dan Cloud Function
Anda dapat menguji tugas Cloud Scheduler di halaman Cloud Scheduler di Google Cloud Platform Console.
Buka halaman Cloud Scheduler di GCP Console.
Buka Cloud SchedulerDi baris untuk tugas Cloud Scheduler baru, klik Run now.
Setelah beberapa detik, tugas Cloud Scheduler akan mengupdate kolom hasil menjadi Success dan mengupdate kolom Last run menjadi waktu saat ini. Anda mungkin perlu mengklik Refresh.
Halaman Cloud Scheduler hanya mengonfirmasi bahwa tugas tersebut memanggil Cloud Function Anda. Buka halaman Cloud Function untuk melihat log fungsi Anda.
Melihat log Cloud Function
Untuk melihat apakah Cloud Function berhasil memulai operasi ekspor, buka log fungsi:
Firebase Console
Buka halaman Cloud Functions di Firebase console.
GCP Console
Buka halaman Cloud Functions di GCP Console.
Melihat progres ekspor
Anda dapat menggunakan perintah gcloud firestore operations list
untuk melihat progres operasi ekspor Anda. Lihat mengelola operasi ekspor dan impor.
Setelah operasi ekspor selesai, Anda dapat melihat file output-nya di bucket Cloud Storage: