หน้านี้อธิบายวิธีใช้ฟีเจอร์การนำเข้าและส่งออกที่มีการจัดการ เพื่อย้ายข้อมูล Cloud Firestore จาก 1 ไปยังอีกโปรเจ็กต์หนึ่ง ซึ่งอาจเป็นประโยชน์ในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ หรือเป็นส่วนหนึ่งของการย้ายข้อมูลแอปไปยังโปรเจ็กต์อื่นอย่างถาวร ตัวอย่างในหน้านี้แสดงวิธีส่งออกข้อมูลจาก โปรเจ็กต์ต้นทาง แล้วนำเข้าข้อมูลนั้นไปยังโปรเจ็กต์ปลายทาง กำลังย้ายข้อมูล ระหว่างโปรเจ็กต์จะต้องทำตามขั้นตอนต่อไปนี้
- สร้างที่เก็บข้อมูล 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 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