หน้านี้อธิบายวิธีใช้ฟีเจอร์การนำเข้าและส่งออกที่มีการจัดการ เพื่อย้ายข้อมูล Cloud Firestore จากโปรเจ็กต์หนึ่ง ไปยังอีกโปรเจ็กต์หนึ่ง ซึ่งอาจมีประโยชน์ในการตั้งค่าสภาพแวดล้อมการพัฒนา หรือเป็นส่วนหนึ่งของการย้ายข้อมูลแอปไปยังโปรเจ็กต์อื่นอย่างถาวร ตัวอย่างในหน้านี้แสดงวิธีส่งออกข้อมูลจากโปรเจ็กต์แหล่งที่มา แล้วนำเข้าข้อมูลนั้นไปยังโปรเจ็กต์ปลายทาง การย้ายข้อมูล ระหว่างโปรเจ็กต์มีขั้นตอนดังนี้
- สร้างที่เก็บข้อมูล Cloud Storage เพื่อเก็บข้อมูลจากโปรเจ็กต์แหล่งที่มา
- ส่งออกข้อมูลจากโปรเจ็กต์แหล่งที่มาไปยังที่เก็บข้อมูล
- ให้สิทธิ์โปรเจ็กต์ปลายทางในการอ่านจากที่เก็บข้อมูล
- นำเข้าข้อมูลจากที่เก็บข้อมูลไปยังโปรเจ็กต์ปลายทาง
ก่อนเริ่มต้น
ก่อนที่จะใช้บริการส่งออกและนำเข้าที่มีการจัดการได้ คุณต้องทำงานต่อไปนี้ให้เสร็จสมบูรณ์
- เปิดใช้ การเรียกเก็บเงินสำหรับทั้งโปรเจ็กต์ต้นทางและ โปรเจ็กต์ปลายทาง เฉพาะGoogle Cloud โปรเจ็กต์ที่เปิดใช้การเรียกเก็บเงินเท่านั้นที่ใช้ฟังก์ชันการส่งออกและนำเข้าได้
-
ตรวจสอบว่าบัญชีของคุณมีสิทธิ์ Cloud IAM ที่จำเป็นในโปรเจ็กต์ต้นทางและ โปรเจ็กต์ปลายทาง หากคุณเป็นเจ้าของโปรเจ็กต์ทั้ง 2 รายการ บัญชีของคุณจะมีสิทธิ์ที่จำเป็น หรือบทบาท Cloud IAM ต่อไปนี้ จะให้สิทธิ์ที่จำเป็นสำหรับCloud Firestore การดำเนินการส่งออกและนำเข้า
Owner,Cloud Datastore OwnerหรือCloud Datastore Import Export Adminเจ้าของโปรเจ็กต์สามารถให้บทบาทใดบทบาทหนึ่งเหล่านี้ได้โดยทำตาม ขั้นตอนใน การให้สิทธิ์เข้าถึง
-
ตั้งค่าเครื่องมือบรรทัดคำสั่ง
gcloudและเชื่อมต่อกับโปรเจ็กต์ ด้วยวิธีใดวิธีหนึ่งต่อไปนี้-
เข้าถึง
gcloudจากคอนโซล Google Cloud โดยใช้ Cloud Shellตรวจสอบว่าได้กำหนดค่า
gcloudสำหรับโปรเจ็กต์ที่ถูกต้องแล้ว โดยทำดังนี้gcloud config set project [SOURCE_PROJECT_ID]
-
-
ตั้งค่าดัชนีในโปรเจ็กต์ใหม่ ดัชนีแบบผสมควรตรงกัน ระหว่างโปรเจ็กต์ต้นทางและปลายทาง คุณควรตั้งค่าดัชนี ก่อนเพื่อหลีกเลี่ยงการประมวลผลเอกสารแต่ละรายการหลายครั้ง
ส่งออกข้อมูลจากโปรเจ็กต์แหล่งที่มา
ส่งออกข้อมูลโดยสร้างCloud Storageที่เก็บข้อมูลสำหรับไฟล์ส่งออก Cloud Firestoreและเริ่มการดำเนินการส่งออก
สร้างที่เก็บข้อมูล Cloud Storage
สร้างที่เก็บข้อมูล Cloud Storage ในตำแหน่งเดียวกับฐานข้อมูล Cloud Firestore หากต้องการดูตำแหน่งฐานข้อมูล ให้ดูการตั้งค่าตำแหน่งโปรเจ็กต์ คุณไม่สามารถใช้ที่เก็บข้อมูลที่ผู้ขอเป็นผู้ชำระเงินสำหรับการดำเนินการส่งออกและนำเข้า
หากCloud Storageที่เก็บข้อมูลไม่ได้อยู่ในCloud Storageโปรเจ็กต์แหล่งที่มา คุณต้องให้สิทธิ์เข้าถึงที่เก็บข้อมูลแก่Cloud Storageบัญชีบริการเริ่มต้นของโปรเจ็กต์แหล่งที่มา Google Cloud โปรเจ็กต์
แต่ละโปรเจ็กต์จะมีบัญชีบริการเริ่มต้นที่สร้างขึ้นโดยอัตโนมัติซึ่งมีชื่อว่า PROJECT_ID@appspot.gserviceaccount.com Cloud Firestore
การดำเนินการส่งออกใช้บัญชีบริการเริ่มต้นนี้เพื่อให้สิทธิ์Cloud Storage
การดำเนินการกับที่เก็บข้อมูล หากต้องการให้สิทธิ์เข้าถึงที่เก็บข้อมูลต้นทางแก่บัญชีบริการเริ่มต้น ให้มอบบทบาท
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ของคุณ
- ส่งออกข้อมูลทั้งหมด
-
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 ไฟล์ข้อมูลได้
ย้ายไฟล์ข้อมูลไปยังที่เก็บข้อมูลในเครื่อง
หากตำแหน่งที่เก็บข้อมูลต้นทางแตกต่างจาก Cloud Firestore ตำแหน่งของโปรเจ็กต์ปลายทาง คุณต้องย้าย ไฟล์ข้อมูลไปยังที่เก็บข้อมูล Cloud Storage ในตำแหน่งเดียวกับ โปรเจ็กต์ปลายทาง
ย้ายไฟล์ข้อมูลไปยังCloud Storageที่เก็บข้อมูลอื่นโดยทำตามขั้นตอน
ในการย้ายและเปลี่ยนชื่อที่เก็บข้อมูล
สำหรับขั้นตอนทั้งหมดต่อไปนี้ ให้ใช้ที่เก็บข้อมูลใหม่นี้เป็น [SOURCE_BUCKET]
ให้สิทธิ์เข้าถึงที่เก็บข้อมูลต้นทางแก่บัญชีบริการของโปรเจ็กต์
หากที่เก็บข้อมูลต้นทางไม่ได้อยู่ในโปรเจ็กต์ปลายทาง คุณต้องให้สิทธิ์เข้าถึงที่เก็บข้อมูลต้นทางแก่บัญชีบริการเริ่มต้นของโปรเจ็กต์ปลายทาง
บัญชีบริการเริ่มต้นมีชื่อว่า
[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com หากต้องการ
ให้สิทธิ์เข้าถึงที่เก็บข้อมูลต้นทางแก่บัญชีบริการเริ่มต้น ให้สิทธิ์ที่เหมาะสมแก่บัญชีบริการนั้นเพื่อเข้าถึงที่เก็บข้อมูล
คุณมอบบทบาทที่จำเป็นได้ด้วยเครื่องมือ 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 เพื่อนำเข้าข้อมูลใน
ที่มาไปยังโปรเจ็กต์ปลายทาง
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