ক্লাউড শিডিউলারের সাথে ক্লাউড রান জব ট্রিগার করা

1। সংক্ষিপ্ত বিবরণ

এই ল্যাবে, আপনি একটি ক্লাউড রান কাজ তৈরি করবেন এবং একটি ক্লাউড শিডিউলার কাজ সেট আপ করবেন। আপনি সেটআপ স্ক্রিপ্ট ব্যবহার করে Cymbal Eats মেনু পরিষেবা স্থাপন করবেন। আপনি একটি ক্লাউড রান কাজ তৈরি করবেন যা সিম্বল ইটস মেনু পরিষেবাতে API কল করে। আপনি Google Cloud CLI ব্যবহার করে কাজটি সম্পাদন করবেন এবং কাজের জন্য একটি সময়সূচী সেট আপ করবেন। আপনি লগ পর্যালোচনা করে এবং মেনু আইটেমগুলি মুছে ফেলা হয়েছে তা নিশ্চিত করতে মেনু পরিষেবাতে API কল করার মাধ্যমে সম্পাদন যাচাই করবেন৷

ক্লাউড রান কাজ কি?

ক্লাউড রান জব এমন একটি ধারক চালায় যা ওয়েব অনুরোধগুলি পরিবেশন করে না বরং অপারেশনাল কাজ বা ডেটা প্রক্রিয়াকরণ চালায়। ধারকটি কাজটি চালাবে এবং শেষ হলে প্রস্থান করবে।

ক্লিনআপ সার্ভিসের কাজ

ক্লিনআপ পরিষেবার কাজটি ব্যর্থ স্থিতিতে মেনু আইটেমগুলি পুনরুদ্ধার করবে এবং সেগুলি মুছে ফেলবে। যখন নতুন মেনু আইটেম তৈরি করা হয়, তখন এটি একটি খাদ্য আইটেম কিনা তা সনাক্ত করতে Vision API ব্যবহার করে চিত্রগুলি বিশ্লেষণ করা হয়। যে ছবিগুলি এই যাচাইকরণে ব্যর্থ হয়, মেনু আইটেমগুলির স্থিতি ব্যর্থ-এ আপডেট করা হবে এবং পরবর্তীতে ক্লিনআপ কাজের দ্বারা মুছে ফেলা হবে৷

d74200f0bd14d350.png

যা শিখবেন

এই ল্যাবে, আপনি নিম্নলিখিতগুলি কীভাবে করবেন তা শিখবেন:

  • ক্লাউড রানের কাজ তৈরি করুন
  • ক্লাউড রানের কাজগুলি চালান
  • ক্লাউড শিডিউলারের কাজ তৈরি করুন
  • চাকরি নির্বাহ যাচাই করুন

পূর্বশর্ত

  • এই ল্যাবটি ক্লাউড কনসোল এবং শেল পরিবেশের সাথে পরিচিতি অনুমান করে।
  • পূর্বে ক্লাউড রান এবং ক্লাউড শিডিউলারের অভিজ্ঞতা সহায়ক কিন্তু প্রয়োজনীয় নয়।

2. সেটআপ এবং প্রয়োজনীয়তা

ক্লাউড প্রজেক্ট সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

এনভায়রনমেন্ট সেটআপ

অনুসন্ধান বারের ডানদিকে আইকনে ক্লিক করে ক্লাউড শেল সক্রিয় করুন।

eb0157a992f16fa3.png

ক্লাউড শেল থেকে, এই রেপো থেকে অ্যাপ্লিকেশন কোড ক্লোন করতে নিম্নলিখিত কমান্ডটি চালান এবং মেনু পরিষেবা ধারণকারী ডিরেক্টরিতে যান:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service

ক্লাউড রানে সেটআপ স্ক্রিপ্ট ব্যবহার করে মেনু পরিষেবাটি স্থাপন করুন। মেনু পরিষেবা হল একটি জাভা-ভিত্তিক মাইক্রোসার্ভিস যা এর ব্যাকএন্ডের জন্য ক্লাউড এসকিউএল পোস্টগ্রেস ডাটাবেস ব্যবহার করে কোয়ার্কাস ফ্রেমওয়ার্ক দিয়ে তৈরি। মেনু পরিষেবা হল ক্লাউড রান কাজের জন্য রানটাইম নির্ভরতা যা আপনি নিম্নলিখিত ধাপে তৈরি করবেন।

