انتقال داده بین پروژه‌ها

این صفحه نحوه استفاده از ویژگی‌های وارد کردن و صادر کردن مدیریت‌شده را برای انتقال داده‌های Cloud Firestore از یک پروژه به پروژه دیگر شرح می‌دهد. این کار می‌تواند برای راه‌اندازی محیط توسعه نرم‌افزار یا به‌عنوان بخشی از انتقال دائمی برنامه به پروژه‌ای دیگر مفید باشد. مثال موجود در این صفحه نشان می‌دهد که چگونه داده‌ها را از یک پروژه مبدأ صادر کنید و سپس آن داده‌ها را به یک پروژه مقصد وارد کنید. انتقال داده بین پروژه‌ها شامل مراحل زیر است:

  1. یک دسته Cloud Storage برای نگهداری داده‌های پروژه منبع خود ایجاد کنید.
  2. داده‌ها را از پروژه منبع به سطل صادر کنید.
  3. به پروژه مقصدتان اجازه دهید از سطل بخواند.
  4. داده‌ها را از سطل به پروژه مقصد وارد کنید.

قبل از شروع

قبل‌از اینکه بتوانید از سرویس صادر کردن و وارد کردن مدیریت‌شده استفاده کنید، باید کارهای زیر را تکمیل کنید:

  1. صورت‌حساب را هم برای پروژه مبدأ و هم برای پروژه مقصد فعال کنید. فقط پروژه‌های Google Cloud که صورت‌حساب برای آن‌ها فعال شده است می‌توانند از عملکرد صادر کردن و وارد کردن استفاده کنند.
  2. مطمئن شوید حسابتان اجازه‌های Cloud IAM لازم را در پروژه مبدأ و پروژه مقصد داشته باشد. اگر مالک پروژه برای هر دو پروژه هستید، حسابتان اجازه‌های لازم را دارد. درغیراین‌صورت، نقش‌های Cloud IAM زیر اجازه‌های لازم را برای عملیات صادر کردن و وارد کردن Cloud Firestore اعطا می‌کنند:

    ‫Owner، Cloud Datastore Owner، یا Cloud Datastore Import Export Admin

    مالک پروژه می‌تواند با دنبال کردن مراحل اعطای دسترسی، یکی از این نقش‌ها را اعطا کند.

  3. ابزار خط فرمان gcloud را راه‌اندازی کنید و به یکی از روش‌های زیر به پروژه‌تان متصل شوید:

  4. نمایه‌ها را در پروژه جدیدتان راه‌اندازی کنید. نمایه‌های ترکیبی باید بین پروژه‌های مبدأ و مقصد مطابقت داشته باشند. نمایه‌ها باید ابتدا راه‌اندازی شوند تا از پردازش چندباره هر سند جلوگیری شود.

صادر کردن داده‌ها از پروژه منبع

با ایجاد کردن یک سطل Cloud Storage برای فایل‌های صادرشده Cloud Firestore و شروع عملیات صادر کردن، داده‌هایتان را صادر کنید.

ایجاد کردن دسته Cloud Storage

یک Cloud Storage bucket در همان مکان پایگاه داده Cloud Firestore ایجاد کنید. برای مشاهده مکان پایگاه داده، تنظیم مکان پروژه را ببینید. نمی‌توانید از سطل «پرداخت‌کننده درخواست‌کننده» یا سطل سریع برای عملیات صادر کردن و وارد کردن استفاده کنید.

اگر دسته Cloud Storage در پروژه منبع شما نیست، باید به حساب سرویس پیش‌فرض پروژه منبع اجازه دسترسی به دسته را بدهید. هر پروژه Google Cloud یک حساب سرویس پیش‌فرض دارد که به‌طور خودکار با نام PROJECT_ID@appspot.gserviceaccount.com ایجاد شده است. Cloud Firestore عملیات صادر کردن از این حساب سرویس پیش‌فرض برای مجاز کردن عملیات دسته Cloud Storage استفاده می‌کند. برای اینکه به حساب سرویس پیش‌فرض اجازه دهید به سطل منبع دسترسی داشته باشد، نقش Storage Admin را به آن اعطا کنید.

می‌توانید این نقش را با ابزار gsutil موجود در Cloud Shell اعطا کنید:

شروع Cloud Shell

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

همچنین می‌توانید این نقش را در کنسول Google Cloud اعطا کنید.

غیرفعال کردن عملیات نوشتن (اختیاری)

اگر برنامه‌تان درحین انجام عملیات صادر کردن همچنان در پایگاه داده‌تان بنویسد، ممکن است همه آن نوشته‌ها را در فایل‌های صادرشده‌تان ضبط نکنید. برای صادر کردن داده‌ها از وضعیتی سازگار، با به‌روزرسانی قوانین امنیتی و متوقف کردن همه عملیات‌های Admin SDK، نوشتن در پایگاه داده را غیرفعال کنید.

  1. به‌روزرسانی قوانین امنیتی

    در کنسول Firebase، به پایگاه‌های داده و فضای ذخیره‌سازی > Firestore > برگه قوانین بروید.

    قوانین امنیتی پروژه منبع را به‌روز کنید تا همه نوشتن‌ها رد شود. برای مثال:

      // 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. توقف نوشتن از Admin SDK

    قوانین امنیتی مانع از نوشتن از محیط‌های سرور ممتاز ایجادشده بااستفاده از Firebase Admin SDK یا Google Cloud Server Client Library نمی‌شوند. با خاموش کردن یا به‌روزرسانی سرورهایتان، مطمئن شوید که عملیات نوشتن از سرورهای سرپرستتان متوقف شده است.

شروع عملیات برون‌بُرد گرفتن

از فرمان gcloud firestore export برای صادر کردن داده‌ها از پروژه منبع استفاده کنید. می‌توانید همه داده‌هایتان یا فقط گروه‌های مجموعه خاصی را صادر کنید. [SOURCE_BUCKET] را با نام Cloud Storage bucket خود جایگزین کنید:

صادر کردن همه داده‌ها
gcloud firestore export gs://[SOURCE_BUCKET] --async
صادر کردن گروه‌های مجموعه خاص
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] --async

outputURIPrefix عملیات صادر کردن را یادداشت کنید زیرا بعداً به آن نیاز خواهید داشت. به‌طور پیش‌فرض، Cloud Firestore براساس مُهر زمان، پیشوندی به فایل‌های صادرشده شما اضافه می‌کند:

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

وقتی عملیات صادر کردن اجرا می‌شود، می‌توانید از فرمان firestore operations list برای مشاهده پیشرفت عملیات استفاده کنید:

gcloud firestore operations list

وارد کردن داده‌ها به پروژه مقصد

سپس، به پروژه مقصد اجازه دهید به فایل‌های داده Cloud Firestore دسترسی داشته باشد و عملیات وارد کردن را شروع کنید.

به پروژه مقصد اجازه دهید به فایل‌های داده شما دسترسی داشته باشد

قبل‌از اینکه بتوانید عملیات وارد کردن را شروع کنید، باید مطمئن شوید پروژه مقصدتان می‌تواند به فایل‌های داده Cloud Firestore دسترسی داشته باشد.

انتقال فایل‌های داده به سطل محلی

اگر مکان دسته منبع شما با مکان Cloud Firestore پروژه مقصدتان متفاوت است، باید فایل‌های داده‌تان را به دسته Cloud Storage در همان مکان پروژه مقصدتان منتقل کنید.

با دنبال کردن مراحل انتقال و تغییر نام دسته‌ها، فایل‌های داده‌تان را به دسته Cloud Storage دیگری منتقل کنید. برای همه مراحل زیر، از این دسته جدید به‌عنوان [SOURCE_BUCKET] استفاده کنید.

به حساب سرویس پروژه اجازه دسترسی به سطل منبع بدهید

اگر دسته منبع شما در پروژه مقصدتان نیست، باید به حساب سرویس پیش‌فرض پروژه مقصد اجازه دسترسی به دسته منبعتان را بدهید. نام حساب سرویس پیش‌فرض [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com است. برای اعطای دسترسی به حساب سرویس پیش‌فرض به مخزن منبع، اجازه‌های مناسب برای دسترسی به مخزن را به آن اعطا کنید.

می‌توانید نقش‌های لازم را با ابزار gsutil موجود در Cloud Shell اعطا کنید:

شروع Cloud Shell

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

همچنین می‌توانید این نقش را در کنسول Google Cloud اعطا کنید.

شروع عملیات وارد کردن

قبل‌از شروع عملیات وارد کردن، مطمئن شوید gcloud برای پروژه صحیح پیکربندی شده باشد:

gcloud config set project [DESTINATION_PROJECT_ID]

از فرمان gcloud firestore import برای وارد کردن داده‌ها در سبد منبع به پروژه مقصد استفاده کنید:

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

که در آن [EXPORT_PREFIX] با پیشوند در outputUriPrefix عملیات برون‌برد شما مطابقت دارد. برای مثال:

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

وقتی عملیات صادر کردن اجرا می‌شود، می‌توانید از فرمان firestore operations list برای مشاهده پیشرفت عملیات استفاده کنید:

gcloud firestore operations list