১. সংক্ষিপ্ত বিবরণ
এই ল্যাবে, আপনি একটি ক্লাউড রান জব তৈরি করবেন এবং একটি ক্লাউড শিডিউলার জব সেট আপ করবেন। আপনি সেটআপ স্ক্রিপ্ট ব্যবহার করে সিম্বাল ইটস মেনু সার্ভিস ডেপ্লয় করবেন। আপনি এমন একটি ক্লাউড রান জব তৈরি করবেন যা সিম্বাল ইটস মেনু সার্ভিসে এপিআই (API) কল করবে। আপনি গুগল ক্লাউড সিএলআই (Google Cloud CLI) ব্যবহার করে জবটি এক্সিকিউট করবেন এবং এর জন্য একটি শিডিউল সেট আপ করবেন। আপনি লগ পর্যালোচনা করে এবং মেনু আইটেমগুলো ডিলিট হয়েছে কিনা তা নিশ্চিত করতে মেনু সার্ভিসে এপিআই কল করে এক্সিকিউশন যাচাই করবেন।
ক্লাউড রান জব বলতে কী বোঝায়?
ক্লাউড রান জব এমন একটি কন্টেইনার চালায় যা ওয়েব রিকোয়েস্ট পরিবেশন করে না, বরং অপারেশনাল কাজ বা ডেটা প্রসেসিং সম্পাদন করে। কন্টেইনারটি কাজটি চালাবে এবং কাজ শেষ হলে বন্ধ হয়ে যাবে।
পরিচ্ছন্নতা পরিষেবা কাজ
ক্লিনআপ সার্ভিস জবটি 'ফেলড' স্ট্যাটাসে থাকা মেনু আইটেমগুলো খুঁজে বের করে মুছে ফেলবে। যখন নতুন মেনু আইটেম তৈরি করা হয়, তখন সেটি খাদ্যদ্রব্য কিনা তা শনাক্ত করার জন্য ভিশন এপিআই (Vision API) ব্যবহার করে ছবিগুলো বিশ্লেষণ করা হয়। যে ছবিগুলো এই যাচাইকরণে ব্যর্থ হয়, সেগুলোর স্ট্যাটাস 'ফেলড'-এ আপডেট করা হবে এবং পরবর্তীতে ক্লিনআপ জব দ্বারা মুছে ফেলা হবে।

আপনি যা শিখবেন
এই ল্যাবে, আপনারা নিম্নলিখিত বিষয়গুলো করতে শিখবেন:
- ক্লাউড রান জব তৈরি করুন
- ক্লাউড রান জবগুলি সম্পাদন করুন
- ক্লাউড শিডিউলার জব তৈরি করুন
- কাজের সম্পাদন যাচাই করুন
পূর্বশর্ত
- এই ল্যাবটি করার জন্য ক্লাউড কনসোল এবং শেল এনভায়রনমেন্ট সম্পর্কে পূর্বজ্ঞান থাকা আবশ্যক।
- Cloud Run এবং Cloud Scheduler-এর পূর্ব অভিজ্ঞতা থাকলে সহায়ক, তবে তা আবশ্যক নয়।
২. সেটআপ এবং প্রয়োজনীয়তা
ক্লাউড প্রজেক্ট সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে। - আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
- এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
পরিবেশ সেটআপ
সার্চ বারের ডানদিকে থাকা আইকনটিতে ক্লিক করে ক্লাউড শেল সক্রিয় করুন।

ক্লাউড শেল থেকে, এই রিপো থেকে অ্যাপ্লিকেশন কোড ক্লোন করতে নিম্নলিখিত কমান্ডটি চালান এবং মেনু সার্ভিসটি যে ডিরেক্টরিতে রয়েছে সেখানে যান:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
সেটআপ স্ক্রিপ্ট ব্যবহার করে ক্লাউড রান-এ মেনু সার্ভিসটি ডিপ্লয় করুন। মেনু সার্ভিসটি হলো একটি জাভা-ভিত্তিক মাইক্রোসার্ভিস, যা কোয়ার্কাস ফ্রেমওয়ার্ক দিয়ে তৈরি এবং এর ব্যাকএন্ডের জন্য ক্লাউড এসকিউএল পোস্টগ্রেস ডেটাবেস ব্যবহার করা হয়েছে। পরবর্তী ধাপগুলোতে আপনি যে ক্লাউড রান জবটি তৈরি করবেন, তার জন্য মেনু সার্ভিসটি একটি রানটাইম ডিপেন্ডেন্সি।
./setup.sh
প্রয়োজনীয় সকল উপাদান তৈরি করতে ডেপ্লয়মেন্টটিতে প্রায় ১০ মিনিট সময় লাগবে।
উপরের কমান্ডটি কার্যকর করার পর পরবর্তী ধাপগুলো অনুসরণ করুন।
৩. ক্লাউড রান জব কোড অন্বেষণ করুন
প্লাস আইকনে ক্লিক করে ক্লাউড শেলে একটি নতুন ট্যাব খুলুন।

