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

این صفحه نحوه استفاده از ویژگی‌های مدیریت‌شده‌ی واردات و صادرات برای انتقال داده‌های 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 شما قرار دارد، ایجاد کنید. برای مشاهده موقعیت مکانی پایگاه داده، به تنظیمات موقعیت مکانی پروژه خود مراجعه کنید. شما نمی‌توانید از سطل Requester Pays برای عملیات صادرات و واردات استفاده کنید.

اگر سطل 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. به‌روزرسانی قوانین امنیتی

    در تب قوانین Cloud 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. نوشتن از SDK های مدیریتی متوقف می‌شود

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

شروع عملیات صادرات

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

صادرات تمام داده‌ها
gcloud firestore export gs://[SOURCE_BUCKET] --async
صادرات مجموعه‌های خاص
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_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 عملیات export شما مطابقت دارد. برای مثال:

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

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

gcloud firestore operations list