প্রকল্পগুলির মধ্যে ডেটা সরান

এই পৃষ্ঠায় বর্ণনা করা হয়েছে কীভাবে ম্যানেজড ইম্পোর্ট এবং এক্সপোর্ট ফিচার ব্যবহার করে Cloud Firestore ডেটা এক প্রজেক্ট থেকে অন্য প্রজেক্টে স্থানান্তর করা যায়। এটি একটি ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করার জন্য অথবা কোনো অ্যাপকে স্থায়ীভাবে অন্য প্রজেক্টে মাইগ্রেট করার অংশ হিসেবে কার্যকর হতে পারে। এই পৃষ্ঠার উদাহরণে দেখানো হয়েছে কীভাবে একটি সোর্স প্রজেক্ট থেকে ডেটা এক্সপোর্ট করে তারপর সেই ডেটা একটি ডেস্টিনেশন প্রজেক্টে ইম্পোর্ট করতে হয়। প্রজেক্টগুলোর মধ্যে ডেটা স্থানান্তরের জন্য নিম্নলিখিত ধাপগুলো অনুসরণ করতে হয়:

  1. আপনার সোর্স প্রজেক্টের ডেটা সংরক্ষণের জন্য একটি Cloud Storage বাকেট তৈরি করুন।
  2. আপনার উৎস প্রজেক্ট থেকে ডেটা বাকেটে রপ্তানি করুন।
  3. আপনার গন্তব্য প্রজেক্টকে বাকেট থেকে ডেটা পড়ার অনুমতি দিন।
  4. বাকেট থেকে ডেটা আপনার গন্তব্য প্রজেক্টে ইম্পোর্ট করুন।

শুরু করার আগে

পরিচালিত রপ্তানি ও আমদানি পরিষেবা ব্যবহার করার আগে, আপনাকে অবশ্যই নিম্নলিখিত কাজগুলি সম্পন্ন করতে হবে:

  1. আপনার উৎস প্রজেক্ট এবং গন্তব্য প্রজেক্ট উভয়ের জন্যই বিলিং চালু করুন। শুধুমাত্র বিলিং চালু থাকা Google Cloud প্রজেক্টগুলোই এক্সপোর্ট এবং ইম্পোর্ট কার্যকারিতা ব্যবহার করতে পারবে।
  2. আপনার সোর্স প্রজেক্ট এবং ডেস্টিনেশন প্রজেক্ট উভয় ক্ষেত্রেই আপনার অ্যাকাউন্টের প্রয়োজনীয় ক্লাউড আইএএম পারমিশন আছে কিনা তা নিশ্চিত করুন। আপনি যদি উভয় প্রজেক্টের প্রজেক্ট ওনার হন, তবে আপনার অ্যাকাউন্টে প্রয়োজনীয় পারমিশন রয়েছে। অন্যথায়, 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. নিরাপত্তা নিয়ম আপডেট করুন

    কনসোলের 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. Halt অ্যাডমিন 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_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