Trang này mô tả cách lên lịch xuất dữ liệu Cloud Firestore. Để chạy quy trình xuất theo lịch, bạn nên sử 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 thành các việc sau:
- Bật tính năng thanh toán cho dự án Google Cloud. Chỉ những dự án Google Cloud đã bật tính năng thanh toán mới có thể sử dụng tính năng xuất và nhập.
- Thao tác xuất yêu cầu một bộ chứa Cloud Storage đích. Tạo một bộ chứa Cloud Storage ở vị trí gần vị trí cơ sở dữ liệu Cloud Firestore. Bạn không thể sử dụng bộ chứa Requester Pays cho các hoạt động xuất.
Tạo một Hàm trên đám mây và một công việc Cloud Scheduler
Hãy làm theo các bước dưới đây để tạo một Hàm trên đám mây Node.js khởi tạo một tác vụ xuất dữ liệu Cloud Firestore và một tác vụ Cloud Scheduler để gọi hàm đó:
Giao diện dòng lệnh (CLI) của Firebase
-
Cài đặt Firebase CLI. 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.js
bằ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_NAME
bằng tên của bộ chứa. - 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 đã chỉ định. Để nguyên để xuất tất cả 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 Hàm trên đám mây
-
Chuyển đến trang Cloud Functions (Hàm trên đám mây) trong Google Cloud Console:
- Nhấp vào Tạo hàm
- Nhập tên hàm, chẳng hạn như
firestoreExport
- 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 lại tên chủ đề vì bạn cần để tạo công việc trên Cloud Scheduler. - Trong phần Mã nguồn, hãy chọn Trình chỉnh sửa cùng dòng. Nhập
mã sau trong
index.js
: Trong mã trên, hãy sửa đổi những thông tin 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( 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); }); };
- Thay thế
BUCKET_NAME
bằng tên của bộ chứa. -
Sửa đổi
collectionIds: []
để chỉ xuất các nhóm bộ sưu tập đã chỉ định. Để nguyên để xuất tất cả 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 Hàm trên đám mây.
Tạo công việc Cloud Scheduler
Tiếp theo, hãy tạo một công việc Cloud Scheduler gọi Chức năng trên đám mây:
-
Chuyển đến trang Cloud Scheduler trong Google Cloud Console:
- 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ột Múi giờ.
- Trong mục Mục tiêu, hãy chọn Pub/Sub. Trong trường Topic (Chủ đề), hãy nhập tên của chủ đề pub/sub mà bạn đã xác định cùng với Hàm trên đám mây,
initiateFirestoreExport
trong ví dụ ở trên. - Trong trường Payload (Gói dữ liệu), hãy nhập
start export
. Công việc này yêu cầu một tải trọng được xác định, nhưng Hàm đám mây ở trên không thực sự 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, hãy cấp cho Hàm trên đám mây quyền bắt đầu các thao tác xuất và ghi vào bộ chứa GCS.
Hàm trên Google Cloud 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 cho các hoạt động xuất. Khi bạn tạo một dự án, hệ thống sẽ tạo cho bạn một tài khoản dịch vụ mặc định có tên như sau:
PROJECT_ID@appspot.gserviceaccount.com
Tài khoản dịch vụ này cần có quyền bắt đầu thao tác xuất và ghi vào bộ chứa Cloud Storage. Để 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ò
Owner
hoặcStorage Admin
trên bộ chứa
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ừ Cloud Shell trong Google Cloud Console:
Bắt đầu Cloud Shell
-
Chỉ định vai trò Quản trị viên xuất nhập Cloud Datastore. Thay thế PROJECT_ID và 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 bộ chứa 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 tắt hoặc xoá tài khoản dịch vụ mặc định App Engine, ứng dụng App Engine 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 bài viết bật tài khoản dịch vụ. Nếu đã xoá tài khoản dịch vụ App Engine trong vòng 30 ngày qua, bạn có thể khôi phục tài khoản dịch vụ của mình, hãy xem phần huỷ xoá tài khoản dịch vụ.
Kiểm thử công việc Cloud Scheduler và Chức năng đám mây
Bạn có thể kiểm thử công việc Cloud Scheduler trong trang Cloud Scheduler của Google Cloud Console.
Chuyển đến trang Cloud Scheduler trong Google Cloud Console.
Truy cập Cloud SchedulerTrong hàng cho công việc Cloud Scheduler mới, 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. Có thể bạn cần nhấp vào Refresh (Làm mới).
Trang Cloud Scheduler chỉ xác nhận rằng công việc đã gọi Hàm trên đám mây của bạn. Mở trang Hàm trên đám mây để xem nhật ký của hàm.
Xem nhật ký của Cloud Functions
Để xem liệu Hàm trên đám mây có bắt đầu thành công một thao tác xuất hay không, hãy mở nhật ký của hàm:
Bảng điều khiển 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 (GCP)
Chuyển đến trang Cloud Functions trong Google Cloud Console.
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 hoạt động xuất, xem phần quản lý các hoạt động xuất và nhập.
Sau khi thao tác xuất hoàn tất, bạn có thể xem các tệp đầu ra trong bộ chứa Cloud Storage: