หน้านี้อธิบายวิธีกำหนดเวลาการส่งออก ข้อมูล Cloud Firestore หากต้องการเรียกใช้การส่งออกตามกำหนดเวลา เราขอแนะนำ โดยใช้ Cloud Functions และ Cloud Scheduler
ก่อนเริ่มต้น
ก่อนกำหนดเวลาการส่งออกข้อมูลที่มีการจัดการ คุณต้องทำงานต่อไปนี้ให้เสร็จสมบูรณ์
- เปิดใช้งาน การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud เฉพาะ Google Cloud โปรเจ็กต์ที่เปิดใช้การเรียกเก็บเงินสามารถใช้ฟีเจอร์การส่งออกและนำเข้าได้
- การดำเนินการส่งออกต้องมีที่เก็บข้อมูล Cloud Storage ปลายทาง สร้าง ที่เก็บข้อมูล Cloud Storage ในตำแหน่งใกล้กับ Cloud Firestore ของคุณ ตำแหน่งฐานข้อมูล คุณใช้ที่เก็บข้อมูลการชำระเงินของผู้ส่งคำขอเพื่อส่งออกไม่ได้ operations.
สร้างงาน Cloud Function และงาน Cloud Scheduler
ทำตามขั้นตอนด้านล่างเพื่อสร้าง Cloud Function ของ Node.js ซึ่ง เริ่มการส่งออกข้อมูล Cloud Firestore และงาน Cloud Scheduler เพื่อเรียกใช้ฟังก์ชันนั้น
Firebase CLI
-
ติดตั้ง Firebase CLI ในไดเรกทอรีใหม่ ให้เริ่มต้น CLI สำหรับ ฟังก์ชันระบบคลาวด์:
firebase init functions --project PROJECT_ID
- เลือก JavaScript สำหรับภาษา
- เปิดใช้ ESLint (ไม่บังคับ)
- ป้อน
y
เพื่อติดตั้งทรัพยากร Dependency
-
แทนที่โค้ดในไฟล์
functions/index.js
ด้วยค่า ดังต่อไปนี้:const functions = require('firebase-functions'); const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME'; exports.scheduledFirestoreExport = functions.pubsub .schedule('every 24 hours') .onRun((context) => { const projectId = process.env.GCP_PROJECT; const databaseName = client.databasePath(projectId, '(default)'); return client.exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or set to a list of collection IDs to export, // collectionIds: ['users', 'posts'] collectionIds: [] }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); }) .catch(err => { console.error(err); throw new Error('Export operation failed'); }); });
-
แก้ไขข้อมูลต่อไปนี้ในโค้ดด้านบน
- แทนที่
BUCKET_NAME
ด้วยชื่อ - แก้ไข
every 24 hours
เพื่อตั้งเวลาการส่งออก ใช้อย่างใดอย่างหนึ่ง ไวยากรณ์ cron.yaml ของ AppEngine หรือแท็ก รูปแบบ unix-cron (* * * * *
) -
แก้ไข
collectionIds: []
เพื่อส่งออกเฉพาะไฟล์ที่ระบุ กลุ่มคอลเล็กชัน ปล่อยไว้ตามเดิมเพื่อส่งออกคอลเล็กชันทั้งหมด
- แทนที่
-
ทำให้ฟังก์ชันกำหนดเวลาใช้งานได้:
firebase deploy --only functions
คอนโซล GCP
สร้างฟังก์ชันระบบคลาวด์
-
ไปที่หน้า Cloud Functions ในคอนโซล GCP แล้วทำดังนี้
- คลิกสร้างฟังก์ชัน
- ป้อนชื่อฟังก์ชัน เช่น
firestoreExport
- ในส่วนทริกเกอร์ ให้เลือก Cloud Pub/Sub
- เลือกสร้างหัวข้อใหม่ในส่วนหัวข้อ ป้อนชื่อสำหรับ
หัวข้อ pub/sub เช่น
initiateFirestoreExport
จดชื่อหัวข้อด้วย เพื่อสร้างงาน Cloud Scheduler - ในส่วนซอร์สโค้ด ให้เลือกตัวแก้ไขในบรรทัด ป้อน
โค้ดต่อไปนี้ใน
index.js
: วันที่const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME' exports.scheduledFirestoreExport = (event, context) => { const databaseName = client.databasePath( process.env.GCP_PROJECT, '(default)' ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or define a list of collection IDs: // collectionIds: ['users', 'posts'] collectionIds: [], }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); return response; }) .catch(err => { console.error(err); }); };
แก้ไขข้อมูลต่อไปนี้ในโค้ดด้านบน- แทนที่
BUCKET_NAME
ด้วยชื่อ -
แก้ไข
collectionIds: []
เพื่อส่งออกเฉพาะไฟล์ที่ระบุ กลุ่มคอลเล็กชัน ปล่อยไว้ตามเดิมเพื่อส่งออกคอลเล็กชันทั้งหมด
- แทนที่
- ในส่วน
package.json
ให้เพิ่มทรัพยากร Dependency ต่อไปนี้ วันที่{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }
- ในส่วนฟังก์ชันที่จะดำเนินการ ให้ป้อน
scheduledFirestoreExport
คำสั่ง ชื่อของฟังก์ชันในindex.js
- คลิกสร้างเพื่อทำให้ Cloud Function ใช้งานได้
สร้างงาน Cloud Scheduler
ขั้นตอนต่อไป ให้สร้างงาน Cloud Scheduler ที่เรียกใช้ Cloud Function
-
ไปที่หน้า Cloud Scheduler ในคอนโซล GCP แล้วดำเนินการดังนี้
- คลิกสร้างงาน
- ป้อนชื่องาน เช่น
scheduledFirestoreExport
- ป้อนความถี่ เช่น
every 24 hours
- เลือกเขตเวลา
- ในส่วนเป้าหมาย ให้เลือก Pub/Sub ในช่องหัวข้อ
ป้อนชื่อของหัวข้อ pub/sub ที่คุณกำหนดควบคู่ไปกับ
Cloud Function ที่
initiateFirestoreExport
ในตัวอย่าง ที่ด้านบน - ในช่องเพย์โหลด ให้ป้อน
start export
งานต้องมีเพย์โหลดที่กำหนดไว้ แต่ Cloud Function ข้างต้นทำ ไม่ได้ใช้อันนี้ - คลิกสร้าง
กำหนดค่าสิทธิ์การเข้าถึง
ถัดไป ให้สิทธิ์ Cloud Function เพื่อเริ่มการส่งออก และเขียนไปยังที่เก็บข้อมูล GCS
Cloud Function นี้จะใช้บัญชีบริการเริ่มต้นของโปรเจ็กต์เพื่อ ตรวจสอบสิทธิ์และให้สิทธิ์การดำเนินการส่งออก เมื่อสร้างโปรเจ็กต์ ระบบสร้างบัญชีบริการเริ่มต้นให้คุณโดยใช้ชื่อต่อไปนี้
PROJECT_ID@appspot.gserviceaccount.com
บัญชีบริการนี้ต้องการสิทธิ์เพื่อเริ่มการส่งออก และการเขียนไปยังที่เก็บข้อมูล Cloud Storage เพื่อให้สิทธิ์ ให้มอบหมายบทบาท IAM ต่อไปนี้ให้กับบัญชีบริการเริ่มต้น
Cloud Datastore Import Export Admin
-
บทบาท
Owner
หรือStorage Admin
ในที่เก็บข้อมูล
คุณใช้บรรทัดคำสั่ง gcloud
และ gsutil
ได้
ในการมอบหมายบทบาทเหล่านี้
หากยังไม่ได้ติดตั้ง คุณสามารถเข้าถึงรายการต่อไปนี้
เครื่องมือจาก Cloud Shell ในคอนโซล Google Cloud Platform:
เริ่ม Cloud Shell
-
มอบหมายบทบาทผู้ดูแลระบบการส่งออกของ Cloud Datastore แทนที่ PROJECT_ID แล้วเรียกใช้คำสั่งต่อไปนี้ วันที่
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
มอบหมายบทบาทผู้ดูแลระบบพื้นที่เก็บข้อมูลในที่เก็บข้อมูล แทนที่ PROJECT_ID และ BUCKET_NAME และเรียกใช้ดังนี้ คำสั่ง:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
หากคุณปิดใช้หรือลบบัญชีบริการเริ่มต้นของ App Engine การดำเนินการ แอป App Engine จะสูญเสียสิทธิ์เข้าถึงฐานข้อมูล Cloud Firestore หากคุณปิดใช้บัญชีบริการ App Engine ของคุณ คุณสามารถเปิดใช้อีกครั้ง ดูการเปิดใช้บัญชีบริการ หากคุณลบบัญชีบริการ App Engine ภายใน 30 วันที่ผ่านมา คุณจะกู้คืนบัญชีบริการได้ โปรดดู ยกเลิกการลบบัญชีบริการ
ทดสอบงาน Cloud Scheduler และ Cloud Function
คุณทดสอบงาน Cloud Scheduler ได้ในหน้า Cloud Scheduler ของ คอนโซล Google Cloud Platform
ไปที่หน้า Cloud Scheduler ในคอนโซล GCP
ไปที่ Cloud Schedulerคลิกเรียกใช้ตอนนี้ในแถวงาน Cloud Scheduler ใหม่
หลังจากนั้น 2-3 วินาที งาน Cloud Scheduler จะอัปเดตผลลัพธ์ เป็นสำเร็จและเรียกใช้ครั้งสุดท้าย จนถึงเวลาปัจจุบัน คุณอาจต้อง คลิกรีเฟรช
หน้า Cloud Scheduler จะยืนยันเพียงว่างานนั้นเรียก Cloud Function เปิดหน้า Cloud Function เพื่อดูบันทึกของฟังก์ชัน
ดูบันทึกของ Cloud Function
หากต้องการดูว่า Cloud Function เริ่มการดำเนินการส่งออกสำเร็จหรือไม่ เปิดบันทึกของฟังก์ชัน
คอนโซล Firebase
ไปที่หน้าฟังก์ชันระบบคลาวด์ในคอนโซล Firebase
คอนโซล GCP
ไปที่หน้า Cloud Functions ในคอนโซล GCP
ดูความคืบหน้าของการส่งออก
คุณสามารถใช้คำสั่ง gcloud firestore operations list
เพื่อดู
ความคืบหน้าของการดำเนินการส่งออก โปรดดู
การจัดการการดำเนินการส่งออกและนำเข้า
หลังจากการส่งออกเสร็จสิ้นแล้ว คุณสามารถดูไฟล์เอาต์พุตใน ที่เก็บข้อมูล Cloud Storage: