Trang này mô tả cách lên lịch xuất dữ liệu Cloud Firestore của bạn. Để chạy các thao tác xuất theo lịch, bạn nên dùng Cloud Functions và Cloud Scheduler.
Trước khi bắt đầu
Trước khi lên lịch xuất dữ liệu được quản lý, bạn phải hoàn tất các việc sau:
- Bật tính năng thanh toán cho dự án Google Cloud của bạn. Chỉ những dự án Google Cloud có bật chế độ thanh toán mới có thể sử dụng tính năng xuất và nhập.
- Hoạt động xuất yêu cầu nhóm đích Cloud Storage. Tạo một Cloud Storagethùng ở vị trí gần vị trí cơ sở dữ liệu Cloud Firestore của bạn. Bạn không thể sử dụng một vùng lưu trữ mà Người yêu cầu thanh toán cho các thao tác xuất.
Tạo một Cloud Function và một tác vụ Cloud Scheduler
Hãy làm theo các bước dưới đây để tạo một Cloud Function Node.js khởi tạo một quy trình xuất dữ liệu Cloud Firestore và một quy trình Cloud Scheduler để gọi hàm đó:
Giao diện dòng lệnh (CLI) của Firebase
-
Cài đặt Giao diện dòng lệnh (CLI) của Firebase. Trong một thư mục mới, hãy khởi động CLI cho Cloud Functions:
firebase init functions --project PROJECT_ID
- Chọn JavaScript cho ngôn ngữ.
- Bạn có thể bật ESLint (không bắt buộc).
- Nhập
yđể cài đặt các phần phụ thuộc.
-
Thay thế mã trong tệp
functions/index.jsbằng mã sau: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'); }); });
-
Trong mã trên, hãy sửa đổi những nội dung sau:
- Thay thế
BUCKET_NAMEbằng tên của nhóm. - Thay
YOUR_PROJECT_IDbằng mã dự án của bạn - Sửa đổi
every 24 hoursđể đặt lịch xuất. Sử dụng cú pháp cron.yaml của AppEngine hoặc định dạng unix-cron (* * * * *). -
Sửa đổi
collectionIds: []để chỉ xuất các nhóm bộ sưu tập được chỉ định. Để nguyên như vậy để xuất tất cả các nhóm bộ sưu tập.
- Thay thế
-
Triển khai hàm theo lịch:
firebase deploy --only functions
Bảng điều khiển Google Cloud
Tạo một Cloud Function
-
Chuyển đến trang Cloud Functions trong bảng điều khiển Google Cloud:
- Nhấp vào Viết hàm
- Nhập tên hàm, chẳng hạn như
firestore-export - Trong mục Trình kích hoạt, hãy chọn Cloud Pub/Sub
- Trong mục Chủ đề, hãy chọn Tạo chủ đề mới. Nhập tên cho chủ đề pub/sub, chẳng hạn như
initiateFirestoreExport. Hãy ghi nhớ tên chủ đề vì bạn cần nó để tạo công việc Cloud Scheduler của mình. - Trong mục Mã nguồn, hãy chọn Trình chỉnh sửa nội tuyến. Nhập mã sau vào
index.js: Trong đoạn mã ở trên, hãy sửa đổi những nội dung sau: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( YOUR_PROJECT_ID, '(default)' ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collection groups // or define a list of collection group IDs: // collectionIds: ['users', 'posts'] collectionIds: [], }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); return response; }) .catch(err => { console.error(err); }); };
- Thay thế
BUCKET_NAMEbằng tên nhóm của bạn. -
Sửa đổi
collectionIds: []để chỉ xuất các nhóm bộ sưu tập được chỉ định. Để nguyên như vậy để xuất tất cả các nhóm bộ sưu tập.
- Thay thế
- Trong
package.json, hãy thêm phần phụ thuộc sau:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } } - Trong phần Hàm cần thực thi, hãy nhập
scheduledFirestoreExport, tên của hàm trongindex.js. - Nhấp vào Tạo để triển khai Cloud Function.
Tạo công việc Cloud Scheduler
Tiếp theo, hãy tạo một tác vụ Cloud Scheduler gọi Cloud Function của bạn:
-
Truy cập trang Cloud Scheduler trong bảng điều khiển Google Cloud:
- Nhấp vào Tạo công việc.
- Nhập Tên cho công việc, chẳng hạn như
scheduledFirestoreExport. - Nhập Tần suất, ví dụ:
every 24 hours. - Chọn Múi giờ.
- Trong phần Target (Đích đến), hãy chọn Pub/Sub. Trong trường Chủ đề, hãy nhập tên chủ đề pub/sub mà bạn đã xác định cùng với Cloud Function,
initiateFirestoreExporttrong ví dụ trên. - Trong trường Tải trọng, hãy nhập
start export. Công việc này yêu cầu phải xác định tải trọng, nhưng Cloud Function ở trên thực tế không sử dụng giá trị này. - Nhấp vào Tạo.
Định cấu hình quyền truy cập
Tiếp theo, cấp cho Cloud Function quyền bắt đầu các thao tác xuất và ghi vào bộ chứa GCS của bạn.
Cloud Function này sử dụng tài khoản dịch vụ mặc định của dự án để xác thực và uỷ quyền các thao tác xuất. Khi bạn tạo một dự án, một tài khoản dịch vụ mặc định sẽ được tạo cho bạn với tên sau:
PROJECT_ID@appspot.gserviceaccount.com
Tài khoản dịch vụ này cần có quyền bắt đầu một thao tác xuất và ghi vào bộ chứa Cloud Storage của bạn. Để cấp các quyền này, hãy chỉ định các vai trò IAM sau đây cho tài khoản dịch vụ mặc định:
Cloud Datastore Import Export Admin-
vai trò
OwnerhoặcStorage Admintrên nhóm
Bạn có thể sử dụng các công cụ dòng lệnh gcloud và gsutil để chỉ định các vai trò này.
Nếu chưa cài đặt, bạn có thể truy cập vào các công cụ này từ biểu tượng Cloud Shell trong bảng điều khiển Google Cloud:
Bắt đầu Cloud Shell
-
Chỉ định vai trò Quản trị viên nhập/xuất Cloud Datastore. Thay thế PROJECT_ID rồi chạy lệnh sau:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
Chỉ định vai trò Quản trị viên bộ nhớ cho nhóm của bạn. Thay thế PROJECT_ID và BUCKET_NAME, rồi chạy lệnh sau:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
Nếu bạn vô hiệu hóa hoặc xóa tài khoản dịch vụ mặc định App Engine, ứng dụng App Engine của bạn sẽ mất quyền truy cập vào cơ sở dữ liệu Cloud Firestore. Nếu đã vô hiệu hoá tài khoản dịch vụ App Engine, bạn có thể bật lại tài khoản đó. Hãy xem phần bật tài khoản dịch vụ. Nếu bạn đã xóa tài khoản dịch vụ App Engine của mình trong vòng 30 ngày qua, bạn có thể khôi phục tài khoản dịch vụ, hãy xem khôi phục tài khoản dịch vụ.
Kiểm thử công việc Cloud Scheduler và Cloud Function
Bạn có thể kiểm thử Cloud Scheduler công việc của mình trong trang Cloud Scheduler của bảng điều khiển Google Cloud.
Chuyển đến trang Cloud Scheduler trong Google Cloud Console.
Chuyển đến phần Cloud SchedulerTrong hàng dành cho tác vụ Cloud Scheduler mới của bạn, hãy nhấp vào Chạy ngay.
Sau vài giây, công việc Cloud Scheduler sẽ cập nhật cột kết quả thành Success (Thành công) và Last run (Lần chạy gần đây nhất) thành thời gian hiện tại. Bạn có thể cần nhấp vào Làm mới.
Trang Cloud Scheduler chỉ xác nhận rằng tác vụ đó đã gọi Cloud Function của bạn. Mở trang Cloud Functions để xem nhật ký của hàm.
Xem nhật ký Cloud Functions
Để xem Cloud Function có bắt đầu hoạt động xuất thành công hay không, hãy mở nhật ký của hàm:
Bảng điều khiển của Firebase
Chuyển đến trang Cloud Functions trong bảng điều khiển của Firebase.
Bảng điều khiển Google Cloud Platform
Truy cập trang Cloud Functions trong bảng điều khiển Google Cloud.
Chuyển đến Logs Viewer (Trình xem nhật ký)
Xem tiến trình xuất
Bạn có thể dùng lệnh gcloud firestore operations list để xem tiến trình của các thao tác xuất, hãy xem phần quản lý các thao tác xuất và nhập.
Sau khi hoàn tất thao tác xuất, bạn có thể xem các tệp đầu ra trong vùng lưu trữ Cloud Storage: