Lên lịch xuất dữ liệu

Trang này mô tả cách lên lịch xuất dữ liệu của bạn trên Cloud Firestore. Để chạy tính năng xuất dữ liệu 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 tất những việc sau:

  1. Bật tính năng thanh toán cho dự án trên Google Cloud. Chỉ những dự án trê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.
  2. Các hoạt động xuất cần có một bộ chứa Cloud Storage đích. Tạo bộ chứa Cloud Storage tại một 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 bộ chứa Requester Pays cho các hoạt động xuất.

Tạo công việc của Cloud Function và Cloud Scheduler

Hãy làm theo các bước bên dưới để tạo một Hàm đám mây Node.js giúp bắt đầu quá trình xuất dữ liệu trên Cloud Firestore và một công việc của Trình lập lịch biểu đám mây để gọi hàm đó:

Giao diện dòng lệnh (CLI) của Firebase
  1. Cài đặt Firebase CLI. Trong một thư mục mới, hãy khởi chạy CLI cho Cloud Functions:

    firebase init functions --project PROJECT_ID
    1. Chọn JavaScript cho ngôn ngữ đó.
    2. Bật ESLint (không bắt buộc).
    3. Nhập y để cài đặt các phần phụ thuộc.
  2. Thay thế mã trong tệp functions/index.js bằng đoạn 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');
      });
    });
  3. 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.
    • Hãy sửa đổi every 24 hours để đặt lịch xuất. Sử dụng cú pháp AppEngine cron.yaml 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. Giữ nguyên để xuất tất cả các bộ sưu tập.

  4. Triển khai hàm được lên lịch:

    firebase deploy --only functions
Bảng điều khiển Google Cloud Platform (GCP)
Tạo một hàm đám mây
  1. Truy cập trang Cloud Functions trong Bảng điều khiển GCP:

    Chuyển đến Cloud Functions

  2. Nhấp vào Create Function (Tạo hàm)
  3. Nhập tên hàm, chẳng hạn như firestoreExport
  4. Trong mục Trình kích hoạt, hãy chọn Cloud Pub/Sub
  5. 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. Ghi lại tên chủ đề khi bạn cần để tạo công việc của mình trên Cloud Scheduler.
  6. Trong Mã nguồn, chọn Trình chỉnh sửa cùng dòng. Nhập mã sau bên dưới 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);
        });
    };
    Trong mã trên, hãy sửa đổi như sau:
    • 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 được chỉ định. Giữ nguyên để xuất tất cả các bộ sưu tập.

  7. Trong package.json, hãy thêm phần phụ thuộc sau:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. Trong phần Hàm để thực thi, hãy nhập scheduledFirestoreExport (tên của hàm trong index.js).
  9. Nhấp vào Tạo để triển khai Hàm đám mây.
Tạo công việc của Cloud Scheduler

Tiếp theo, hãy tạo một công việc Trình lập lịch biểu đám mây để gọi Hàm đám mây của bạn:

  1. Truy cập trang Cloud Scheduler (Trình lập lịch biểu đám mây) trong Bảng điều khiển của GCP:

    Chuyển đến Cloud Scheduler

  2. Nhấp vào Tạo công việc.
  3. Nhập Tên cho công việc, chẳng hạn như scheduledFirestoreExport.
  4. Nhập Tần suất, ví dụ: every 24 hours.
  5. Chọn một Múi giờ.
  6. Trong phần Target (Mục tiêu), hãy chọn Pub/Sub. Trong trường Chủ đề, hãy nhập tên của chủ đề xuất bản/chủ đề phụ mà bạn đã xác định cùng với Chức năng đám mây, initiateFirestoreExport trong ví dụ ở trên.
  7. Trong trường Payload (Tải trọng), hãy nhập start export. Công việc này cần có 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.
  8. Nhấp vào Tạo.
Hiện tại, bạn đã triển khai công việc Chức năng đám mây và Trình lập lịch biểu đám mây, nhưng Hàm đám mây của bạn vẫn cần quyền truy cập để thực thi hoạt động xuất.

Định cấu hình quyền truy cập

Tiếp theo, hãy cấp cho Cloud Function quyền bắt đầu các hoạt động xuất và ghi vào bộ chứa GCS của bạn.

Hàm đám mây này sử dụng tài khoản dịch vụ mặc định của dự án để xác thực và cấp quyền cho các hoạt động xuất của dự án. 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 một hoạt động 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ò Owner hoặc Storage Admin trên bộ chứa

Bạn có thể sử dụng các công cụ dòng lệnh gcloudgsutil để 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ụ sau đây trên Cloud Shell trong Bảng điều khiển Google Cloud Platform:
Bắt đầu Cloud Shell

  1. Chỉ định vai trò Quản trị viên dịch vụ Xuất nhập của 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
    

  2. Chỉ định vai trò Quản trị viên bộ nhớ đối với bộ chứa của bạn. Thay thế PROJECT_IDBUCKET_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 hoá hoặc xoá tài khoản dịch vụ mặc định của App Engine, thì ứng dụng App Engine sẽ mất quyền truy cập vào cơ sở dữ liệu trên Cloud Firestore của bạn. 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 đã xoá tài khoản dịch vụ App Engine trong vòng 30 ngày qua, thì bạn có thể khôi phục tài khoản dịch vụ, hãy xem phần huỷ xoá tài khoản dịch vụ.

Kiểm thử công việc của Trình lập lịch biểu đám mây và Chức năng đám mây của bạn

Bạn có thể kiểm thử công việc của Cloud Scheduler trên trang Cloud Scheduler (Trình lập lịch biểu đám mây) trong Bảng điều khiển Google Cloud Platform.

  1. Truy cập vào trang Cloud Scheduler (Trình lập lịch biểu đám mây) trong Bảng điều khiển của GCP.
    Chuyển đến Trình lập lịch biểu đám mây

  2. Trong hàng dành cho công việc mới của bạn trên Cloud Scheduler, hãy nhấp vào Run now (Chạy ngay).

    Sau vài giây, công việc của Cloud Scheduler sẽ cập nhật cột kết quả thành Success (Thành công) và Last Run (Chạy lần cuối) 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 có tên là Cloud Function của bạn. Mở trang Hàm đám mây để xem nhật ký của hàm.

Xem nhật ký Chức năng đám mây

Để xem liệu Chức năng đám mây đã bắt đầu thành công một thao tác xuất hay chưa, hãy mở nhật ký của hàm:

Bảng điều khiển của Firebase

Truy cập vào trang Cloud Functions trong bảng điều khiển của Firebase.

Chuyển đến Nhật ký hàm

Bảng điều khiển Google Cloud Platform (GCP)

Truy cập vào trang Cloud Functions (Chức năng đám mây) trong Bảng điều khiển của GCP.

Chuyển đến 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 hoạt động xuất, xem phần quản lý các hoạt động 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 bộ chứa Cloud Storage:

Mở trình duyệt Cloud Storage