ডেটা রপ্তানির সময়সূচী

এই পৃষ্ঠাটি আপনার Cloud Firestore ডেটার রপ্তানির সময়সূচী কীভাবে নির্ধারণ করবেন তা বর্ণনা করে। একটি সময়সূচীতে রপ্তানি চালানোর জন্য, আমরা Cloud Functions এবং Cloud Scheduler ব্যবহার করার পরামর্শ দিই।

শুরু করার আগে

পরিচালিত ডেটা এক্সপোর্টের সময়সূচী নির্ধারণ করার আগে, আপনাকে নিম্নলিখিত কাজগুলি সম্পন্ন করতে হবে:

  1. আপনার Google Cloud প্রোজেক্টের জন্য বিলিং সক্ষম করুন। বিলিং সক্ষম থাকা Google Cloud প্রোজেক্টগুলিই কেবল এক্সপোর্ট এবং ইমপোর্ট বৈশিষ্ট্যটি ব্যবহার করতে পারবে।
  2. রপ্তানি কার্যক্রমের জন্য একটি গন্তব্য Cloud Storage বাকেট প্রয়োজন। আপনার Cloud Firestore ডাটাবেস অবস্থানের কাছাকাছি একটি স্থানে একটি Cloud Storage বাকেট তৈরি করুন । রপ্তানি কার্যক্রমের জন্য আপনি রিকোয়েস্টার পেস বাকেট ব্যবহার করতে পারবেন না।

একটি ক্লাউড ফাংশন এবং একটি Cloud Scheduler কাজ তৈরি করুন

নিচের ধাপগুলো অনুসরণ করে একটি Node.js ক্লাউড ফাংশন তৈরি করুন যা Cloud Firestore ডেটা এক্সপোর্ট শুরু করে এবং সেই ফাংশনটি কল করার জন্য একটি Cloud Scheduler জব তৈরি করে:

ফায়ারবেস সিএলআই
  1. Firebase CLI ইনস্টল করুন । একটি নতুন ডিরেক্টরিতে, Cloud Functions এর জন্য CLI আরম্ভ করুন:

    firebase init functions --project PROJECT_ID
    1. ভাষার জন্য জাভাস্ক্রিপ্ট নির্বাচন করুন।
    2. ঐচ্ছিকভাবে, ESLint সক্ষম করুন।
    3. নির্ভরতা ইনস্টল করতে y লিখুন।
  2. functions/index.js ফাইলের কোডটি নিম্নলিখিতটি দিয়ে প্রতিস্থাপন করুন:

    const functions = require('firebase-functions');
    const firestore = require('@google-cloud/firestore');
    const client = new firestore.v1.FirestoreAdminClient();
    
    // Replace BUCKET_NAME
    const bucket = 'gs://BUCKET_NAME';
    
    exports.scheduledFirestoreExport = functions.pubsub
                                                .schedule('every 24 hours')
                                                .onRun((context) => {
    
      const projectId = process.env.GCP_PROJECT;
      const databaseName = 
        client.databasePath(projectId, '(default)');
    
      return client.exportDocuments({
        name: databaseName,
        outputUriPrefix: bucket,
        // Leave collectionIds empty to export all collections
        // or set to a list of collection IDs to export,
        // collectionIds: ['users', 'posts']
        collectionIds: []
        })
      .then(responses => {
        const response = responses[0];
        console.log(`Operation Name: ${response['name']}`);
      })
      .catch(err => {
        console.error(err);
        throw new Error('Export operation failed');
      });
    });
  3. উপরের কোডে, নিম্নলিখিতগুলি সংশোধন করুন:
    • BUCKET_NAME এর পরিবর্তে আপনার বাকেটের নাম দিন।
    • YOUR_PROJECT_ID আপনার প্রজেক্ট আইডি দিয়ে প্রতিস্থাপন করুন।
    • আপনার রপ্তানি সময়সূচী সেট করতে every 24 hours অন্তর পরিবর্তন করুন। AppEngine cron.yaml সিনট্যাক্স অথবা unix-cron ফর্ম্যাট ( * * * * * ) ব্যবহার করুন।
    • শুধুমাত্র নির্দিষ্ট সংগ্রহ গোষ্ঠীগুলি রপ্তানি করতে collectionIds: [] পরিবর্তন করুন। সমস্ত সংগ্রহ রপ্তানি করতে যেমন আছে তেমনই ছেড়ে দিন।

  4. নির্ধারিত ফাংশনটি স্থাপন করুন:

    firebase deploy --only functions
