Di chuyển dữ liệu giữa các dự án

Trang này mô tả cách sử dụng các tính năng nhập và xuất được quản lý để di chuyển dữ liệu Cloud Firestore từ dự án này sang dự án khác. Điều này có thể hữu ích cho việc thiết lập môi trường phát triển hoặc là một phần của việc di chuyển vĩnh viễn ứng dụng sang dự án khác. Ví dụ trên trang này trình bày cách xuất dữ liệu từ dự án nguồn rồi nhập dữ liệu đó vào dự án đích. Di chuyển dữ liệu giữa các dự án bao gồm các bước sau:

  1. Tạo nhóm Cloud Storage để lưu giữ dữ liệu từ dự án nguồn của bạn.
  2. Xuất dữ liệu từ dự án nguồn của bạn sang nhóm.
  3. Cho phép dự án đích của bạn đọc từ nhóm.
  4. Nhập dữ liệu từ nhóm vào dự án đích của bạn.

Trước khi bắt đầu

Trước khi có thể sử dụng dịch vụ xuất và nhập được quản lý, bạn phải hoàn thành các tác vụ sau:

  1. Cho phép thanh toán cho cả dự án nguồn và dự án đích của bạn. Chỉ những dự án Google Cloud đã bật tính năng thanh toán mới có thể sử dụng chức năng xuất và nhập.
  2. Đảm bảo tài khoản của bạn có các quyền Cloud IAM cần thiết trong dự án nguồn và dự án đích. Nếu bạn là chủ sở hữu dự án của cả hai dự án, tài khoản của bạn có các quyền cần thiết. Mặt khác, các vai trò Cloud IAM sau sẽ cấp các quyền cần thiết cho hoạt động xuất và nhập của Cloud Firestore:

    Owner , Cloud Datastore Owner hoặc Cloud Datastore Import Export Admin

    Chủ dự án có thể cấp một trong các vai trò này bằng cách làm theo các bước trong Cấp quyền truy cập .

  3. Thiết lập công cụ dòng lệnh gcloud và kết nối với dự án của bạn theo một trong các cách sau:

  4. Thiết lập các chỉ mục trong dự án mới của bạn. Các chỉ mục tổng hợp phải khớp giữa dự án nguồn và dự án đích. Nên thiết lập chỉ mục trước để tránh phải xử lý từng tài liệu nhiều lần.

Xuất dữ liệu từ dự án nguồn

Xuất dữ liệu của bạn bằng cách tạo nhóm Cloud Storage cho các tệp xuất Cloud Firestore của bạn và bắt đầu thao tác xuất.

Tạo nhóm lưu trữ đám mây

Tạo nhóm Lưu trữ đám mây ở cùng vị trí với cơ sở dữ liệu Cloud Firestore của bạn. Để xem vị trí cơ sở dữ liệu của bạn, hãy xem cài đặt vị trí dự án của bạn. Bạn không thể sử dụng nhóm Người yêu cầu thanh toán cho các hoạt động xuất và nhập.

Nếu bộ chứa Cloud Storage không có trong dự án nguồn của bạn thì bạn phải cấp cho tài khoản dịch vụ mặc định của dự án nguồn quyền truy cập vào bộ chứa. Mỗi dự án Google Cloud có một tài khoản dịch vụ mặc định được tạo tự động với tên PROJECT_ID @appspot.gserviceaccount.com . Hoạt động xuất của Cloud Firestore sử dụng tài khoản dịch vụ mặc định này để ủy quyền cho các hoạt động của nhóm Cloud Storage. Để cấp cho tài khoản dịch vụ mặc định quyền truy cập vào nhóm nguồn của bạn, hãy cấp cho tài khoản đó vai trò Storage Admin .

Bạn có thể cấp vai trò này bằng công cụ gsutil có sẵn trong Cloud Shell:

Khởi động Cloud Shell

gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\
gs://[BUCKET_NAME]@

Bạn cũng có thể cấp vai trò này trong bảng điều khiển Google Cloud .

Tắt thao tác ghi (tùy chọn)

