Memindahkan data antar-project

Halaman ini menjelaskan cara menggunakan fitur impor dan ekspor terkelola untuk memindahkan data Firestore dari satu project ke project lainnya. Cara ini dapat berguna untuk menyiapkan lingkungan pengembangan atau sebagai bagian dari migrasi aplikasi secara permanen ke project lain. Contoh di halaman ini menunjukkan cara mengekspor data dari project sumber, lalu mengimpor data tersebut ke project tujuan. Memindahkan data antar-project melibatkan langkah-langkah berikut:

  1. Membuat bucket Cloud Storage untuk menyimpan data dari project sumber.
  2. Mengekspor data dari project sumber ke bucket.
  3. Memberi izin kepada project tujuan untuk membaca dari bucket.
  4. Mengimpor data dari bucket ke project tujuan.

Sebelum memulai

Sebelum dapat menggunakan layanan ekspor dan impor terkelola, Anda harus menyelesaikan tugas-tugas berikut:

  1. Aktifkan penagihan untuk project sumber dan project tujuan Anda. Hanya project Google Cloud dengan penagihan aktif yang dapat menggunakan fungsi ekspor dan impor.
  2. Pastikan akun Anda memiliki izin IAM yang diperlukan dalam project sumber dan project tujuan Anda. Jika Anda adalah pemilik kedua project, berarti akun Anda memiliki izin yang diperlukan. Jika tidak, peran IAM berikut dapat memberikan izin yang diperlukan untuk operasi ekspor dan impor Firestore:

    Owner, Cloud Datastore Owner, atau Cloud Datastore Import Export Admin

    Pemilik project dapat memberikan salah satu dari peran tersebut dengan mengikuti langkah-langkah di bagian Memberikan akses.

  3. Siapkan alat command line gcloud lalu hubungkan ke project Anda dengan salah satu cara berikut:

  4. Siapkan indeks di project baru Anda. Indeks komposit harus sesuai antara project sumber dan tujuan. Indeks harus disiapkan terlebih dahulu agar tidak perlu memproses setiap dokumen beberapa kali.

Mengekspor data dari project sumber

Ekspor data Anda dengan membuat bucket Cloud Storage untuk file ekspor Firestore, lalu memulai operasi ekspor.

Membuat bucket Cloud Storage

Buat bucket Cloud Storage di lokasi yang sama dengan database Firestore Anda. Untuk melihat lokasi database Anda, lihat setelan lokasi project. Anda tidak dapat menggunakan bucket Requester Pays untuk operasi ekspor dan impor.

Jika bucket Cloud Storage Anda tidak ada dalam project sumber, Anda harus memberi akses ke bucket tersebut bagi akun layanan default project sumber. Setiap project Google Cloud memiliki akun layanan default yang dibuat secara otomatis dengan nama PROJECT_ID@appspot.gserviceaccount.com. Operasi ekspor Firestore menggunakan akun layanan default ini untuk mengizinkan operasi bucket Cloud Storage. Untuk memberi akses ke bucket sumber Anda bagi akun layanan default, berikan peran Storage Admin tersebut.

Anda dapat memberikan peran ini dengan alat gsutil yang tersedia di Cloud Shell:

Mulai Cloud Shell

gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\
gs://[BUCKET_NAME]@

Anda juga dapat memberikan peran ini di Google Cloud Console.

Menonaktifkan operasi tulis (opsional)

Jika aplikasi Anda terus menulis ke database saat Anda melakukan operasi ekspor, Anda mungkin tidak akan menangkap semua penulisan tersebut dalam file ekspor. Untuk mengekspor data dari kondisi yang konsisten, nonaktifkan penulisan ke database dengan mengupdate aturan keamanan dan menghentikan semua operasi Admin SDK.

  1. Memperbarui aturan keamanan

    Di tab Rules Firestore di konsol, perbarui aturan keamanan project sumber Anda untuk menolak semua penulisan. Contoh:

      // Deny write access to all users under any conditions
      service cloud.firestore {
        match /databases/{database}/documents {
          match /{document=**} {
            allow write: if false;
          }
          // Reads do not affect export operations
          // Add your read rules here
        }
      }
    
  2. Menghentikan penulisan dari Admin SDK

    Aturan keamanan tidak menghentikan operasi tulis yang berasal dari lingkungan server dengan hak istimewa yang dibuat menggunakan Firebase Admin SDK atau Library Klien Google Cloud Server. Pastikan untuk menghentikan operasi penulisan dari server admin dengan menonaktifkan atau mengupdate server Anda.

Memulai operasi ekspor

Gunakan perintah gcloud firestore export untuk mengekspor data dari project sumber Anda. Anda dapat mengekspor semua data atau hanya koleksi tertentu. Ganti [SOURCE_BUCKET] dengan nama bucket Cloud Storage Anda:

Mengekspor semua data
gcloud firestore export gs://[SOURCE_BUCKET] --async
Mengekspor koleksi tertentu
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

Catat outputURIPrefix operasi ekspor Anda yang akan digunakan nanti. Secara default, Firestore menambahkan awalan ke file ekspor berdasarkan stempel waktu:

outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418

Saat operasi ekspor berjalan, Anda dapat menggunakan perintah firestore operations list untuk melihat progres operasi tersebut:

gcloud firestore operations list

Mengimpor data ke project tujuan

Selanjutnya, beri project tujuan akses ke file data Firestore Anda dan mulai operasi impor.

Memberi akses ke file data Anda bagi project tujuan

Sebelum dapat memulai operasi impor, Anda harus memastikan project tujuan dapat mengakses file data Firestore Anda.

Memindahkan file data ke bucket lokal

Jika lokasi bucket sumber berbeda dengan lokasi Firestore project tujuan, Anda harus memindahkan file data ke bucket Cloud Storage di lokasi yang sama dengan project tujuan Anda.

Pindahkan file data Anda ke bucket Cloud Storage dengan mengikuti langkah-langkah di bagian Memindahkan dan Mengganti Nama Bucket. Untuk semua langkah berikut, gunakan bucket baru ini sebagai [SOURCE_BUCKET].

Memberi akses ke bucket sumber Anda bagi akun layanan project

Jika bucket sumber tidak ada dalam project tujuan, Anda harus memberi akses ke bucket sumber Anda bagi akun layanan default project tujuan. Akun layanan default diberi nama [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. Untuk memberi akun layanan default akses ke bucket sumber, berikan izin yang sesuai untuk mengakses bucket.

Anda dapat memberikan peran yang diperlukan dengan alat gsutil yang tersedia di Cloud Shell:

Mulai Cloud Shell

gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \
gs://[SOURCE_BUCKET]

Anda juga dapat memberikan peran ini di Google Cloud Console.

Memulai operasi impor

Sebelum memulai operasi impor, pastikan gcloud dikonfigurasi untuk project yang tepat:

gcloud config set project [DESTINATION_PROJECT_ID]

Gunakan perintah gcloud firestore import untuk mengimpor data dalam bucket sumber ke project tujuan Anda:

gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async

Dengan [EXPORT_PREFIX] cocok dengan awalan di outputUriPrefix operasi ekspor Anda. Contoh:

gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async

Saat operasi ekspor berjalan, Anda dapat menggunakan perintah firestore operations list untuk melihat progres operasi tersebut:

gcloud firestore operations list