গুগল ক্লাউড কনসোল
একটি ক্লাউড ফাংশন তৈরি করুন
  1. গুগল ক্লাউড কনসোলের ক্লাউড ফাংশন পৃষ্ঠায় যান:

    ক্লাউড ফাংশনে যান

  2. একটি ফাংশন লিখুন ক্লিক করুন
  3. firestore-export মতো একটি ফাংশনের নাম লিখুন।
  4. ট্রিগার এর অধীনে, ক্লাউড পাব/সাব নির্বাচন করুন
  5. Topic এর অধীনে, Create new Topic নির্বাচন করুন। pub/sub Topic এর জন্য একটি নাম লিখুন, যেমন initiateFirestoreExport । আপনার Cloud Scheduler কাজ তৈরি করার জন্য প্রয়োজনীয় টপিকের নামটি নোট করুন।
  6. সোর্স কোডের অধীনে, ইনলাইন এডিটর নির্বাচন করুন। index.js এর অধীনে নিম্নলিখিত কোডটি লিখুন:
    const firestore = require('@google-cloud/firestore');
    const client = new firestore.v1.FirestoreAdminClient();
    // Replace BUCKET_NAME
    const bucket = 'gs://BUCKET_NAME'
    
    exports.scheduledFirestoreExport = (event, context) => {
      const databaseName = client.databasePath(
        YOUR_PROJECT_ID,
        '(default)'
      );
    
      return client
        .exportDocuments({
          name: databaseName,
          outputUriPrefix: bucket,
          // Leave collectionIds empty to export all collections
          // or define a list of collection IDs:
          // collectionIds: ['users', 'posts']
          collectionIds: [],
        })
        .then(responses => {
          const response = responses[0];
          console.log(`Operation Name: ${response['name']}`);
          return response;
        })
        .catch(err => {
          console.error(err);
        });
    };
    উপরের কোডে, নিম্নলিখিতগুলি সংশোধন করুন:
    • BUCKET_NAME এর পরিবর্তে আপনার বাকেটের নাম দিন।
    • শুধুমাত্র নির্দিষ্ট সংগ্রহ গোষ্ঠীগুলি রপ্তানি করতে collectionIds: [] পরিবর্তন করুন। সমস্ত সংগ্রহ রপ্তানি করতে যেমন আছে তেমনই ছেড়ে দিন।

  7. package.json এর অধীনে, নিম্নলিখিত নির্ভরতা যোগ করুন:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. Function to execute এর অধীনে, index.js এ ফাংশনের নাম scheduledFirestoreExport লিখুন।
  9. ক্লাউড ফাংশন স্থাপন করতে তৈরি করুন এ ক্লিক করুন।
একটি Cloud Scheduler কাজ তৈরি করুন

এরপর, একটি Cloud Scheduler কাজ তৈরি করুন যা আপনার ক্লাউড ফাংশনকে কল করবে:

  1. গুগল ক্লাউড কনসোলে Cloud Scheduler পৃষ্ঠায় যান:

    Cloud Scheduler যান

  2. চাকরি তৈরি করুন ক্লিক করুন।
  3. কাজের জন্য একটি নাম লিখুন যেমন scheduledFirestoreExport
  4. উদাহরণস্বরূপ, every 24 hours একটি ফ্রিকোয়েন্সি লিখুন।
  5. একটি টাইমজোন নির্বাচন করুন।
  6. Target এর অধীনে, Pub/Sub নির্বাচন করুন। Topic ক্ষেত্রে, আপনার Cloud Function এর পাশাপাশি সংজ্ঞায়িত pub/sub বিষয়ের নাম লিখুন, উপরের উদাহরণে initiateFirestoreExport
  7. পেলোড ক্ষেত্রে, start export লিখুন। কাজের জন্য একটি পেলোড সংজ্ঞায়িত করা প্রয়োজন, কিন্তু উপরের ক্লাউড ফাংশনটি আসলে এই মানটি ব্যবহার করে না।
  8. তৈরি করুন ক্লিক করুন।
এই মুহুর্তে, আপনি আপনার ক্লাউড ফাংশন এবং Cloud Scheduler কাজটি স্থাপন করেছেন, কিন্তু রপ্তানি কার্যক্রম সম্পাদনের জন্য আপনার ক্লাউড ফাংশনের এখনও অ্যাক্সেস অনুমতির প্রয়োজন।

অ্যাক্সেসের অনুমতি কনফিগার করুন

এরপর, ক্লাউড ফাংশনকে এক্সপোর্ট কার্যক্রম শুরু করার এবং আপনার GCS বাকেটে লেখার অনুমতি দিন।

এই ক্লাউড ফাংশনটি আপনার প্রোজেক্টের ডিফল্ট সার্ভিস অ্যাকাউন্ট ব্যবহার করে এর এক্সপোর্ট অপারেশনগুলিকে প্রমাণীকরণ এবং অনুমোদন করে। যখন আপনি একটি প্রোজেক্ট তৈরি করেন, তখন আপনার জন্য নিম্নলিখিত নামে একটি ডিফল্ট সার্ভিস অ্যাকাউন্ট তৈরি করা হয়:

PROJECT_ID@appspot.gserviceaccount.com

