এই পৃষ্ঠায় আপনার Cloud Firestore ডেটা এক্সপোর্ট করার শিডিউল কীভাবে করবেন তা বর্ণনা করা হয়েছে। শিডিউল অনুযায়ী এক্সপোর্ট করতে, আমরা Cloud Functions এবং Cloud Scheduler ব্যবহার করার সাজেশন দিই।
শুরু করার আগে
ম্যানেজ করা ডেটা এক্সপোর্ট শিডিউল করার আগে, আপনাকে নিম্নলিখিত টাস্ক সম্পূর্ণ করতে হবে:
- আপনার Google Cloud প্রোজেক্টের জন্য বিলিং চালু করুন। শুধুমাত্র Google Cloud বিলিং চালু থাকা প্রোজেক্ট এক্সপোর্ট ও ইম্পোর্ট ফিচার ব্যবহার করতে পারবে।
- এক্সপোর্ট অপারেশনের জন্য একটি ডেস্টিনেশন Cloud Storage বাকেট প্রয়োজন। আপনার Cloud Firestore ডেটাবেস লোকেশনের কাছাকাছি কোনও লোকেশনে একটি Cloud Storage বাকেট তৈরি করুন। এক্সপোর্ট অপারেশনের জন্য আপনি অনুরোধকারী পেমেন্ট করে এমন বাকেট ব্যবহার করতে পারবেন না।
Cloud Function এবং একটি Cloud Scheduler জব তৈরি করা
Node.js ক্লাউড ফাংশন তৈরি করতে এইসব ধাপ অনুসরণ করুন যা Cloud Firestore ডেটা এক্সপোর্ট ও Cloud Scheduler জব শুরু করে সেই ফাংশন কল করতে:
Firebase CLI
-
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 কনসোল
Cloud Function তৈরি করা
-
Google Cloud Console-এ Cloud Functions পৃষ্ঠায় যান:
- ফাংশন লিখুন বিকল্পে ক্লিক করুন
firestore-export-এর মতো কোনও ফাংশনের নাম লিখুন- ট্রিগার বিকল্পের অধীনে, Cloud Pub/Sub বেছে নিন
- বিষয় বিকল্পের মধ্যে, নতুন বিষয় তৈরি করুন বিকল্প বেছে নিন। Pub/Sub বিষয়ের জন্য
একটি নাম লিখুন, যেমন
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) => { // Access the GCLOUD_PROJECT environment variable set by the runtime. const projectId = process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT; // Use the DATABASE_ID environment variable if set, // otherwise default to '(default)' const databaseId = process.env.DATABASE_ID || '(default)'; const databaseName = client.databasePath( projectId, databaseId ); 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: []পরিবর্তন করুন। সব কালেকশন গ্রুপ এক্সপোর্ট করতে যেমন আছে তেমনই রেখে দিন। -
(ঐচ্ছিক) আপনি ডিফল্ট নয় এমন ডেটাবেস ব্যবহার করলে, Cloud Function তৈরি করার সময়
DATABASE_IDএনভায়রনমেন্ট ভেরিয়েবল সেট করেছেন কিনা নিশ্চিত করুন। আপনি যদি এমন রানটাইম ব্যবহার করেন যেখানেGOOGLE_CLOUD_PROJECTঅটোমেটিক সেট করা হয় না, তাহলে আপনাকে এটি ম্যানুয়ালি সেট করতে হতে পারে অথবা কোডে আপনার প্রোজেক্ট আইডি দিয়ে এটি পরিবর্তন করতে হতে পারে।
package.json-এর অধীনে, নিম্নলিখিত ডিপেন্ডেন্সি যোগ করুন:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }- এক্সিকিউট করার জন্য ফাংশন বিকল্পের অধীনে,
scheduledFirestoreExportলিখুন,index.js-এ ফাংশনের নাম। - ক্লাউড ফাংশন ডিপ্লয় করতে তৈরি করুন বিকল্পে ক্লিক করুন।
Cloud Scheduler জব তৈরি করুন
এরপর, একটি Cloud Scheduler জব তৈরি করুন যা আপনার Cloud Function-কে কল করে:
-
Google Cloud Console-এ Cloud Scheduler পৃষ্ঠায় যান:
- জব তৈরি করুন বিকল্পে ক্লিক করুন।
- জবের জন্য একটি নাম লিখুন, যেমন
scheduledFirestoreExport। - ফ্রিকোয়েন্সি লিখুন, যেমন,
every 24 hours। - টাইমজোন বেছে নিন।
- টার্গেট বিকল্পের অধীনে, Pub/Sub বেছে নিন। বিষয় ফিল্ডে,
আপনার Cloud Function-এর সাথে আপনি যে pub/sub বিষয়ের নাম উল্লেখ করেছেন সেটি লিখুন, আগের উদাহরণে
initiateFirestoreExport। - পেলোড ফিল্ডে
start exportলিখুন। জবের জন্য একটি পেলোড সংজ্ঞায়িত করা প্রয়োজন, কিন্তু পূর্ববর্তী Cloud Function আসলে এই মানটি ব্যবহার করে না। - তৈরি করুন বিকল্পে ক্লিক করুন।
অ্যাক্সেসের অনুমতি কনফিগার করুন
এরপর, এক্সপোর্ট অপারেশন শুরু করতে এবং আপনার GCS বাকেটে লিখতে Cloud Function-কে অনুমতি দিন।
এই Cloud Run ফাংশনটি এক্সপোর্ট অপারেশন যাচাই ও অনুমোদন করতে পরিষেবা অ্যাকাউন্ট ব্যবহার করে। ব্যবহৃত পরিষেবা অ্যাকাউন্ট আপনার Cloud Functions কনফিগারেশনের উপর নির্ভর করে:
- Cloud Functions (ফার্স্ট জেনারেশন): App Engine ডিফল্ট
পরিষেবা অ্যাকাউন্ট ব্যবহার করে:
PROJECT_ID@appspot.gserviceaccount.com - Cloud Functions (২য় জেনারেশন): ডিফল্ট Compute Engine
পরিষেবা অ্যাকাউন্ট ব্যবহার করে:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
এক্সপোর্ট অপারেশন শুরু করতে এবং আপনার Cloud Storage বাকেটে লিখতে এই পরিষেবা অ্যাকাউন্টের অনুমতি প্রয়োজন। এইসব অনুমতি দিতে, পরিষেবা অ্যাকাউন্টে নিম্নলিখিত IAM ভূমিকা অ্যাসাইন করুন:
Cloud Datastore Import Export Admin- বাকেটে
Storage Admin-এর ভূমিকা Cloud Run Invoker(ট্রিগার করা পরিষেবা যাতে ফাংশনটি চালু করতে পারে, তার জন্য Cloud Functions (২য় জেনারেশন)-এর ক্ষেত্রে প্রয়োজন)
এইসব ভূমিকা অ্যাসাইন করতে আপনি gcloud এবং gsutil কমান্ড-লাইন
টুল ব্যবহার করতে পারবেন।
আগে থেকে ইনস্টল করা না থাকলে, আপনি Google Cloud কনসোলে Cloud Shell থেকে এইসব
টুল অ্যাক্সেস করতে পারবেন:
শুরু করুন Cloud Shell
-
Cloud Datastore ইমপোর্ট এক্সপোর্ট অ্যাডমিন ভূমিকা অ্যাসাইন করুন। PROJECT_ID এবং SERVICE_ACCOUNT (যেমন,
PROJECT_ID@appspot.gserviceaccount.comবাPROJECT_NUMBER-compute@developer.gserviceaccount.com) পরিবর্তন করুন এবং নিম্নলিখিত কমান্ড রান করুন:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/datastore.importExportAdmin -
আপনার বাকেটে Storage Admin ভূমিকা অ্যাসাইন করুন। SERVICE_ACCOUNT এবং BUCKET_NAME পরিবর্তন করুন এবং নিম্নলিখিত কমান্ড রান করুন:
gsutil iam ch serviceAccount:SERVICE_ACCOUNT:admin \ gs://BUCKET_NAME -
(Cloud Functions (২য় জেনারেশন)-এর জন্য) পরিষেবা অ্যাকাউন্টে Cloud Run ইনভোকার ভূমিকা অ্যাসাইন করুন। PROJECT_ID এবং SERVICE_ACCOUNT পরিবর্তন করুন এবং এই কমান্ড রান করুন:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/run.invoker
আপনি App Engine ডিফল্ট পরিষেবা অ্যাকাউন্ট বন্ধ বা মুছে দিলে, আপনার App Engine অ্যাপ, Cloud Firestore ডেটাবেসে অ্যাক্সেস হারাবে। আপনার App Engine পরিষেবা অ্যাকাউন্ট বন্ধ করে দিলে, আপনি এটি আবার চালু করতে পারবেন, পরিষেবা অ্যাকাউন্ট চালু করা দেখুন। আপনি যদি গত ৩০ দিনের মধ্যে আপনার App Engine পরিষেবা অ্যাকাউন্ট মুছে দিয়ে থাকেন, তাহলে আপনার পরিষেবা অ্যাকাউন্ট ফিরিয়ে আনতে পারবেন, পরিষেবা অ্যাকাউন্ট ফিরিয়ে আনা দেখুন।
আপনার Cloud Scheduler জব ও Cloud Function পরীক্ষা করুন
আপনি Google Cloud কনসোলের Cloud Scheduler পৃষ্ঠা থেকে আপনার Cloud Scheduler জব টেস্ট করতে পারবেন।
Google Cloud Console-এ Cloud Scheduler পৃষ্ঠায় যান।
Cloud Scheduler-এ যানআপনার নতুন Cloud Scheduler কাজের সারিতে, এখনই রান করুন বিকল্পে ক্লিক করুন।
কয়েক সেকেন্ড পরে, Cloud Scheduler জবটি ফলাফল কলামকে সফল এবং শেষবার রান করা হয়েছে-কে বর্তমান সময়ে আপডেট করবে। আপনাকে হয়ত রিফ্রেশ করুন বিকল্পে ক্লিক করতে হবে।
Cloud Scheduler পৃষ্ঠাটি শুধুমাত্র কনফার্ম করে যে জবটি আপনার Cloud Function-কে কল করেছে। আপনার ফাংশনের লগ দেখতে Cloud Function পৃষ্ঠা খুলুন।
Cloud Function লগ দেখুন
Cloud Function এক্সপোর্ট অপারেশন সফলভাবে শুরু করেছে কিনা তা দেখতে, ফাংশনের লগ খুলুন:
Firebase কনসোল
Firebase কনসোলে, হোস্টিং ও সার্ভারলেস > ফাংশন বিকল্পে যান।
GCP Console
Google Cloud Console-এ Cloud Functions পৃষ্ঠায় যান।
এক্সপোর্ট প্রোগ্রেস দেখুন
আপনি gcloud firestore operations list কমান্ড ব্যবহার করে আপনার এক্সপোর্ট অপারেশনের
প্রোগ্রেস দেখতে পারবেন, এক্সপোর্ট ও ইমপোর্ট অপারেশন ম্যানেজ করা দেখুন।
এক্সপোর্ট অপারেশন সম্পূর্ণ হওয়ার পরে, আপনার Cloud Storage বাকেটে আউটপুট ফাইল দেখতে পারবেন: