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 sang dự án khác. Tính năng 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 quá trình 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ừ một dự án nguồn rồi nhập dữ liệu đó vào một dự án đích. Việc di chuyển dữ liệu giữa các dự án bao gồm các bước sau:
- Tạo một vùng chứa Cloud Storage để lưu giữ dữ liệu từ dự án nguồn.
- Xuất dữ liệu từ dự án nguồn sang vùng chứa.
- Cấp cho dự án đích quyền đọc từ bộ chứa.
- Nhập dữ liệu từ vùng chứa vào dự án đích.
Trước khi bắt đầu
Trước khi có thể sử dụng dịch vụ nhập và xuất được quản lý, bạn phải hoàn tất các tác vụ sau:
- Bật tính năng thanh toán cho cả dự án nguồn và dự án đích. Chỉ những Google Cloud dự án đã bật tính năng thanh toán mới có thể sử dụng chức năng nhập và xuất.
-
Đả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 cho cả hai dự án, thì tài khoản của bạn có các quyền cần thiết. 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 các thao tác nhập và xuất:
Owner(Chủ sở hữu),Cloud Datastore Owner(Chủ sở hữu Cloud Datastore) hoặcCloud Datastore Import Export Admin(Quản trị viên nhập/xuất Cloud Datastore)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 các bước trong bài viết Cấp quyền truy cập.
-
Thiết lập công cụ dòng lệnh
gcloudvà kết nối với dự án của bạn theo một trong những cách sau:-
Truy cập vào
gcloudtừ bảng điều khiển Google Cloud bằng Cloud Shell.Đảm bảo bạn đã định cấu hình
gcloudcho đúng dự án:gcloud config set project [SOURCE_PROJECT_ID]
-
-
Thiết lập chỉ mục trong dự án mới. Các chỉ mục tổng hợp phải khớp giữa dự án nguồn và dự án đích. Bạn 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 bằng cách tạo một Cloud Storage vùng chứa cho các tệp xuất Cloud Firestore và bắt đầu thao tác xuất.
Tạo một Cloud Storage vùng chứa
Tạo một Cloud Storage vùng chứa ở cùng vị trí với Cloud Firestore cơ sở dữ liệu. Để xem vị trí cơ sở dữ liệu, hãy xem chế độ cài đặt vị trí dự án . Bạn không thể sử dụng vùng chứa Người yêu cầu thanh toán cho các thao tác nhập và xuất.
Nếu vùng chứa Cloud Storage không nằm trong
dự án nguồn, bạn phải cấp quyền truy cập vào vùng chứa cho
tài khoản dịch vụ mặc định của dự án nguồn. Mỗi Google Cloud dự án
có một tài khoản dịch vụ mặc định được tạo tự động có tên là PROJECT_ID@appspot.gserviceaccount.com. Cloud Firestore
các thao tác xuất sử dụng tài khoản dịch vụ mặc định này để uỷ quyền cho Cloud Storage
các thao tác trên vùng chứa. Để cấp quyền truy cập vào bộ chứa nguồn cho tài khoản dịch vụ mặc định, hãy cấp cho tài khoản này vai trò
Storage Admin.
Bạn có thể cấp vai trò này bằng công cụ
gsutil
có trong 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 Google Cloud bảng điều khiển.
Tắt các thao tác ghi (không bắt buộc)
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, bạn có thể không ghi lại được tất cả các thao tác ghi đó trong tệp xuất. Để xuất dữ liệu từ một trạng thái nhất quán, hãy tắt các thao tác ghi vào cơ sở dữ liệu bằng cách cập nhật quy tắc bảo mật và dừng mọi thao tác SDK dành cho quản trị viên.
Cập nhật quy tắc bảo mật
Trong thẻ Rules (Quy tắc) của Cloud Firestore trong bảng điều khiển, hãy cập nhật quy tắc bảo mật của dự án nguồn để từ chối tất cả các thao tác ghi.Cloud Firestore 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 } }Dừng các thao tác ghi từ SDK quản trị
Quy tắc bảo mật không dừng các thao tác ghi đến từ môi trường máy chủ có đặc quyền được tạo bằng Firebase Admin SDK hoặc Thư viện ứng dụng máy khách máy chủ Google Cloud. Hãy nhớ dừng các thao tác ghi từ máy chủ quản trị bằng cách tắt hoặc cập nhật máy chủ.
Bắt đầu thao tác xuất
Sử dụng lệnh gcloud firestore export để xuất dữ liệu từ dự án nguồn. Bạn có thể xuất tất cả dữ liệu hoặc chỉ các nhóm bộ sưu tập cụ thể. Thay thế [SOURCE_BUCKET] bằng tên của vùng chứa
Cloud Storage của bạn:
- Xuất tất cả dữ liệu
-
gcloud firestore export gs://[SOURCE_BUCKET] --async
- Xuất các nhóm bộ sưu tập cụ thể
-
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] --async
Hãy ghi lại outputURIPrefix của thao tác xuất vì bạn sẽ sử dụng thông tin này sau. Theo mặc định, Cloud Firestore sẽ thêm tiền tố vào các tệp xuất
dựa trên dấu thời gian:
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
Khi thao tác xuất đang chạy, bạn có thể sử dụng lệnh firestore operations list để xem tiến trình của thao tác:
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 các tệp dữ liệu Cloud Firestore 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
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 vào các Cloud Firestore tệp dữ liệu.
Di chuyển tệp dữ liệu sang vùng chứa cục bộ
Nếu vị trí vùng chứa nguồn khác với vị trí Cloud Firestore của dự án đích, thì bạn phải di chuyển tệp dữ liệu sang một vùng chứa Cloud Storage ở cùng vị trí với dự án đích.
Di chuyển tệp dữ liệu sang một vùng chứa Cloud Storage khác bằng cách làm theo các bước
trong bài viết Di chuyển và đổi tên vùng chứa.
Đối với tất cả các bước sau, hãy sử dụng vùng chứa 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 vùng chứa nguồn
Nếu vùng chứa nguồn không nằm trong dự án đích, thì bạn phải cấp quyền truy cập vào vùng chứa nguồn cho tài khoản dịch vụ mặc định của dự án đích. Tài khoản dịch vụ mặc định có tên là
[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. Để cấp quyền truy cập vào bộ chứa nguồn cho tài khoản dịch vụ mặc định, hãy cấp cho tài khoản này các 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:
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 Google Cloud bảng điều khiển.
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]
Sử dụng lệnh gcloud firestore import để nhập dữ liệu trong vùng chứa nguồn vào dự án đích:
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async
Trong đó, [EXPORT_PREFIX] khớp với tiền tố trong outputUriPrefix của thao tác xuất. Ví dụ:
gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async
Khi thao tác xuất đang chạy, bạn có thể sử dụng lệnh firestore operations list để xem tiến trình của thao tác:
gcloud firestore operations list