หน้านี้อธิบายวิธีใช้ฟีเจอร์การนำเข้าและส่งออกที่มีการจัดการ เพื่อย้ายข้อมูล Cloud Firestore จากโปรเจ็กต์หนึ่ง ไปยังอีกโปรเจ็กต์หนึ่ง ซึ่งอาจมีประโยชน์สำหรับการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์หรือเป็นส่วนหนึ่งของการย้ายแอปไปยังโปรเจ็กต์อื่นอย่างถาวร ตัวอย่างในหน้านี้แสดงวิธีส่งออกข้อมูลจากโปรเจ็กต์ต้นทาง แล้วนำเข้าข้อมูลดังกล่าวไปยังโปรเจ็กต์ปลายทาง การย้ายข้อมูลระหว่างโปรเจ็กต์มีขั้นตอนดังนี้
- สร้าง Cloud Storage Bucket เพื่อเก็บข้อมูลจากโปรเจ็กต์ต้นทาง
- ส่งออกข้อมูลจากโปรเจ็กต์ต้นทางไปยัง Bucket
- ให้สิทธิ์โปรเจ็กต์ปลายทางในการอ่านจาก Bucket
- นำเข้าข้อมูลจาก Bucket ไปยังโปรเจ็กต์ปลายทาง
ก่อนเริ่มต้น
ก่อนที่จะใช้บริการส่งออกและนำเข้าที่มีการจัดการ คุณต้องทำตามงานต่อไปนี้
- เปิดใช้ การเรียกเก็บเงินสำหรับทั้งโปรเจ็กต์ต้นทางและ โปรเจ็กต์ปลายทาง เฉพาะโปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงินเท่านั้นที่ใช้ฟังก์ชันการส่งออกและนำเข้าได้
-
ตรวจสอบว่าบัญชีของคุณมีสิทธิ์ Cloud IAM ที่จำเป็นในโปรเจ็กต์ต้นทางและ โปรเจ็กต์ปลายทาง หากคุณเป็นเจ้าของโปรเจ็กต์ของทั้ง 2 โปรเจ็กต์ บัญชีของคุณจะมีสิทธิ์ที่จำเป็น ไม่เช่นนั้น บทบาท Cloud IAM ต่อไปนี้จะให้สิทธิ์ที่จำเป็นสำหรับการดำเนินการส่งออกและนำเข้าCloud Firestore
OwnerCloud Datastore OwnerหรือCloud Datastore Import Export Adminเจ้าของโปรเจ็กต์สามารถมอบหมายบทบาทใดบทบาทหนึ่งเหล่านี้ได้โดยทำตาม ขั้นตอนใน ให้สิทธิ์เข้าถึง
-
ตั้งค่าเครื่องมือบรรทัดคำสั่ง
gcloudและเชื่อมต่อกับโปรเจ็กต์ ด้วยวิธีใดวิธีหนึ่งต่อไปนี้-
เข้าถึง
gcloudจากคอนโซล Google Cloud โดยใช้ Cloud Shellตรวจสอบว่าได้กำหนดค่า
gcloudสำหรับโปรเจ็กต์ที่ถูกต้องแล้วโดยทำดังนี้gcloud config set project [SOURCE_PROJECT_ID]
-
-
ตั้งค่าดัชนีในโปรเจ็กต์ใหม่ ดัชนีผสมควรตรงกัน ระหว่างโปรเจ็กต์ต้นทางและโปรเจ็กต์ปลายทาง คุณควรตั้งค่าดัชนีก่อน เพื่อหลีกเลี่ยงการประมวลผลเอกสารแต่ละรายการหลายครั้ง
ส่งออกข้อมูลจากโปรเจ็กต์ต้นทาง
ส่งออกข้อมูลโดยสร้าง Cloud Storage Bucket สำหรับไฟล์ส่งออก Cloud Firestore แล้วเริ่มการดำเนินการส่งออก
สร้าง Cloud Storage Bucket
สร้าง Cloud Storage Bucket ในตำแหน่งเดียวกับCloud Firestore ฐานข้อมูล หากต้องการดูตำแหน่งฐานข้อมูล ให้ดูการตั้งค่าตำแหน่งโปรเจ็กต์ คุณไม่สามารถใช้ Bucket ที่ผู้ขอเป็นผู้ชำระเงินหรือ Rapid Bucket สำหรับการดำเนินการส่งออกและนำเข้า
หาก Cloud Storage Bucket ไม่ได้อยู่ใน
โปรเจ็กต์ต้นทาง คุณต้องให้สิทธิ์เข้าถึง Bucket แก่
บัญชีบริการเริ่มต้นของโปรเจ็กต์ต้นทาง โปรเจ็กต์ Google Cloud แต่ละโปรเจ็กต์
มีบัญชีบริการเริ่มต้นที่สร้างขึ้นโดยอัตโนมัติซึ่งมีชื่อว่า PROJECT_ID@appspot.gserviceaccount.com Cloud Firestore
การดำเนินการส่งออกใช้บัญชีบริการเริ่มต้นนี้เพื่อให้สิทธิ์Cloud Storage
การดำเนินการ Bucket หากต้องการให้สิทธิ์เข้าถึง Bucket ต้นทางแก่บัญชีบริการเริ่มต้น ให้มอบบทบาท
Storage Admin
ให้บัญชีดังกล่าว
คุณสามารถมอบบทบาทนี้ด้วย
gsutil เครื่องมือ
ที่มีอยู่ใน Cloud Shell โดยทำดังนี้
gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\ gs://[BUCKET_NAME]@
นอกจากนี้ คุณยังมอบบทบาทนี้ในGoogle Cloudคอนโซลได้ด้วย
ปิดใช้การดำเนินการเขียน (ไม่บังคับ)
หากแอปยังคงเขียนไปยังฐานข้อมูลขณะที่คุณดำเนินการส่งออก คุณอาจไม่ได้รับข้อมูลที่เขียนทั้งหมดในไฟล์ส่งออก หากต้องการส่งออกข้อมูลจากสถานะที่สอดคล้องกัน ให้ปิดใช้การเขียนไปยังฐานข้อมูลโดยอัปเดตกฎการรักษาความปลอดภัยและหยุดการดำเนินการ Admin SDK
อัปเดตกฎการรักษาความปลอดภัย
ในแท็บCloud Firestore กฎ ของคอนโซล ให้อัปเดตกฎการรักษาความปลอดภัยของโปรเจ็กต์ต้นทางเพื่อปฏิเสธการเขียนทั้งหมด เช่น
// 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 } }หยุดการเขียนจาก Admin SDK
กฎการรักษาความปลอดภัยจะไม่หยุดการเขียนจากสภาพแวดล้อมเซิร์ฟเวอร์ที่มีสิทธิ์ซึ่งสร้างขึ้นโดยใช้ Firebase Admin SDK หรือ ไลบรารีไคลเอ็นต์เซิร์ฟเวอร์ของ Google Cloud ตรวจสอบว่าได้หยุดการดำเนินการเขียนจากเซิร์ฟเวอร์ผู้ดูแลระบบโดย การปิดหรืออัปเดตเซิร์ฟเวอร์แล้ว
เริ่มการดำเนินการส่งออก
ใช้คำสั่ง gcloud firestore export เพื่อส่งออกข้อมูลจากโปรเจ็กต์ต้นทาง คุณสามารถส่งออกข้อมูลทั้งหมดหรือเฉพาะกลุ่มคอลเล็กชันที่ต้องการก็ได้ แทนที่ [SOURCE_BUCKET] ด้วยชื่อ
Cloud Storage bucket:
- ส่งออกข้อมูลทั้งหมด
-
gcloud firestore export gs://[SOURCE_BUCKET] --async
- ส่งออกกลุ่มคอลเล็กชันที่เฉพาะเจาะจง
-
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] --async
จดบันทึก outputURIPrefix ของการดำเนินการส่งออกไว้ เนื่องจากคุณจะต้องใช้ค่านี้ในภายหลัง โดยค่าเริ่มต้น Cloud Firestore จะเพิ่มคำนำหน้าให้กับไฟล์ส่งออก
ตามการประทับเวลา
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
เมื่อการดำเนินการส่งออกทำงานอยู่ คุณสามารถใช้คำสั่ง firestore operations list เพื่อดูความคืบหน้าของการดำเนินการได้
gcloud firestore operations list
นำเข้าข้อมูลไปยังโปรเจ็กต์ปลายทาง
จากนั้น ให้สิทธิ์เข้าถึงไฟล์ข้อมูล Cloud Firestoreแก่โปรเจ็กต์ปลายทาง แล้วเริ่มการดำเนินการนำเข้า
ให้สิทธิ์เข้าถึงไฟล์ข้อมูลแก่โปรเจ็กต์ปลายทาง
ก่อนที่จะเริ่มการดำเนินการนำเข้า คุณต้อง ตรวจสอบว่าโปรเจ็กต์ปลายทางเข้าถึงCloud Firestore ไฟล์ข้อมูลได้
ย้ายไฟล์ข้อมูลไปยัง Bucket ในเครื่อง
หากตำแหน่ง Bucket ต้นทางแตกต่างจาก Cloud Firestore ตำแหน่งของโปรเจ็กต์ปลายทาง คุณต้องย้าย ไฟล์ข้อมูลไปยัง Cloud Storage Bucket ในตำแหน่งเดียวกับโปรเจ็กต์ปลายทาง
ย้ายไฟล์ข้อมูลไปยัง Cloud Storage Bucket อื่นโดยทำตามขั้นตอน
ใน การย้ายและเปลี่ยนชื่อ Bucket
สำหรับขั้นตอนทั้งหมดต่อไปนี้ ให้ใช้ Bucket ใหม่นี้เป็น [SOURCE_BUCKET]
ให้สิทธิ์เข้าถึง Bucket ต้นทางแก่บัญชีบริการของโปรเจ็กต์
หาก Bucket ต้นทางไม่ได้อยู่ในโปรเจ็กต์ปลายทาง คุณต้องให้สิทธิ์เข้าถึง Bucket ต้นทางแก่บัญชีบริการเริ่มต้นของโปรเจ็กต์ปลายทาง บัญชีบริการเริ่มต้นจะมีชื่อว่า
[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com หากต้องการให้สิทธิ์เข้าถึง Bucket ต้นทางแก่บัญชีบริการเริ่มต้น ให้มอบสิทธิ์ที่เหมาะสมในการเข้าถึง Bucket แก่บัญชีดังกล่าว
คุณสามารถมอบบทบาทที่จำเป็นด้วยเครื่องมือ
gsutil
ที่มีอยู่ใน Cloud Shell โดยทำดังนี้
gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \ gs://[SOURCE_BUCKET]
นอกจากนี้ คุณยังมอบบทบาทนี้ในGoogle Cloudคอนโซลได้ด้วย
เริ่มการดำเนินการนำเข้า
ก่อนเริ่มการดำเนินการนำเข้า ให้ตรวจสอบว่าได้กำหนดค่า gcloud สำหรับโปรเจ็กต์ที่ถูกต้องแล้วโดยทำดังนี้
gcloud config set project [DESTINATION_PROJECT_ID]
ใช้คำสั่ง gcloud firestore import เพื่อนำเข้าข้อมูลใน Bucket ต้นทางไปยังโปรเจ็กต์ปลายทาง
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async
โดยที่ [EXPORT_PREFIX] ตรงกับคำนำหน้าใน outputUriPrefix ของการดำเนินการส่งออก เช่น
gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async
เมื่อการดำเนินการส่งออกทำงานอยู่ คุณสามารถใช้คำสั่ง firestore operations list เพื่อดูความคืบหน้าของการดำเนินการได้
gcloud firestore operations list