ক্লিনআপ সার্ভিসটি যে ডিরেক্টরিতে রয়েছে সেখানে যান এবং জবটি গঠনকারী ফাইলগুলো পর্যালোচনা করুন:
cd ~/cymbal-eats/cleanup-service
এই ডিরেক্টরিতে থাকা cleanup-service-এ একটি Dockerfile রয়েছে, যা প্রয়োজনীয় ডিপেন্ডেন্সি (httpie, jq) সহ ক্লিনআপ সার্ভিস জবের জন্য কন্টেইনার ইমেজ নির্ধারণ করে।
ডকারফাইল
FROM ubuntu:latest
RUN apt-get update && apt-get install -y httpie jq && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
নীচে তালিকাভুক্ত প্রকৃত ক্লিনআপ স্ক্রিপ্টটিতে, ব্যর্থ অবস্থায় থাকা মেনু আইটেমগুলির একটি তালিকা পেতে এবং মেনু পরিষেবাতে API কল করে সেগুলিকে মুছে ফেলার কমান্ড রয়েছে।
স্ক্রিপ্ট.এসএইচ
echo "FAILED_ITEM_AGE=$FAILED_ITEM_AGE"
echo "MENU_SERVICE_URL=$MENU_SERVICE_URL"
# Failed items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/failed | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber) )| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
# Processing items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/processing | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber))| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
স্ক্রিপ্টটি সম্পর্কে নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:
- ডেপ্লয়মেন্টের সময়
FAILED_ITEM_AGEএবংMENU_SERVICE_URLএনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করা হবে এবং ক্লাউড রান জবের মাধ্যমে পাস করা হবে। -
FAILED_ITEM_AGE- ব্যর্থ আইটেমটি মুছে ফেলার আগে মিনিটের সংখ্যা। -
MENU_SERVICE_URL- Cymbal Eats মেনু পরিষেবার ইউআরএল।
৪. ক্লাউড রান জব তৈরি করুন
এরপরে আপনি একটি কন্টেইনার ইমেজ তৈরি করে আর্টিফ্যাক্ট রেজিস্ট্রি-তে প্রকাশ করবেন।
এই কন্টেইনার ইমেজটি একটি ক্লাউড রান জব তৈরি করতে ব্যবহৃত হবে।
সার্ভিস এপিআই সক্রিয় করুন:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudscheduler.googleapis.com \
--quiet
পরিবেশ ভেরিয়েবল সেট করুন:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service
ক্লিনআপ কাজের জন্য ডকার ইমেজ সংরক্ষণ করতে একটি নতুন আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করুন:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
ক্লাউড বিল্ড ব্যবহার করে কন্টেইনার ইমেজ তৈরি করুন এবং একটি কমান্ডের মাধ্যমে আর্টিফ্যাক্ট রেজিস্ট্রি-তে পুশ করুন:
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest
উদাহরণ আউটপুট:
DURATION: 35S SOURCE: gs://cymbal-eats-14906-569_cloudbuild/source/1657126400.933586-dc3e91ec85934a55bb6d2f7012611365.tgz IMAGES: us-east1-docker.pkg.dev/cymbal-eats-14906-569/cymbal-eats/cleanup-service (+1 more) STATUS: SUCCESS
প্রকাশ করা হয়ে গেলে, আর্টিফ্যাক্ট রেজিস্ট্রি- তে যান এবং প্রকাশিত ছবিটি পর্যালোচনা করুন:

