หน้านี้จะอธิบายวิธีใช้ฟีเจอร์การนำเข้าและส่งออกที่มีการจัดการ เพื่อย้ายข้อมูล 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 ไม่ได้อยู่ในโปรเจ็กต์แหล่งที่มา คุณต้องให้สิทธิ์เข้าถึงที่เก็บข้อมูลแก่บัญชีบริการเริ่มต้นของโปรเจ็กต์แหล่งที่มา 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_ID_1],[COLLECTION_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