এই পৃষ্ঠায় আপনার Cloud Firestore ডেটার এক্সপোর্ট শিডিউল করার পদ্ধতি বর্ণনা করা হয়েছে। একটি নির্দিষ্ট সময়সূচী অনুযায়ী এক্সপোর্ট চালানোর জন্য, আমরা Cloud Functions এবং Cloud Scheduler ব্যবহার করার পরামর্শ দিই।
শুরু করার আগে
পরিচালিত ডেটা রপ্তানির সময়সূচী নির্ধারণ করার আগে, আপনাকে অবশ্যই নিম্নলিখিত কাজগুলি সম্পন্ন করতে হবে:
- আপনার Google Cloud প্রোজেক্টের জন্য বিলিং চালু করুন। শুধুমাত্র বিলিং চালু থাকা Google Cloud প্রোজেক্টগুলোই এক্সপোর্ট এবং ইম্পোর্ট ফিচারটি ব্যবহার করতে পারবে।
- এক্সপোর্ট অপারেশনের জন্য একটি গন্তব্য Cloud Storage বাকেট প্রয়োজন। আপনার Cloud Firestore ডেটাবেস অবস্থানের কাছাকাছি একটি স্থানে Cloud Storage বাকেট তৈরি করুন । আপনি এক্সপোর্ট অপারেশনের জন্য 'রিকোয়েস্টার পেজ' বাকেট ব্যবহার করতে পারবেন না।
একটি ক্লাউড ফাংশন এবং একটি Cloud Scheduler জব তৈরি করুন
Cloud Firestore ডেটা এক্সপোর্ট শুরু করার জন্য একটি Node.js ক্লাউড ফাংশন এবং সেই ফাংশনটিকে কল করার জন্য একটি Cloud Scheduler জব তৈরি করতে নিচের ধাপগুলো অনুসরণ করুন:
ফায়ারবেস সিএলআই
Firebase CLI ইনস্টল করুন । একটি নতুন ডিরেক্টরিতে, Cloud Functions জন্য CLI চালু করুন:
firebase init functions --project PROJECT_ID
- ভাষা হিসেবে জাভাস্ক্রিপ্ট নির্বাচন করুন।
- ঐচ্ছিকভাবে, ESLint সক্রিয় করুন।
- নির্ভরতা ইনস্টল করতে
yচাপুন।
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'); }); });
- উপরের কোডে, নিম্নলিখিত পরিবর্তন করুন:
-
BUCKET_NAMEজায়গায় আপনার বাকেটের নামটি বসান। -
YOUR_PROJECT_IDএর জায়গায় আপনার প্রজেক্ট আইডি বসান। - আপনার এক্সপোর্ট শিডিউল সেট করতে
every 24 hoursপর পরিবর্তন করুন। AppEngine cron.yaml সিনট্যাক্স অথবা unix-cron ফরম্যাট (* * * * *) ব্যবহার করুন। শুধুমাত্র নির্দিষ্ট কালেকশন গ্রুপগুলো এক্সপোর্ট করতে
collectionIds: []পরিবর্তন করুন। সমস্ত কালেকশন গ্রুপ এক্সপোর্ট করতে অপরিবর্তিত রাখুন।
-
নির্ধারিত ফাংশনটি স্থাপন করুন:
firebase deploy --only functions
গুগল ক্লাউড কনসোল
একটি ক্লাউড ফাংশন তৈরি করুন
Google Cloud কনসোলে ক্লাউড ফাংশন পৃষ্ঠায় যান:
- একটি ফাংশন লিখুন -এ ক্লিক করুন
-
firestore-exportএর মতো একটি ফাংশনের নাম লিখুন। - ট্রিগার- এর অধীনে, ক্লাউড পাব/সাব নির্বাচন করুন।
- ‘টপিক’-এর অধীনে, ‘ক্রিয়েট নিউ টপিক’ নির্বাচন করুন। পাব/সাব টপিকটির জন্য একটি নাম লিখুন, যেমন
initiateFirestoreExport। টপিকের নামটি মনে রাখুন, কারণ আপনার Cloud Scheduler জব তৈরি করার জন্য এটি প্রয়োজন হবে। - সোর্স কোডের অধীনে, ইনলাইন এডিটর নির্বাচন করুন।
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 collection groups // or define a list of collection group 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: []পরিবর্তন করুন। সমস্ত কালেকশন গ্রুপ এক্সপোর্ট করতে অপরিবর্তিত রাখুন।
-
-
package.jsonফাইলে নিম্নলিখিত ডিপেন্ডেন্সিটি যোগ করুন:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } } - `Function to execute`-এর অধীনে,
scheduledFirestoreExportলিখুন, যাindex.jsএ থাকা ফাংশনটির নাম। - ক্লাউড ফাংশনটি স্থাপন করতে Create-এ ক্লিক করুন।
একটি Cloud Scheduler জব তৈরি করুন
এরপরে, একটি Cloud Scheduler জব তৈরি করুন যা আপনার ক্লাউড ফাংশনটিকে কল করবে:
গুগল ক্লাউড কনসোলে Cloud Scheduler পৃষ্ঠায় যান:
- জব তৈরি করুন -এ ক্লিক করুন।
- জবটির জন্য একটি নাম লিখুন, যেমন
scheduledFirestoreExport। - একটি পুনরাবৃত্তির সময় লিখুন, যেমন,
every 24 hours। - একটি সময় অঞ্চল নির্বাচন করুন।
- টার্গেট (Target)-এর অধীনে, পাব/সাব (Pub/Sub) নির্বাচন করুন। টপিক (Topic) ফিল্ডে, আপনার ক্লাউড ফাংশনের পাশাপাশি সংজ্ঞায়িত পাব/সাব টপিকের নামটি লিখুন, যেমনটি উপরের উদাহরণে
initiateFirestoreExportক্ষেত্রে হয়েছে। - Payload ফিল্ডে,
start exportলিখুন। জবটির জন্য একটি পেলোড নির্ধারণ করা প্রয়োজন, কিন্তু উপরের ক্লাউড ফাংশনটি আসলে এই মানটি ব্যবহার করে না। - তৈরি করুন- এ ক্লিক করুন।
অ্যাক্সেস অনুমতি কনফিগার করুন
এরপরে, ক্লাউড ফাংশনটিকে এক্সপোর্ট অপারেশন শুরু করার এবং আপনার 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 শুরু করুন
ক্লাউড ডেটাস্টোর ইম্পোর্ট এক্সপোর্ট অ্যাডমিন রোলটি অ্যাসাইন করুন। PROJECT_ID প্রতিস্থাপন করুন এবং নিম্নলিখিত কমান্ডটি চালান:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
আপনার বাকেটে স্টোরেজ অ্যাডমিন রোলটি অ্যাসাইন করুন। 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 সার্ভিস অ্যাকাউন্টটি নিষ্ক্রিয় করে থাকেন, তবে আপনি এটি পুনরায় সক্রিয় করতে পারেন; একটি সার্ভিস অ্যাকাউন্ট সক্রিয় করা দেখুন। আপনি যদি গত ৩০ দিনের মধ্যে আপনার App Engine সার্ভিস অ্যাকাউন্টটি মুছে ফেলে থাকেন, তবে আপনি আপনার সার্ভিস অ্যাকাউন্টটি পুনরুদ্ধার করতে পারেন; একটি সার্ভিস অ্যাকাউন্ট আনডিলিট করা দেখুন।
আপনার Cloud Scheduler জব এবং ক্লাউড ফাংশন পরীক্ষা করুন
আপনি গুগল ক্লাউড কনসোলের Cloud Scheduler পেজে আপনার Cloud Scheduler জবটি পরীক্ষা করতে পারেন।
গুগল ক্লাউড কনসোলে Cloud Scheduler পৃষ্ঠায় যান।
Cloud Scheduler যানআপনার নতুন Cloud Scheduler জবের সারিতে, 'Run now'-এ ক্লিক করুন।
কয়েক সেকেন্ড পর, Cloud Scheduler জবটি রেজাল্ট কলামটি ' সাকসেস ' এবং লাস্ট রান- কে বর্তমান সময়ে আপডেট করবে। আপনার রিফ্রেশ-এ ক্লিক করার প্রয়োজন হতে পারে।
Cloud Scheduler পেজটি শুধু নিশ্চিত করে যে জবটি আপনার ক্লাউড ফাংশনকে কল করেছে। আপনার ফাংশনের লগ দেখতে ক্লাউড ফাংশন পেজটি খুলুন।
ক্লাউড ফাংশন লগগুলি দেখুন
ক্লাউড ফাংশনটি সফলভাবে এক্সপোর্ট অপারেশন শুরু করেছে কিনা তা দেখতে, ফাংশনটির লগ খুলুন:
ফায়ারবেস কনসোল
Firebase কনসোলে Cloud Functions পৃষ্ঠায় যান।
জিসিপি কনসোল
গুগল ক্লাউড কনসোলে Cloud Functions পৃষ্ঠায় যান।
রপ্তানির অগ্রগতি দেখুন
আপনার এক্সপোর্ট অপারেশনগুলোর অগ্রগতি দেখতে আপনি gcloud firestore operations list কমান্ডটি ব্যবহার করতে পারেন, এক্সপোর্ট এবং ইম্পোর্ট অপারেশন পরিচালনা দেখুন।
এক্সপোর্ট অপারেশন সম্পন্ন হওয়ার পর, আপনি আপনার Cloud Storage বাকেটে আউটপুট ফাইলগুলো দেখতে পারবেন:
Cloud Storage ব্রাউজারটি খুলুন