এই পরিষেবা অ্যাকাউন্টটির রপ্তানি কার্যক্রম শুরু করতে এবং আপনার Cloud Storage বাকেটে লেখার জন্য অনুমতি প্রয়োজন। এই অনুমতিগুলি প্রদান করতে, ডিফল্ট পরিষেবা অ্যাকাউন্টে নিম্নলিখিত IAM ভূমিকাগুলি বরাদ্দ করুন:

  • Cloud Datastore Import Export Admin
  • বাকেটের Owner বা Storage Admin ভূমিকা

এই ভূমিকাগুলি নির্ধারণ করতে আপনি gcloud এবং gsutil কমান্ড-লাইন টুল ব্যবহার করতে পারেন।

যদি ইতিমধ্যেই ইনস্টল না করা থাকে, তাহলে আপনি Google Cloud কনসোলে Cloud Shell থেকে এই টুলগুলি অ্যাক্সেস করতে পারবেন:
Cloud Shell শুরু করুন

  1. ক্লাউড ডেটাস্টোর ইমপোর্ট এক্সপোর্ট অ্যাডমিন ভূমিকা বরাদ্দ করুন। PROJECT_ID প্রতিস্থাপন করুন, এবং নিম্নলিখিত কমান্ডটি চালান:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
  2. আপনার বাকেটের স্টোরেজ অ্যাডমিন ভূমিকা নির্ধারণ করুন। PROJECT_ID এবং BUCKET_NAME প্রতিস্থাপন করুন এবং নিম্নলিখিত কমান্ডটি চালান:

    gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \
        gs://BUCKET_NAME

যদি আপনি আপনার App Engine ডিফল্ট পরিষেবা অ্যাকাউন্টটি অক্ষম করেন বা মুছে ফেলেন, তাহলে আপনার App Engine অ্যাপটি আপনার Cloud Firestore ডাটাবেসে অ্যাক্সেস হারাবে। যদি আপনি আপনার App Engine পরিষেবা অ্যাকাউন্টটি অক্ষম করে থাকেন, তাহলে আপনি এটি পুনরায় সক্ষম করতে পারেন, একটি পরিষেবা অ্যাকাউন্ট সক্ষম করা দেখুন। যদি আপনি গত 30 দিনের মধ্যে আপনার App Engine পরিষেবা অ্যাকাউন্টটি মুছে ফেলে থাকেন, তাহলে আপনি আপনার পরিষেবা অ্যাকাউন্টটি পুনরুদ্ধার করতে পারেন, একটি পরিষেবা অ্যাকাউন্ট মুছে ফেলা বন্ধ করা দেখুন।

আপনার Cloud Scheduler কাজ এবং ক্লাউড ফাংশন পরীক্ষা করুন

আপনি গুগল ক্লাউড কনসোলের Cloud Scheduler পৃষ্ঠায় আপনার Cloud Scheduler কাজটি পরীক্ষা করতে পারেন।

  1. গুগল ক্লাউড কনসোলের Cloud Scheduler পৃষ্ঠায় যান।
    Cloud Scheduler যান

  2. আপনার নতুন Cloud Scheduler কাজের সারিতে, এখনই চালান ক্লিক করুন।

    কয়েক সেকেন্ড পরে, Cloud Scheduler জবটি ফলাফল কলামটিকে সাফল্য এবং শেষ রানকে বর্তমান সময়ে আপডেট করবে। আপনাকে রিফ্রেশ ক্লিক করতে হতে পারে।

Cloud Scheduler পৃষ্ঠাটি কেবলমাত্র নিশ্চিত করে যে কাজটি আপনার ক্লাউড ফাংশন নামে পরিচিত। আপনার ফাংশনের লগগুলি দেখতে ক্লাউড ফাংশন পৃষ্ঠাটি খুলুন।

ক্লাউড ফাংশন লগগুলি দেখুন

ক্লাউড ফাংশন সফলভাবে একটি রপ্তানি কার্যক্রম শুরু করেছে কিনা তা দেখতে, ফাংশনের লগগুলি খুলুন:

ফায়ারবেস কনসোল

ফায়ারবেস কনসোলের Cloud Functions পৃষ্ঠায় যান।

ফাংশন লগে যান

জিসিপি কনসোল

গুগল ক্লাউড কনসোলের Cloud Functions পৃষ্ঠায় যান।

লগ ভিউয়ারে যান

রপ্তানির অগ্রগতি দেখুন

আপনার রপ্তানি কার্যক্রমের অগ্রগতি দেখতে, রপ্তানি এবং আমদানি কার্যক্রম পরিচালনা দেখতে আপনি gcloud firestore operations list কমান্ড ব্যবহার করতে পারেন।

একটি এক্সপোর্ট অপারেশন সম্পন্ন হওয়ার পরে, আপনি আপনার Cloud Storage বাকেটের আউটপুট ফাইলগুলি দেখতে পারেন:

Cloud Storage ব্রাউজারটি খুলুন।