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

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

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

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

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

क्लीनअप सेवा का काम

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

d74200f0bd14d350.png

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

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

  • Cloud Run जॉब बनाना
  • Cloud Run जॉब एक्ज़ीक्यूट करना
  • क्लाउड शेड्यूलर जॉब बनाना
  • जॉब लागू होने की पुष्टि करें

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

  • यह लैब, Cloud Console और शेल एनवायरमेंट को अच्छी तरह से समझता है.
  • Cloud Run और Cloud शेड्यूलर का पिछला अनुभव मददगार है, लेकिन यह ज़रूरी नहीं है.

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

Cloud प्रोजेक्ट का सेटअप

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

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

eb0157a992f16fa3.png

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

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

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

./setup.sh

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

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

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

क्लाउड शेल में नया टैब खोलने के लिए, प्लस आइकॉन पर क्लिक करें.

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

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

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 - सिंबल ईट्स मेन्यू सेवा का यूआरएल.

4. क्लाउड रन जॉब बनाएं

इसके बाद, आपको एक कंटेनर इमेज बनानी होगी और उसे 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

क्लीनअप जॉब के लिए, डॉक की इमेज सेव करने के लिए, 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 नौकरी के सेक्शन पर जाएं और बनाए गए जॉब की समीक्षा करें.

जॉब पर क्लिक करें और उपलब्ध टैब देखें: इतिहास, लॉग, कॉन्फ़िगरेशन, और 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
 

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

518cb00036a2561f.png

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

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

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

export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa

gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}

क्लाउड शेड्यूलर जॉब को Cloud Run जॉब को कॉल करने के लिए अनुमतियों की ज़रूरत होगी.

क्लाउड शेड्यूलर जॉब में इस्तेमाल किए जाने वाले सेवा खाते को 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 Job को कॉल करने के लिए इस्तेमाल किए जाने वाले uri पैरामीटर की समीक्षा करें:

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

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

3bc9120df7fc6ed.png

ऐक्शन मेन्यू में मौजूद विकल्प देखें.

7945908025dd2f2b.png

6. क्लाउड रन जॉब की जांच करें

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

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

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

शेड्यूल की गई अगली कार्रवाई का इंतज़ार किया जा सकता है या कंसोल से टास्क को ज़बरदस्ती लागू किया जा सकता है.

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

इस उदाहरण के लिए, जॉब को ट्रिगर करने के लिए, Cloud Shell(Option #3) में कमांड चलाएं.

  1. Cloud शेड्यूलर से "फ़ोर्स जॉब चलाने" का विकल्प चुनें कार्रवाइयां मेन्यू से.

6c8cbeae6165ba4a.png

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

229c22288882b5c3.png

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

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

50829ae27b135b2d.png

"मिटाने" के लॉग को फ़िल्टर करें कीवर्ड का इस्तेमाल करें.

d94fb9e444b1c1b8.png

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

curl ${MENU_SERVICE_URL}/menu | jq

आउटपुट:

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

7. बधाई हो!

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

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

  • Cloud Run जॉब बनाने का तरीका
  • Cloud Run जॉब चलाने का तरीका
  • क्लाउड शेड्यूलर जॉब बनाने का तरीका
  • जॉब लागू होने की पुष्टि करने का तरीका

आने वाले समय में मिलने वाली सुविधाएं:

Cymbal Eagles के अन्य कोडलैब एक्सप्लोर करें:

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

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

प्रोजेक्ट मिटाया जा रहा है

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