ย้ายข้อมูลระหว่างโปรเจ็กต์

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

  1. สร้างที่เก็บข้อมูล Cloud Storage เพื่อเก็บข้อมูลจากโปรเจ็กต์ต้นทาง
  2. ส่งออกข้อมูลจากโปรเจ็กต์ต้นทางไปยังที่เก็บข้อมูล
  3. ให้สิทธิ์โปรเจ็กต์ปลายทางในการอ่านจากที่เก็บข้อมูล
  4. นำเข้าข้อมูลจากที่เก็บข้อมูลไปยังโปรเจ็กต์ปลายทาง

ก่อนเริ่มต้น

คุณต้องดำเนินการต่อไปนี้ให้เสร็จสิ้นก่อน จึงจะใช้บริการส่งออกและนำเข้าที่มีการจัดการได้ งานต่อไปนี้:

  1. เปิดใช้งาน การเรียกเก็บเงินสำหรับทั้งโปรเจ็กต์ต้นทางและ ปลายทาง เฉพาะ Google Cloud โปรเจ็กต์ที่เปิดใช้การเรียกเก็บเงินสามารถใช้ฟังก์ชันการส่งออกและนำเข้าได้
  2. ตรวจสอบว่าบัญชีมี Cloud IAM ที่จำเป็น สิทธิ์ในโปรเจ็กต์ต้นทางและ ปลายทาง หากคุณเป็นเจ้าของโปรเจ็กต์ของทั้ง 2 โปรเจ็กต์ บัญชีของคุณจะมีสิ่งต่อไปนี้ สิทธิ์ ไม่เช่นนั้น บทบาท Cloud IAM ต่อไปนี้ ให้สิทธิ์ที่จำเป็นสำหรับ Cloud Firestore การดำเนินการส่งออกและนำเข้า

    Owner, Cloud Datastore Owner หรือ Cloud Datastore Import Export Admin

    เจ้าของโปรเจ็กต์สามารถมอบบทบาทใดบทบาทหนึ่งต่อไปนี้ได้ ขั้นตอนใน ให้สิทธิ์เข้าถึง

  3. ตั้งค่าเครื่องมือบรรทัดคำสั่ง gcloud และเชื่อมต่อกับโปรเจ็กต์ ด้วยวิธีใดวิธีหนึ่งต่อไปนี้

  4. ตั้งค่าดัชนีในโปรเจ็กต์ใหม่ ดัชนีผสมควรตรงกับ ระหว่างโปรเจ็กต์ต้นทางและปลายทาง ควรตั้งค่าดัชนี เพื่อหลีกเลี่ยงการประมวลผลเอกสารแต่ละรายการหลายๆ ครั้ง

ส่งออกข้อมูลจากโปรเจ็กต์ต้นทาง

ส่งออกข้อมูลโดยการสร้างที่เก็บข้อมูล 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:

เริ่มต้น 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

  1. อัปเดตกฎความปลอดภัย

    ใน 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
        }
      }
    
  2. หยุดการเขียนจาก 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:

เริ่มต้น 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