क्लाउड शेड्यूलर की मदद से क्लाउड रन जॉब ट्रिगर करना

1. खास जानकारी

इस लैब में, आपको एक Cloud Run जॉब बनानी होगी और एक Cloud Scheduler जॉब सेट अप करनी होगी. सेटअप स्क्रिप्ट का इस्तेमाल करके, Cymbal Eats Menu Service को डिप्लॉय किया जाएगा. आपको एक Cloud Run जॉब बनानी होगी. यह Cymbal Eats Menu Service को एपीआई कॉल करेगी. आपको Google Cloud CLI का इस्तेमाल करके, जॉब को पूरा करना होगा. साथ ही, जॉब के लिए शेड्यूल सेट अप करना होगा. आपको लॉग की समीक्षा करके और Menu Service को एपीआई कॉल करके, यह पुष्टि करनी होगी कि मेन्यू आइटम मिटा दिए गए हैं.

Cloud Run जॉब क्या होती हैं?

Cloud Run जॉब, ऐसे कंटेनर को चलाता है जो वेब अनुरोधों को पूरा नहीं करता. इसके बजाय, यह ऑपरेशनल टास्क या डेटा प्रोसेसिंग को पूरा करता है. कंटेनर, टास्क को पूरा करेगा और पूरा होने पर बंद हो जाएगा.

सफ़ाई से जुड़ा काम

डेटा को हटाने वाली सेवा, 'फ़ेल हो गया' स्टेटस वाले मेन्यू आइटम को वापस लाएगी और उन्हें मिटा देगी. नए मेन्यू आइटम बनाते समय, Vision API का इस्तेमाल करके इमेज का विश्लेषण किया जाता है. इससे यह पता चलता है कि वह खाने का आइटम है या नहीं. जिन इमेज की पुष्टि नहीं हो पाती है उनके लिए, मेन्यू आइटम की स्थिति को 'पुष्टि नहीं हो सकी' के तौर पर अपडेट कर दिया जाएगा. इसके बाद, उन्हें क्लीनअप जॉब के ज़रिए मिटा दिया जाएगा.

d74200f0bd14d350.png

आपको क्या सीखने को मिलेगा

इस लैब में, आपको ये काम करने का तरीका बताया जाएगा:

  • Cloud Run जॉब बनाना
  • Cloud Run जॉब को एक्ज़ीक्यूट करना
  • Cloud Scheduler जॉब बनाना
  • नौकरी से जुड़ी कार्रवाइयों के पूरा होने की पुष्टि करना

ज़रूरी शर्तें

  • इस लैब को शुरू करने से पहले, यह माना जा रहा है कि आपको Cloud Console और शेल एनवायरमेंट के बारे में जानकारी है.
  • Cloud Run और Cloud Scheduler का अनुभव होना फ़ायदेमंद है, लेकिन यह ज़रूरी नहीं है.

2. सेटअप और ज़रूरी शर्तें

Cloud Project का सेटअप

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहेगा.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या पूरे प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

एनवायरमेंट सेटअप करना

सर्च बार के दाईं ओर मौजूद आइकॉन पर क्लिक करके, Cloud Shell चालू करें.

eb0157a992f16fa3.png

Cloud Shell में, इस रेपो से ऐप्लिकेशन कोड को क्लोन करने के लिए, यह कमांड चलाएं. इसके बाद, मेन्यू सेवा वाली डायरेक्ट्री पर जाएं:

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

सेटअप स्क्रिप्ट का इस्तेमाल करके, Menu सेवा को Cloud Run पर डिप्लॉय करें. Menu service, Java पर आधारित एक माइक्रोसेवा है. इसे Quarkus फ़्रेमवर्क का इस्तेमाल करके बनाया गया है. इसके बैकएंड के लिए, Cloud SQL Postgres डेटाबेस का इस्तेमाल किया जाता है. मेन्यू सेवा, Cloud Run जॉब के लिए रनटाइम डिपेंडेंसी है. इसे अगले चरणों में बनाया जाएगा.

./setup.sh

डप्लॉयमेंट में करीब 10 मिनट लगेंगे. इस दौरान, सभी ज़रूरी कॉम्पोनेंट बनाए जाएंगे.

ऊपर दिए गए निर्देश को चलाने के बाद, अगले चरण पर जाएं.

3. Cloud Run जॉब के कोड को एक्सप्लोर करना

प्लस आइकॉन पर क्लिक करके, Cloud Shell में नया टैब खोलें.

45f480cd1b9a995.png

डेटा मिटाने की सेवा वाली डायरेक्ट्री पर जाएं और उन फ़ाइलों की समीक्षा करें जिनसे जॉब बनी है:

cd ~/cymbal-eats/cleanup-service

इस डायरेक्ट्री में मौजूद cleanup-service में एक Dockerfile होता है. यह cleanup service के जॉब के लिए कंटेनर इमेज को ज़रूरी डिपेंडेंसी(httpie, jq) के साथ तय करता है.

Dockerfile

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"]

नीचे दी गई क्लीनअप स्क्रिप्ट में, उन मेन्यू आइटम की सूची पाने के लिए कमांड शामिल हैं जो फ़ेल हो गए हैं. साथ ही, इसमें Menu service को एपीआई कॉल करके उन्हें मिटाने के लिए भी कमांड शामिल हैं.

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 एनवायरमेंट वैरिएबल, डिप्लॉयमेंट के दौरान सेट किए जाएंगे. साथ ही, इन्हें Cloud Run जॉब से पास किया जाएगा.
  • FAILED_ITEM_AGE - यह वह समय है जिसके बाद, प्रोसेस नहीं किए जा सके आइटम को मिटा दिया जाएगा.
  • MENU_SERVICE_URL - Cymbal Eats Menu सेवा का यूआरएल.

4. Cloud Run जॉब बनाना

इसके बाद, कंटेनर इमेज बनाई जाएगी और उसे Artifact Registry में पब्लिश किया जाएगा.

इस कंटेनर इमेज का इस्तेमाल, Cloud Run जॉब बनाने के लिए किया जाएगा.

सेवा के एपीआई चालू करें:

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

सफ़ाई से जुड़े काम के लिए, Docker इमेज सेव करने के लिए एक नई Artifact Registry रिपॉज़िटरी बनाएं:

gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION

Cloud Build का इस्तेमाल करके कंटेनर इमेज बनाएं और उसे एक निर्देश की मदद से Artifact Registry पर पुश करें:

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

पब्लिश करने के बाद, Artifact Registry पर जाएं और पब्लिश की गई इमेज की समीक्षा करें:

fb95ae38baa7c543.png

Cloud Shell के दूसरे टैब पर वापस जाएं. मेन्यू सेवा के बारे में बताने और यूआरएल को एनवायरमेंट वैरिएबल में सेव करने के लिए, यह कमांड चलाएं. इस एनवायरमेंट वैरिएबल का इस्तेमाल, Cloud Run जॉब को कॉन्फ़िगर करने के लिए किया जाएगा.

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

Cloud Run की मदद से एक ऐसा जॉब बनाएं जो एक मिनट से ज़्यादा पुराने [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 सेक्शन पर जाएं और बनाए गए जॉब की समीक्षा करें.

जॉब पर क्लिक करें और उपलब्ध टैब एक्सप्लोर करें: HISTORY, LOGS, CONFIGURATION, और YAML.

b12c8e312de3b66.png

पुष्टि करें कि एनवायरमेंट वैरिएबल सेट किए गए हैं. इसके लिए, कंसोल में जाकर नौकरी के कॉन्फ़िगरेशन सेक्शन देखें:

724c2919d05349c8.png

(ज़रूरी नहीं) अगर आपको Cloud Run जॉब बनाने के बाद, 'कार्रवाई पूरी नहीं की जा सकी' आइटम की उम्र या मेन्यू सेवा के यूआरएल वैरिएबल बदलने हैं, तो अपडेट कमांड का इस्तेमाल करें:

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

जॉब की पुष्टि करने के लिए, Cloud Run जॉब को एक्ज़ीक्यूट करें. इसके लिए, यह कमांड चलाएं:

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
 

जॉब के आउटपुट की समीक्षा करने के लिए, लॉग टैब पर जाएं. आपको लॉग में, आइटम के फ़ेल होने की अवधि और मेन्यू सेवा का यूआरएल दिखेगा.

518cb00036a2561f.png

5. Cloud Run जॉब के लिए शेड्यूल सेट अप करना

Cloud Scheduler, एंटरप्राइज़-ग्रेड का क्रॉन जॉब शेड्यूलर है. इसे पूरी तरह से मैनेज किया जाता है. इसकी मदद से, किसी भी जॉब को शेड्यूल किया जा सकता है. जैसे, बैच, बिग डेटा जॉब, क्लाउड इन्फ़्रास्ट्रक्चर ऑपरेशन वगैरह.

Cloud Scheduler की मदद से कोई काम करते समय, सुरक्षा से जुड़ा सबसे सही तरीका यह है कि हर काम को अलग-अलग क्रेडेंशियल के साथ पूरा किया जाए. इस चरण में, क्लीनअप शेड्यूलर जॉब के लिए एक सेवा खाता बनाएं.

export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa

gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}

Cloud Scheduler जॉब को Cloud Run Jobs को कॉल करने की अनुमतियों की ज़रूरत होगी.

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"

इसके बाद, आपको क्लीनअप सर्विस जॉब चलाने के लिए शेड्यूल सेट अप करना होगा.

Cloud Scheduler में, कई तरह के टारगेट टाइप इस्तेमाल किए जा सकते हैं.

  • HTTP
  • Pub/Sub
  • App Engine एचटीटीपी

आपको एचटीटीपी टारगेट टाइप का इस्तेमाल करके, शेड्यूलर जॉब बनाना होगा.

डेमो के लिए, इसे हर पांच मिनट में चलाने के लिए शेड्यूल करें.

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

Cloud Run जॉब को कॉल करने के लिए इस्तेमाल किए गए uri पैरामीटर की समीक्षा करें:

  • REGION और PROJECT_ID - Cloud Run का वह क्षेत्र और प्रोजेक्ट आईडी जहां डेटा मिटाने की सेवा से जुड़ा जॉब डिप्लॉय किया गया है
  • cleanup-service - Cloud Run जॉब का नाम

बनाई गई शेड्यूलर जॉब की समीक्षा करने के लिए, कंसोल में Cloud Scheduler पर जाएं:

3bc9120df7fc6ed.png

'कार्रवाइयां' मेन्यू में जाकर, उपलब्ध विकल्पों की समीक्षा करें.

7945908025dd2f2b.png

6. Cloud Run जॉब की जांच करना

मेन्यू सेवा के एंडपॉइंट का इस्तेमाल करके, मेन्यू में मौजूद आइटम और उनकी स्थिति देखें:

curl ${MENU_SERVICE_URL}/menu | jq

आउटपुट:

आपको Ready स्थिति वाले तीन मेन्यू आइटम दिखेंगे.

मेन्यू आइटम #1 का स्टेटस बदलकर Failed करें:

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

एक मिनट इंतज़ार करें. मेन्यू आइटम को मिटाने के लिए, उसे कम से कम एक मिनट पुराना होना चाहिए. यह FAILED_ITEM_AGE पैरामीटर के ज़रिए सेट किया जाता है.

शेड्यूल किए गए अगले रन का इंतज़ार किया जा सकता है या कंसोल से जॉब को तुरंत लागू किया जा सकता है.

यूज़र इंटरफ़ेस (यूआई) या कमांड लाइन से, किसी जॉब को ट्रिगर करने के कई तरीके हैं.

इस उदाहरण के लिए, Cloud Shell(तीसरा विकल्प) में कमांड चलाकर, जॉब को ट्रिगर करें.

  1. Cloud Scheduler में जाकर, कार्रवाइयां मेन्यू से "जॉब को तुरंत चलाएं" को चुनें.

6c8cbeae6165ba4a.png

  1. Cloud Run Job से, "EXECUTE" बटन पर क्लिक करके.

229c22288882b5c3.png

  1. Cloud Shell में यह कमांड चलाकर:
gcloud beta run jobs execute cleanup-service --region=$REGION

Cloud Run JOBS सेक्शन पर जाएं. इसके बाद, LOGS टैब खोलें और पुष्टि करें कि मेन्यू आइटम मिट गया है.

50829ae27b135b2d.png

लॉग ढूंढने के लिए, "मिटाना" कीवर्ड के लिए लॉग फ़िल्टर करें.

d94fb9e444b1c1b8.png

REST एंडपॉइंट के ज़रिए मौजूदा मेन्यू आइटम देखने के लिए, Menu Service एंडपॉइंट का इस्तेमाल करें.

curl ${MENU_SERVICE_URL}/menu | jq

आउटपुट:

आपको Ready स्थिति में दो मेन्यू आइटम दिखेंगे.

7. बधाई हो!

बधाई हो, आपने कोडलैब पूरा कर लिया है!

हमने इन विषयों पर बात की:

  • Cloud Run जॉब बनाने का तरीका
  • Cloud Run जॉब को कैसे एक्ज़ीक्यूट करें
  • Cloud Scheduler की मदद से जॉब बनाने का तरीका
  • जॉब के एक्ज़ीक्यूशन की पुष्टि कैसे करें

इसके बाद क्या होगा:

Cymbal Eats के अन्य कोडलैब देखें:

व्यवस्थित करें

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, संसाधनों वाला प्रोजेक्ट मिटाएं. इसके अलावा, प्रोजेक्ट को बनाए रखने और अलग-अलग संसाधनों को मिटाने का विकल्प भी है.

प्रोजेक्ट मिटाना

बिलिंग को बंद करने का सबसे आसान तरीका यह है कि ट्यूटोरियल के लिए बनाया गया प्रोजेक्ट मिटा दें.