একাধিক প্রোজেক্টের মধ্যে ডেটা সরান

এই পৃষ্ঠায়, একটি প্রোজেক্ট থেকে অন্য প্রোজেক্টে 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 Firestore এক্সপোর্ট ফাইলের জন্য Cloud Storage বাকেট তৈরি করে এবং এক্সপোর্ট অপারেশন শুরু করে আপনার ডেটা এক্সপোর্ট করুন।

Cloud Storage বাকেট তৈরি করুন

আপনার Cloud Firestore ডেটাবেসের একই লোকেশনে একটি Cloud Storage বাকেট তৈরি করুন। আপনার ডেটাবেসের লোকেশন দেখতে, আপনার প্রোজেক্ট লোকেশন সেটিং দেখুন। এক্সপোর্ট ও ইমপোর্ট অপারেশনের জন্য আপনি 'অনুরোধকারী পেমেন্ট করে' বা র‍্যাপিড বাকেট ব্যবহার করতে পারবেন না।

আপনার Cloud Storage বাকেট আপনার সোর্স প্রোজেক্টে না থাকলে, আপনাকে অবশ্যই সোর্স প্রোজেক্টের ডিফল্ট পরিষেবা অ্যাকাউন্টকে বাকেটের অ্যাক্সেস দিতে হবে। প্রতিটি Google Cloud প্রোজেক্টে PROJECT_ID@appspot.gserviceaccount.com নামে অটোমেটিক তৈরি হওয়া ডিফল্ট পরিষেবা অ্যাকাউন্ট থাকে। Cloud Firestore এক্সপোর্ট অপারেশন Cloud Storage বাকেট অপারেশনকে অনুমোদন দিতে এই ডিফল্ট পরিষেবা অ্যাকাউন্ট ব্যবহার করে। আপনার সোর্স বাকেটে ডিফল্ট পরিষেবা অ্যাকাউন্ট অ্যাক্সেস দিতে, এটিকে Storage Admin ভূমিকা প্রদান করুন।

আপনি Cloud Shell-এ উপলভ্য gsutil টুল ব্যবহার করে এই ভূমিকা প্রদান করতে পারবেন:

Cloud Shell শুরু করুন

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

এছাড়াও, আপনি Google Cloud কনসোলে এই ভূমিকা প্রদান করতে পারবেন।

রাইট অপারেশন বন্ধ করুন (ঐচ্ছিক)

আপনি এক্সপোর্ট অপারেশন করার সময় আপনার অ্যাপ যদি ডেটাবেসে ডেটা লেখা চালিয়ে যায়, তাহলে আপনি হয়ত এক্সপোর্ট ফাইলে সেইসব ডেটা ক্যাপচার করতে পারবেন না। একটি সামঞ্জস্যপূর্ণ অবস্থা থেকে ডেটা এক্সপোর্ট করতে, আপনার নিরাপত্তা নিয়ম আপডেট করে এবং যেকোনও অ্যাডমিন 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. অ্যাডমিন SDK থেকে রাইট করা বন্ধ করুন

    Firebase Admin SDK বা Google Cloud সার্ভার ক্লায়েন্ট লাইব্রেরি ব্যবহার করে তৈরি করা প্রিভিলেজড সার্ভার এনভায়রনমেন্ট থেকে আসা রাইট অপারেশনকে নিরাপত্তা সংক্রান্ত নিয়মাবলী আটকায় না। আপনার সার্ভার বন্ধ বা আপডেট করে আপনার অ্যাডমিন সার্ভার থেকে রাইট অপারেশন বন্ধ করতে ভুলবেন না।

এক্সপোর্ট অপারেশন শুরু করুন

আপনার সোর্স প্রোজেক্ট থেকে ডেটা এক্সপোর্ট করতে gcloud firestore export কমান্ড ব্যবহার করুন। আপনি নিজের সব ডেটা বা শুধুমাত্র নির্দিষ্ট কালেকশন গ্রুপ এক্সপোর্ট করতে পারবেন। [SOURCE_BUCKET]-এর জায়গায় আপনার Cloud Storage বাকেটের নাম লিখুন:

সব ডেটা এক্সপোর্ট করুন
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। আপনার সোর্স বাকেটে ডিফল্ট পরিষেবা অ্যাকাউন্ট অ্যাক্সেস দিতে, বাকেট অ্যাক্সেস করার জন্য এটিকে সঠিক অনুমতি দিন।

Cloud Shell-এ উপলভ্য gsutil টুল ব্যবহার করে আপনি প্রয়োজনীয় ভূমিকা মঞ্জুর করতে পারবেন:

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