./setup.sh

সমস্ত প্রয়োজনীয় উপাদান তৈরি করতে স্থাপনাটি প্রায় 10 মিনিট সময় নেবে।

উপরের কমান্ডটি কার্যকর করার পরে পরবর্তী পদক্ষেপগুলি চালিয়ে যান।

3. ক্লাউড রান জব কোড এক্সপ্লোর করুন

প্লাস আইকনে ক্লিক করে ক্লাউড শেল-এ একটি নতুন ট্যাব খুলুন।

45f480cd1b9a995.png

ক্লিনআপ পরিষেবা সম্বলিত ডিরেক্টরিতে যান এবং কাজটি তৈরি করে এমন ফাইলগুলি পর্যালোচনা করুন:

cd ~/cymbal-eats/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 কল করার মাধ্যমে সেগুলিকে মুছে ফেলার কমান্ড রয়েছে৷

script.sh

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 Menu service url.

4. ক্লাউড রান জব তৈরি করুন

এরপরে আপনি একটি কন্টেইনার ইমেজ তৈরি করবেন এবং আর্টিফ্যাক্ট রেজিস্ট্রিতে এটি প্রকাশ করবেন।

একটি ক্লাউড রান কাজ তৈরি করতে এই ধারক চিত্রটি ব্যবহার করা হবে৷

পরিষেবা API সক্ষম করুন:

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

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

fb95ae38baa7c543.png

দ্বিতীয় ক্লাউড শেল ট্যাবে ফিরে যান। মেনু পরিষেবা বর্ণনা করতে এবং পরিবেশ পরিবর্তনশীলে URL সংরক্ষণ করতে নিম্নলিখিত কমান্ডটি চালান। এই এনভায়রনমেন্ট ভেরিয়েবলটি ক্লাউড রান কাজ কনফিগার করতে ব্যবহার করা হবে।

MENU_SERVICE_URL=$(gcloud run services describe $MENU_SERVICE_NAME \
 --region=$REGION \
 --format=json | jq \
 --raw-output ".status.url")

1 মিনিটের বেশি পুরানো ব্যর্থ মেনু আইটেমগুলি পরিষ্কার করতে একটি ক্লাউড রান কাজ তৈরি করুন [ 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.

কনসোলে ক্লাউড রান জবস বিভাগে নেভিগেট করুন এবং তৈরি করা কাজের পর্যালোচনা করুন।

কাজের উপর ক্লিক করুন এবং উপলব্ধ ট্যাবগুলি অন্বেষণ করুন: ইতিহাস, লগ, কনফিগারেশন এবং YAML৷

b12c8e312de3b66.png

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

724c2919d05349c8.png

(ঐচ্ছিক) আপনি যদি ব্যর্থ আইটেম বয়স বা মেনু পরিষেবা 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 ট্যাবে স্যুইচ করুন। লগগুলিতে আপনার ব্যর্থ আইটেম বয়স এবং মেনু পরিষেবা URL দেখতে হবে৷

518cb00036a2561f.png

5. ক্লাউড রান কাজের জন্য একটি সময়সূচী সেট আপ করুন

ক্লাউড শিডিউলার একটি সম্পূর্ণরূপে পরিচালিত এন্টারপ্রাইজ-গ্রেড ক্রন কাজের সময়সূচী। এটি আপনাকে ব্যাচ, বড় ডেটা কাজ, ক্লাউড অবকাঠামো অপারেশন এবং আরও অনেক কিছু সহ কার্যত যে কোনও কাজের সময়সূচী করতে দেয়।

একটি ক্লাউড শিডিউলার কাজের সাথে কাজ করার সময় একটি নিরাপত্তা সর্বোত্তম অনুশীলন হল প্রতিটি কাজ পৃথক শংসাপত্রের সাথে সম্পাদন করা। এই ধাপে ক্লিনআপ শিডিউলার কাজের দ্বারা ব্যবহারের জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন।

export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa

gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}

Cloud Scheduler কাজের ক্লাউড রান জবসে কল করার জন্য অনুমতির প্রয়োজন হবে।

ক্লাউড শিডিউলারের কাজে ব্যবহৃত পরিষেবা অ্যাকাউন্টে 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 টার্গেট টাইপ ব্যবহার করে একটি শিডিউলারের কাজ তৈরি করবেন।

