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ừ một dự án này sang một dự án khác. Điều này có thể hữu ích khi thiết lập môi trường phát triển hoặc là một phần của di chuyển vĩnh viễn một ứng dụng sang một dự án khác. Ví dụ trên trang này minh hoạ cách xuất dữ liệu từ dự án nguồn rồi nhập dữ liệu đó vào một 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 một bộ chứa 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 sang bộ chứa.
  3. Cấp cho dự án đích quyền đọc từ bộ chứa.
  4. Nhập dữ liệu từ bộ chứa vào dự án đích.

Trước khi bắt đầu

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

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

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

    Chủ sở hữu dự án có thể cấp một trong các vai trò này bằng cách làm theo 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 chỉ mục trong dự án mới của bạn. Chỉ mục tổng hợp phải khớp với giữa dự án nguồn và dự án đích. Bạn phải thiết lập chỉ mụ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 bằng cách tạo một bộ chứa Cloud Storage cho Tệp xuất trong Cloud Firestore và bắt đầu một thao tác xuất.

Tạo bộ chứa Cloud Storage

Tạo một Bộ chứa Cloud Storage ở cùng vị trí với Cloud Firestore của bạn cơ sở dữ liệu. Để xem vị trí cơ sở dữ liệu của bạn, hãy xem chế độ cài đặt vị trí dự án. Bạn không thể sử dụng bộ chứa 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 của bạn không nằm trong dự án nguồn, bạn phải cung cấp quyền truy cập mặc định vào bộ chứa đối với tài khoản dịch vụ. Từng dự án trên Google Cloud có một tài khoản dịch vụ mặc định được tạo tự động tên là PROJECT_ID@appspot.gserviceaccount.com. Cloud Firestore hoạt động xuất sử dụng tài khoản dịch vụ mặc định này để ủy quyền cho Cloud Storage hoạt động của nhóm. Để cung cấp quyền truy cập của tài khoản dịch vụ mặc định vào bộ chứa nguồn của bạn, hãy cấp cho bộ chứa nguồn Storage Admin vai trò.

Bạn có thể cấp vai trò này bằng Công cụ gsutil có 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 (không bắt buộc)

Nếu ứng dụng tiếp tục ghi vào cơ sở dữ liệu trong khi bạn xuất dữ liệu bạn có thể không ghi lại tất cả các lượt ghi đó trong tệp xuất của mình. Người nhận xuất dữ liệu từ trạng thái nhất quán, tắt tính năng ghi vào cơ sở dữ liệu 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 của SDK quản trị.

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

    Trong Cloud Firestore Thẻ Quy tắc trong bảng điều khiển, hãy cập nhật các quy tắc bảo mật của dự án nguồn để từ chối tất cả viết. 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. Tạm dừng ghi từ SDK quản trị

    Quy tắc bảo mật không ngừng hoạt động ghi từ máy chủ có đặc quyền môi trường được tạo bằng cách sử dụng Quản trị viên Firebase SDK hoặc Google Cloud Máy khách Thư viện. Hãy nhớ tạm dừng các thao tác 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ủ.

Bắt đầu một thao tác xuất

Dùng lệnh gcloud firestore export để xuất từ dự án nguồn của bạn. Bạn có thể xuất tất cả dữ liệu hoặc chỉ xuất bộ sưu tập cụ thể. Thay thế [SOURCE_BUCKET] bằng tên của Bộ chứa Cloud Storage:

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

Hãy ghi lại outputURIPrefix của hoạt động xuất vì bạn sẽ sử dụng tính năng này sau. Theo mặc định, Cloud Firestore sẽ thêm một bản sửa lỗi sẵn vào dữ liệu 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 tác vụ xuất chạy, bạn có thể sử dụng firestore operations list để xem tiến trình của hoạt động:

gcloud firestore operations list

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

Tiếp theo, hãy cấp cho dự án đích quyền truy cập vào Tệp dữ liệu trên Cloud Firestore và bắt đầu một 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 một thao tác nhập, bạn phải đảm bảo dự án đích có thể truy cập vào Cloud Firestore tệp dữ liệu.

Di chuyển các tệp dữ liệu sang một bộ chứa cục bộ

Nếu vị trí bộ chứa nguồn của bạn khác với Vị trí trên Cloud Firestore của dự án đích, bạn phải di chuyển các tệp dữ liệu của bạn vào một bộ chứa Cloud Storage trong cùng một bộ chứa vị trí làm dự án đích của bạn.

Di chuyển các tệp dữ liệu của bạn sang một bộ chứa khác trong Cloud Storage 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 dùng bộ chứa mới này làm [SOURCE_BUCKET].

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

Nếu bộ chứa nguồn không nằm trong dự án đích, thì bạn phải cung cấp quyền truy cập tài khoản dịch vụ mặc định của dự án đích vào bộ chứa nguồn của bạn. Chiến lược phát hành đĩa đơn là tài khoản dịch vụ mặc định [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. Người nhận cấp cho tài khoản dịch vụ mặc định quyền truy cập vào bộ chứa nguồn của bạn, cấp cho nó quyền thích hợp để truy cập vào bộ chứa.

Bạn có thể cấp các vai trò cần thiết bằng Công cụ gsutil có 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 bạn đã định cấu hình gcloud cho đúng dự án:

gcloud config set project [DESTINATION_PROJECT_ID]

Dùng lệnh gcloud firestore import để nhập dữ liệu vào bộ chứa nguồn vào dự án đích:

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

Trong trường hợp [EXPORT_PREFIX] khớp với nội dung sửa lỗi trước trong thao tác xuất của bạn outputUriPrefix Ví dụ:

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

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

gcloud firestore operations list