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

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

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

با دنبال کردن مراحل انتقال و تغییر نام سطل ها، فایل های داده خود را به سطل ذخیره سازی ابری دیگر منتقل کنید. برای تمام مراحل زیر، از این سطل جدید به عنوان [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