Nếu ứng dụng của bạn tiếp tục ghi vào cơ sở dữ liệu trong khi bạn thực hiện thao tác xuất, thì bạn có thể không ghi lại được tất cả những lần ghi đó vào tệp xuất của mình. Để xuất dữ liệu từ trạng thái nhất quán, hãy tắt tính năng ghi vào cơ sở dữ liệu của bạn bằng cách cập nhật các quy tắc bảo mật và tạm dừng mọi hoạt động SDK quản trị.

  1. Cập nhật các quy tắc bảo mật

    Trong tab Quy tắc Cloud Firestore của bảng điều khiển, hãy cập nhật các quy tắc bảo mật dự án nguồn của bạn để từ chối tất cả hoạt động ghi. Ví dụ:

      // Deny write access to all users under any conditions
      service cloud.firestore {
        match /databases/{database}/documents {
          match /{document=**} {
            allow write: if false;
          }
          // Reads do not affect export operations
          // Add your read rules here
        }
      }
    
  2. Dừng ghi từ SDK quản trị

    Các quy tắc bảo mật không ngăn việc ghi đến từ môi trường máy chủ đặc quyền được tạo bằng SDK quản trị Firebase hoặc Thư viện máy khách Google Cloud Server . Đảm bảo tạm dừng hoạt động ghi từ máy chủ quản trị của bạn bằng cách tắt hoặc cập nhật máy chủ của bạn.

Bắt đầu hoạt động xuất khẩu

Sử dụng lệnh gcloud firestore export để xuất dữ liệu từ dự án nguồn của bạn. Bạn có thể xuất tất cả dữ liệu của mình hoặc chỉ các bộ sưu tập cụ thể. Thay thế [SOURCE_BUCKET] bằng tên của nhóm Lưu trữ đám mây của bạn:

Xuất tất cả dữ liệu
gcloud firestore export gs://[SOURCE_BUCKET] --async
Xuất các bộ sưu tập cụ thể
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

Hãy lưu ý đến outputURIPrefix của hoạt động xuất của bạn vì bạn sẽ sử dụng nó sau này. Theo mặc định, Cloud Firestore thêm bản sửa lỗi trước vào tệp xuất của bạn dựa trên dấu thời gian:

outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418

Khi hoạt động xuất chạy, bạn có thể sử dụng lệnh firestore operations list để xem tiến trình hoạt động của mình:

gcloud firestore operations list

Nhập dữ liệu vào dự án đích

Tiếp theo, cấp cho dự án đích quyền truy cập vào tệp dữ liệu Cloud Firestore của bạn và bắt đầu thao tác nhập.

Cấp cho dự án đích quyền truy cập vào các tệp dữ liệu của bạn

Trước khi có thể bắt đầu thao tác nhập, bạn phải đảm bảo dự án đích có thể truy cập các tệp dữ liệu Cloud Firestore của bạn.

Di chuyển tệp dữ liệu sang một nhóm cục bộ

Nếu vị trí nhóm nguồn của bạn khác với vị trí Cloud Firestore của dự án đích, bạn phải di chuyển các tệp dữ liệu của mình sang nhóm Cloud Storage ở cùng vị trí với dự án đích.

Di chuyển các tệp dữ liệu của bạn sang một bộ chứa Cloud Storage khác bằng cách làm theo các bước trong Di chuyển và đổi tên bộ chứa . Đối với tất cả các bước sau, hãy sử dụng nhóm mới này làm [SOURCE_BUCKET] .

Cấp cho tài khoản dịch vụ dự án quyền truy cập vào nhóm nguồn của bạn

Nếu nhóm nguồn của bạn không có trong dự án đích thì bạn phải cấp cho tài khoản dịch vụ mặc định của dự án đích quyền truy cập vào nhóm nguồn của mình. Tài khoản dịch vụ mặc định có tên [DESTINATION_PROJECT_ID] @appspot.gserviceaccount.com . Để cấp cho tài khoản dịch vụ mặc định quyền truy cập vào nhóm nguồn của bạn, hãy cấp cho tài khoản đó quyền thích hợp để truy cập vào nhóm.

Bạn có thể cấp các vai trò cần thiết bằng công cụ gsutil có sẵn trong Cloud Shell:

Khởi động Cloud Shell

gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \
gs://[SOURCE_BUCKET]

Bạn cũng có thể cấp vai trò này trong bảng điều khiển Google Cloud .

Bắt đầu thao tác nhập

Trước khi bắt đầu thao tác nhập, hãy đảm bảo gcloud được định cấu hình cho đúng dự án:

gcloud config set project [DESTINATION_PROJECT_ID]

Sử dụng lệnh gcloud firestore import để nhập dữ liệu trong nhóm nguồn vào dự án đích của bạn:

gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async

Trong đó [EXPORT_PREFIX] khớp với bản sửa lỗi trước trong outputUriPrefix của hoạt động xuất của bạn. Ví dụ:

gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async

Khi hoạt động xuất chạy, bạn có thể sử dụng lệnh firestore operations list để xem tiến trình hoạt động của mình:

gcloud firestore operations list