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

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

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

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

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

साफ़-सफ़ाई करने की सेवा

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

d74200f0bd14d350.png

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

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

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

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

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

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 के संसाधनों/एपीआई का इस्तेमाल करने के लिए, 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 जॉब कोड को एक्सप्लोर करना

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

45f480cd1b9a995.png

क्लीनअप सेवा वाली डायरेक्ट्री पर जाएं और उसमें मौजूद फ़ाइलों की समीक्षा करें:

cd ~/cymbal-eats/cleanup-service

इस डायरेक्ट्री में मौजूद cleanup-service में एक Dockerfile होता है, जो ज़रूरी डिपेंडेंसी(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"]

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

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

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

इसके बाद, आपको एक कंटेनर इमेज बनानी होगी और उसे आर्टफ़ैक्ट रजिस्ट्री में पब्लिश करना होगा.

इस कंटेनर इमेज का इस्तेमाल, 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 इमेज सेव करने के लिए, एक नया आर्टफ़ैक्ट रजिस्ट्री रिपॉज़िटरी बनाएं:

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

पब्लिश करने के बाद, आर्टफ़ैक्ट रजिस्ट्री पर जाएं और पब्लिश की गई इमेज की समीक्षा करें:

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

FAILED_ITEM_AGE से सेट किए गए, एक मिनट से ज़्यादा पुराने मेन्यू आइटम को हटाने के लिए, Cloud Run जॉब बनाएं.

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.

Console में, 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
 

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

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 जॉब को कॉल करने के लिए अनुमतियां चाहिए.

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

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

  • 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 जॉब में जाकर, "कार्रवाई करें" बटन पर क्लिक करें.

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 जॉब को कैसे चलाएं
  • Cloud Scheduler जॉब बनाने का तरीका
  • जॉब के लागू होने की पुष्टि करने का तरीका

आगे क्या करना है:

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

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

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

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

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