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 Cloud Firestore. Để chạy các thao tác xuất theo lịch, bạn nên sử dụng Cloud FunctionsCloud 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:

  1. Bật tính năng thanh toán cho dự án của bạn.Google Cloud Chỉ những Google Cloud dự án đã 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 thao tác xuất yêu cầu một bộ chứa đích Cloud Storage. Tạo một bộ chứaCloud Storage ở một vị trí gần với vị trí cơ sở dữ liệuCloud Firestore. Bạn không thể sử dụng bộ chứa 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 Cloud Scheduler công việc

Hãy làm theo các bước bên dưới để tạo một Cloud Function Node.js khởi chạy thao tác xuất dữ liệu Cloud Firestore và một công việc Cloud Scheduler để gọi hàm đó:

Giao diện dòng lệnh (CLI) của Firebase
  1. Cài đặt CLI Firebase. 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 làm ngôn ngữ.
    2. Bạn có thể bật ESLint.
    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 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 bộ chứa của bạn.
    • Thay thế YOUR_PROJECT_ID bằng mã dự án của bạn Id
    • 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. Để nguyên như vậy để xuất tất cả các nhóm bộ sưu tập.

  4. Triển khai hàm đã lên lịch:

    firebase deploy --only functions
Bảng điều khiển Google Cloud
Tạo một Cloud Function
  1. Chuyển đến trang Cloud Functions trong bảng điều khiển Google Cloud:

    Chuyển đến Cloud Functions

  2. Nhấp vào Write a function (Viết hàm)
  3. Nhập tên hàm, chẳng hạn như firestore-export
  4. Trong phần Trigger (Điều kiện kích hoạt), hãy chọn Cloud Pub/Sub
  5. Trong phần Topic (Chủ đề), hãy chọn Create new Topic (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ủ đề vì bạn cần tên này để tạo công việc Cloud Scheduler.
  6. Trong phần Source code (Mã nguồn), hãy chọn Inline editor (Trình chỉnh sửa nội tuyến). Nhập mã sau trong 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(
        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);
        });
    };
    Trong mã ở trên, hãy sửa đổi những nội dung sau:
    • Thay thế BUCKET_NAME bằng tên bộ chứa 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.

  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 Function to execute (Hàm cần thực thi), hãy nhập scheduledFirestoreExport, tên của hàm trong index.js.
  9. Nhấp vào Create (Tạo) để triển khai Cloud Function.
Tạo một công việc Cloud Scheduler

Tiếp theo, hãy tạo một Cloud Scheduler công việc gọi Cloud Function:

  1. Chuyển đến trang Cloud Scheduler trong bảng điều khiển Cloud Google:

    Chuyển đến Cloud Scheduler

  2. Nhấp vào Create Job (Tạo công việc).
  3. Nhập Name (Tên) cho công việc, chẳng hạn như scheduledFirestoreExport.
  4. Nhập Frequency (Tần suất), ví dụ: every 24 hours.
  5. Chọn Timezone (Múi giờ).
  6. Trong phần Target (Đích), hãy chọn Pub/Sub. Trong trường Topic, hãy nhập tên của chủ đề pub/sub mà bạn đã xác định cùng với Cloud Function, 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 yêu cầu một tải trọng được xác định, nhưng Cloud Function ở trên không thực sự sử dụng giá trị này.
  8. Nhấp vào Create (Tạo).
Tại thời điểm này, bạn đã triển khai Cloud Function và Cloud Scheduler công việc, nhưng Cloud Function vẫn cần có quyền truy cập để thực thi các thao tác 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 thao tác xuất và ghi vào bộ chứa GCS.

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à cấp quyền cho 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ấp các quyền này, hãy chỉ định các vai trò IAM sau cho tài khoản dịch vụ mặc định:

  • Cloud Datastore Import Export Admin
  • Vai trò Owner (Chủ sở hữu) hoặc Storage Admin (Quản trị viên bộ nhớ) 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ụ này từ Cloud Shell trong bảng điều khiển Cloud:
Bắt đầu Cloud Shell

  1. Chỉ định vai trò Cloud Datastore Import Export Admin (Quản trị viên nhập/xuất 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ò Storage Admin (Quản trị viên bộ nhớ) trên 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 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 đã 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ụ. Hãy xem phần huỷ thao tác xoá 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ử công việc Cloud Scheduler trên trang Cloud Scheduler của bảng điều khiển Cloud.

  1. Chuyển đến trang Cloud Scheduler trong bảng điều khiển Cloud.
    Chuyển đến Cloud Scheduler

  2. Trong hàng cho công việc Cloud Scheduler mới, hãy nhấp vào Run now (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 Refresh (Làm mới).

Trang Cloud Scheduler chỉ xác nhận rằng công việc đã gọi Cloud Function. Mở trang Cloud Function để xem nhật ký của hàm.

Xem nhật ký Cloud Function

Để xem Cloud Function 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 của Firebase

Chuyển đến 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

Chuyển đến trang Cloud Functions trong bảng điều khiển Cloud.

Chuyển đến Trình xem nhật ký

Xem tiến trình xuất

Bạn có thể sử 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 một 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 của bạn:

Mở trình duyệt Cloud Storage