প্রদর্শনের উদ্দেশ্যে আপনি এটি প্রতি 5 মিনিটে চালানোর জন্য নির্ধারিত করবেন।

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 - ক্লাউড রান কাজের নাম

তৈরি শিডিউলারের কাজ পর্যালোচনা করতে কনসোলে ক্লাউড শিডিউলারে নেভিগেট করুন:

3bc9120df7fc6ed.png

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

7945908025dd2f2b.png

6. পরীক্ষা ক্লাউড রান কাজ

মেনু পরিষেবার শেষ পয়েন্ট ব্যবহার করে, বিদ্যমান মেনু আইটেম এবং তাদের অবস্থা পর্যালোচনা করুন:

curl ${MENU_SERVICE_URL}/menu | jq

আউটপুট:

আপনি Ready স্ট্যাটাসে 3টি মেনু আইটেম দেখতে পাবেন।

মেনু আইটেম # 1 এর স্থিতি Failed তে পরিবর্তন করুন:

curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
  -H 'Content-Type: application/json' \
  -d '{"status": "Failed"}' | jq

1 মিনিট অপেক্ষা করুন। মেনু আইটেমটি মুছে ফেলার জন্য, FAILED_ITEM_AGE প্যারামিটার দ্বারা সেট করা 1 মিনিট পুরানো হতে হবে৷

আপনি পরবর্তী নির্ধারিত রানের জন্য অপেক্ষা করতে পারেন বা কনসোল থেকে কাজ সম্পাদন করতে বাধ্য করতে পারেন৷

UI এর মাধ্যমে বা কমান্ড লাইন থেকে একটি কাজ ট্রিগার করার একাধিক উপায় রয়েছে।

এই উদাহরণের জন্য, কাজটি ট্রিগার করতে ক্লাউড শেল (বিকল্প #3) এ কমান্ড চালান।

  1. ক্লাউড শিডিউলার থেকে অ্যাকশন মেনু থেকে "জোর করে চাকরি চালান" নির্বাচন করে।

6c8cbeae6165ba4a.png

  1. Cloud Run Job থেকে "EXECUTE" বোতামে ক্লিক করে।

229c22288882b5c3.png

  1. নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড শেল থেকে:
gcloud beta run jobs execute cleanup-service --region=$REGION

Cloud Run JOBS বিভাগে নেভিগেট করুন, LOGS ট্যাব খুলুন এবং যাচাই করুন যে মেনু আইটেমটি মুছে ফেলা হয়েছে।

50829ae27b135b2d.png

লগগুলি খুঁজতে "মুছে ফেলা" কীওয়ার্ডের জন্য লগ ফিল্টার করুন।

d94fb9e444b1c1b8.png

REST এন্ডপয়েন্টের মাধ্যমে বিদ্যমান মেনু আইটেমগুলি পরীক্ষা করতে মেনু পরিষেবা শেষ পয়েন্টগুলি ব্যবহার করুন৷

curl ${MENU_SERVICE_URL}/menu | jq

আউটপুট:

আপনি Ready স্ট্যাটাসে 2টি মেনু আইটেম দেখতে পাবেন।

7. অভিনন্দন!

অভিনন্দন, আপনি কোডল্যাব শেষ করেছেন!

আমরা যা কভার করেছি:

  • কিভাবে ক্লাউড রান জব তৈরি করবেন
  • ক্লাউড রানের কাজগুলি কীভাবে কার্যকর করবেন
  • কিভাবে ক্লাউড শিডিউলারের কাজ তৈরি করবেন
  • কিভাবে চাকরি নির্বাহ যাচাই করতে হয়

এরপর কি:

অন্যান্য Cymbal Eats কোডল্যাবগুলি অন্বেষণ করুন:

পরিষ্কার কর

এই টিউটোরিয়ালে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, হয় সংস্থানগুলি রয়েছে এমন প্রকল্পটি মুছুন, অথবা প্রকল্পটি রাখুন এবং পৃথক সংস্থানগুলি মুছুন৷

প্রকল্প মুছে ফেলা হচ্ছে

বিলিং দূর করার সবচেয়ে সহজ উপায় হল আপনি টিউটোরিয়ালের জন্য তৈরি করা প্রকল্পটি মুছে ফেলা।