দ্বিতীয় ক্লাউড শেল ট্যাবে ফিরে যান। মেনু সার্ভিস বর্ণনা করতে নিম্নলিখিত কমান্ডটি চালান এবং URL-টি এনভায়রনমেন্ট ভেরিয়েবলে সংরক্ষণ করুন। এই এনভায়রনমেন্ট ভেরিয়েবলটি ক্লাউড রান জব কনফিগার করতে ব্যবহৃত হবে।
MENU_SERVICE_URL=$(gcloud run services describe $MENU_SERVICE_NAME \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
১ মিনিটের বেশি পুরোনো ব্যর্থ মেনু আইটেমগুলো (যা FAILED_ITEM_AGE দ্বারা নির্ধারিত) পরিষ্কার করার জন্য একটি ক্লাউড রান জব তৈরি করুন।
gcloud beta run jobs create cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
উদাহরণ আউটপুট:
Creating Cloud Run job [cleanup-service] in project [cymbal-eats] region [us-east1] OK Creating job... Done. Done. Job [cleanup-service] has successfully been created.
কনসোলের ক্লাউড রান জবস (Cloud Run JOBS) বিভাগে যান এবং তৈরি করা জবটি পর্যালোচনা করুন।
জবটিতে ক্লিক করুন এবং উপলব্ধ ট্যাবগুলি দেখুন: হিস্ট্রি, লগস, কনফিগারেশন এবং ইয়ামল।

কনসোলে জবটির কনফিগারেশন সেকশন পর্যালোচনা করে এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করা হয়েছে কিনা তা যাচাই করুন:

(ঐচ্ছিক) ক্লাউড রান জব তৈরি হওয়ার পরে, আপনি যদি ফেইলড আইটেম এজ (Failed Item Age) অথবা মেনু সার্ভিস ইউআরএল (Menu Service URL) ভেরিয়েবলগুলো পরিবর্তন করতে চান, তাহলে আপডেট কমান্ডটি ব্যবহার করতে পারেন:
gcloud beta run jobs update cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
জবটি যাচাই করতে, নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড রান জবটি সম্পাদন করুন:
gcloud beta run jobs execute cleanup-service --region=$REGION
উদাহরণ আউটপুট:
OK Creating execution... Done. OK Provisioning resources... Done. Execution [cleanup-service-rlxs4] has successfully started running. View details about this execution by running: gcloud beta run jobs executions describe cleanup-service-rlxs4
জবটির আউটপুট পর্যালোচনা করতে LOGS ট্যাবে যান। লগগুলিতে আপনি Failed Item Age এবং Menu Service URL দেখতে পাবেন।

৫. ক্লাউড রান জবের জন্য একটি সময়সূচী নির্ধারণ করুন।
ক্লাউড শিডিউলার হলো একটি সম্পূর্ণভাবে পরিচালিত এন্টারপ্রাইজ-গ্রেড ক্রন জব শিডিউলার। এটি আপনাকে ব্যাচ, বিগ ডেটা জব, ক্লাউড ইনফ্রাস্ট্রাকচার অপারেশনসহ কার্যত যেকোনো ধরনের জব শিডিউল করার সুযোগ দেয়।
ক্লাউড শিডিউলার জব নিয়ে কাজ করার সময় একটি উত্তম নিরাপত্তা অনুশীলন হলো প্রতিটি জব আলাদা ক্রেডেনশিয়াল দিয়ে চালানো। এই ধাপে ক্লিনআপ শিডিউলার জবের ব্যবহারের জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন।
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
ক্লাউড শিডিউলার জবের ক্লাউড রান জবগুলোতে কল করার জন্য অনুমতির প্রয়োজন হবে।
ক্লাউড শিডিউলার জবে ব্যবহৃত সার্ভিস অ্যাকাউন্টটিকে Cloud Run Invoker রোল প্রদান করুন:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
এরপর আপনি ক্লিনিং সার্ভিস জবটি চালানোর জন্য একটি শিডিউল সেট করবেন।
ক্লাউড শিডিউলার একাধিক ধরনের টার্গেট সমর্থন করে।
- HTTP
- পাব/সাব
- অ্যাপ ইঞ্জিন HTTP
আপনি HTTP টার্গেট টাইপ ব্যবহার করে একটি শিডিউলার জব তৈরি করবেন।
প্রদর্শনের উদ্দেশ্যে আপনি এটিকে প্রতি ৫ মিনিট পর পর চলার জন্য সময়সূচী নির্ধারণ করবেন।
gcloud scheduler jobs create http cleanup-schedule \
--location $REGION \
--schedule="*/5 * * * *" \
--uri="https://$REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/$PROJECT_ID/jobs/cleanup-service:run" \
--http-method POST \
--oauth-service-account-email ${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
ক্লাউড রান জব কল করতে ব্যবহৃত uri প্যারামিটারটি পর্যালোচনা করুন:
-
REGIONএবংPROJECT_ID- ক্লাউড রান অঞ্চল এবং প্রজেক্ট আইডি যেখানে ক্লিনআপ সার্ভিস জবটি স্থাপন করা হয়েছে -
cleanup-service- ক্লাউড রান জবটির নাম
তৈরি করা শিডিউলার জবটি পর্যালোচনা করতে কনসোলে ক্লাউড শিডিউলার -এ যান:

অ্যাকশন মেনুর অধীনে উপলব্ধ বিকল্পগুলি পর্যালোচনা করুন।

৬. টেস্ট ক্লাউড রান জব
মেনু সার্ভিস এন্ডপয়েন্ট ব্যবহার করে বিদ্যমান মেনু আইটেম এবং তাদের অবস্থা পর্যালোচনা করুন:
curl ${MENU_SERVICE_URL}/menu | jq
আউটপুট:
আপনি ৩টি মেনু আইটেম Ready অবস্থায় দেখতে পাবেন।
মেনু আইটেম #১ এর স্ট্যাটাস Failed এ পরিবর্তন করুন:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
১ মিনিট অপেক্ষা করুন। মেনু আইটেমটি মুছে ফেলার জন্য, FAILED_ITEM_AGE প্যারামিটার দ্বারা নির্ধারিত সময় অনুযায়ী সেটির বয়স ১ মিনিট হতে হবে।
আপনি পরবর্তী নির্ধারিত রানের জন্য অপেক্ষা করতে পারেন অথবা কনসোল থেকে কাজটি জোরপূর্বক সম্পাদন করতে পারেন।
UI বা কমান্ড লাইন থেকে কোনো কাজ শুরু করার একাধিক উপায় রয়েছে।
এই উদাহরণের জন্য, কাজটি চালু করতে ক্লাউড শেলে কমান্ডটি চালান (বিকল্প #৩)।
- ক্লাউড শিডিউলার থেকে অ্যাকশনস মেনু থেকে 'ফোর্স এ জব রান' নির্বাচন করে।


- ক্লাউড শেল থেকে নিম্নলিখিত কমান্ডটি চালিয়ে:
gcloud beta run jobs execute cleanup-service --region=$REGION
Cloud Run JOBS বিভাগে যান, LOGS ট্যাবটি খুলুন এবং যাচাই করুন যে মেনু আইটেমটি মুছে ফেলা হয়েছে।

লগগুলো খুঁজে পেতে 'deleting' কীওয়ার্ড দিয়ে লগ ফিল্টার করুন।

REST এন্ডপয়েন্টের মাধ্যমে বিদ্যমান মেনু আইটেমগুলো পরীক্ষা করতে মেনু সার্ভিস এন্ডপয়েন্টগুলো ব্যবহার করুন।
curl ${MENU_SERVICE_URL}/menu | jq
আউটপুট:
আপনি ২টি মেনু আইটেম Ready অবস্থায় দেখতে পাবেন।
৭. অভিনন্দন!
অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!
আমরা যা আলোচনা করেছি:
- ক্লাউড রান জব কীভাবে তৈরি করবেন
- ক্লাউড রান জবগুলি কীভাবে কার্যকর করবেন
- ক্লাউড শিডিউলার জব তৈরি করার পদ্ধতি
- জব এক্সিকিউশন কীভাবে যাচাই করবেন
এরপর কী হবে:
Cymbal Eats-এর অন্যান্য কোডল্যাবগুলি অন্বেষণ করুন:
- ইভেন্টার্কের মাধ্যমে ক্লাউড ওয়ার্কফ্লো চালু করা
- ক্লাউড স্টোরেজ থেকে ইভেন্ট প্রসেসিং ট্রিগার করা
- ক্লাউড রান থেকে প্রাইভেট ক্লাউডএসকিউএল-এ সংযোগ স্থাপন
- ক্লাউড রান থেকে সম্পূর্ণ পরিচালিত ডেটাবেসগুলিতে সংযোগ স্থাপন
- আইডেন্টিটি অ্যাওয়্যার প্রক্সি (IAP) ব্যবহার করে সার্ভারলেস অ্যাপ্লিকেশন সুরক্ষিত করুন
- ক্লাউড রানে নিরাপদে স্থাপন করা
- ক্লাউড রান ইনগ্রেস ট্র্যাফিক সুরক্ষিত করা
- GKE অটোপাইলট থেকে ব্যক্তিগত AlloyDB-তে সংযোগ স্থাপন
পরিষ্কার করা
এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলো যে প্রজেক্টে রয়েছে সেটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্সগুলো ডিলিট করে দিন।
প্রকল্পটি মুছে ফেলা হচ্ছে
বিলিং বন্ধ করার সবচেয়ে সহজ উপায় হলো টিউটোরিয়ালের জন্য তৈরি করা প্রজেক্টটি ডিলিট করে দেওয়া।