Cloud Run जॉब का इस्तेमाल शुरू करना

1. परिचय

1965fab24c502bd5.png

खास जानकारी

Cloud Run की सेवाएं, उन कंटेनर के लिए सबसे सही हैं जो एचटीटीपी अनुरोधों को सुनने के लिए लगातार काम करते रहते हैं. वहीं, Cloud Run के जॉब, उन कंटेनर के लिए सबसे सही हैं जो पूरा होने तक काम करते हैं. फ़िलहाल, ये कंटेनर 24 घंटे तक काम करते हैं और अनुरोधों को पूरा नहीं करते. उदाहरण के लिए, डेटाबेस से रिकॉर्ड प्रोसेस करना, Cloud Storage बकेट से फ़ाइलों की सूची प्रोसेस करना या लंबे समय तक चलने वाली कोई कार्रवाई, जैसे कि Pi की वैल्यू का हिसाब लगाना. इन सभी को Cloud Run जॉब के तौर पर लागू करने से बेहतर नतीजे मिलेंगे.

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

Cloud Run जॉब में, टास्क की संख्या तय करके अपने कंटेनर की कई कॉपी एक साथ चलाई जा सकती हैं. हर टास्क, कंटेनर की एक चालू कॉपी को दिखाता है. एक से ज़्यादा टास्क का इस्तेमाल तब फ़ायदेमंद होता है, जब हर टास्क आपके डेटा के सबसेट को अलग से प्रोसेस कर सकता हो. उदाहरण के लिए, Cloud SQL से 10,000 रिकॉर्ड या Cloud Storage से 10,000 फ़ाइलों को प्रोसेस करने में कम समय लग सकता है. इसके लिए, 10 टास्क एक साथ 1,000 रिकॉर्ड या फ़ाइलों को प्रोसेस कर सकते हैं.

Cloud Run jobs का इस्तेमाल करने के लिए, आपको दो चरण पूरे करने होंगे:

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

इस कोडलैब में, सबसे पहले Node.js ऐप्लिकेशन के बारे में जानें. इसकी मदद से, वेब पेजों के स्क्रीनशॉट लिए जा सकते हैं और उन्हें Cloud Storage में सेव किया जा सकता है. इसके बाद, ऐप्लिकेशन के लिए कंटेनर इमेज बनाई जाती है. इसे Cloud Run jobs पर चलाया जाता है. साथ ही, ज़्यादा वेब पेजों को प्रोसेस करने के लिए जॉब को अपडेट किया जाता है. इसके बाद, Cloud Scheduler की मदद से जॉब को शेड्यूल किया जाता है.

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

  • वेब पेजों के स्क्रीनशॉट लेने के लिए, किसी ऐप्लिकेशन का इस्तेमाल करने का तरीका.
  • ऐप्लिकेशन के लिए कंटेनर इमेज बनाने का तरीका.
  • ऐप्लिकेशन के लिए Cloud Run जॉब बनाने का तरीका.
  • ऐप्लिकेशन को Cloud Run जॉब के तौर पर चलाने का तरीका.
  • नौकरी की जानकारी अपडेट करने का तरीका.
  • Cloud Scheduler की मदद से, जॉब को शेड्यूल करने का तरीका.

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

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

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

Cloud Shell शुरू करना

Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Google Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद टूलबार पर, Cloud Shell आइकॉन पर क्लिक करें:

Cloud Shell चालू करें

इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगेंगे. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

Google Cloud Shell टर्मिनल का स्क्रीनशॉट. इसमें दिखाया गया है कि एनवायरमेंट कनेक्ट हो गया है

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, यह Google Cloud पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में मौजूद सभी टास्क, ब्राउज़र में किए जा सकते हैं. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

gcloud सेट अप करना

Cloud Shell में, अपना प्रोजेक्ट आईडी और वह क्षेत्र सेट करें जहां आपको Cloud Run जॉब को डिप्लॉय करना है. इन्हें PROJECT_ID और REGION वैरिएबल के तौर पर सेव करें. आने वाले समय में, Cloud Run की जगहों में से किसी एक जगह को चुना जा सकेगा.

PROJECT_ID=[YOUR-PROJECT-ID]
REGION=us-central1
gcloud config set core/project $PROJECT_ID

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

सभी ज़रूरी सेवाएं चालू करें:

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com

3. कोड प्राप्त करें

सबसे पहले, Node.js ऐप्लिकेशन को एक्सप्लोर करें, ताकि वेब पेजों के स्क्रीनशॉट लिए जा सकें और उन्हें Cloud Storage में सेव किया जा सके. इसके बाद, ऐप्लिकेशन के लिए कंटेनर इमेज बनाई जाती है और उसे Cloud Run पर जॉब के तौर पर चलाया जाता है.

Cloud Shell से, ऐप्लिकेशन कोड को इस रेपो से क्लोन करने के लिए, यह कमांड चलाएं:

git clone https://github.com/GoogleCloudPlatform/jobs-demos.git

ऐप्लिकेशन वाली डायरेक्ट्री पर जाएं:

cd jobs-demos/screenshot

आपको फ़ाइल का यह लेआउट दिखेगा:

screenshot
 |
 ├── Dockerfile
 ├── README.md
 ├── screenshot.js
 ├── package.json

यहां हर फ़ाइल के बारे में कम शब्दों में जानकारी दी गई है:

  • screenshot.js में ऐप्लिकेशन के लिए Node.js कोड होता है.
  • package.json, लाइब्रेरी की डिपेंडेंसी तय करता है.
  • Dockerfile, कंटेनर इमेज के बारे में बताता है.

4. कोड के बारे में जानकारी

कोड को एक्सप्लोर करने के लिए, पहले से मौजूद टेक्स्ट एडिटर का इस्तेमाल करें. इसके लिए, Cloud Shell विंडो में सबसे ऊपर मौजूद Open Editor बटन पर क्लिक करें.

15a2cdc9b7f6dfc6.png

यहां हर फ़ाइल के बारे में कम शब्दों में जानकारी दी गई है.

screenshot.js

screenshot.js सबसे पहले Puppeteer और Cloud Storage को डिपेंडेंसी के तौर पर जोड़ता है. Puppeteer एक Node.js लाइब्रेरी है. इसका इस्तेमाल वेब पेजों के स्क्रीनशॉट लेने के लिए किया जाता है:

const puppeteer = require('puppeteer');
const {Storage} = require('@google-cloud/storage');

Puppeteer को शुरू करने के लिए initBrowser फ़ंक्शन और दिए गए यूआरएल के स्क्रीनशॉट लेने के लिए takeScreenshot फ़ंक्शन होता है:

async function initBrowser() {
  console.log('Initializing browser');
  return await puppeteer.launch();
}

async function takeScreenshot(browser, url) {
  const page = await browser.newPage();

  console.log(`Navigating to ${url}`);
  await page.goto(url);

  console.log(`Taking a screenshot of ${url}`);
  return await page.screenshot({
    fullPage: true
  });
}

इसके बाद, Cloud Storage बकेट पाने या बनाने के लिए एक फ़ंक्शन होता है. साथ ही, वेबपेज के स्क्रीनशॉट को बकेट में अपलोड करने के लिए एक और फ़ंक्शन होता है:

async function createStorageBucketIfMissing(storage, bucketName) {
  console.log(`Checking for Cloud Storage bucket '${bucketName}' and creating if not found`);
  const bucket = storage.bucket(bucketName);
  const [exists] = await bucket.exists();
  if (exists) {
    // Bucket exists, nothing to do here
    return bucket;
  }

  // Create bucket
  const [createdBucket] = await storage.createBucket(bucketName);
  console.log(`Created Cloud Storage bucket '${createdBucket.name}'`);
  return createdBucket;
}

async function uploadImage(bucket, taskIndex, imageBuffer) {
  // Create filename using the current time and task index
  const date = new Date();
  date.setMinutes(date.getMinutes() - date.getTimezoneOffset());
  const filename = `${date.toISOString()}-task${taskIndex}.png`;

  console.log(`Uploading screenshot as '${filename}'`)
  await bucket.file(filename).save(imageBuffer);
}

आखिर में, main फ़ंक्शन एंट्री पॉइंट होता है:

async function main(urls) {
  console.log(`Passed in urls: ${urls}`);

  const taskIndex = process.env.CLOUD_RUN_TASK_INDEX || 0;
  const url = urls[taskIndex];
  if (!url) {
    throw new Error(`No url found for task ${taskIndex}. Ensure at least ${parseInt(taskIndex, 10) + 1} url(s) have been specified as command args.`);
  }
  const bucketName = process.env.BUCKET_NAME;
  if (!bucketName) {
    throw new Error('No bucket name specified. Set the BUCKET_NAME env var to specify which Cloud Storage bucket the screenshot will be uploaded to.');
  }

  const browser = await initBrowser();
  const imageBuffer = await takeScreenshot(browser, url).catch(async err => {
    // Make sure to close the browser if we hit an error.
    await browser.close();
    throw err;
  });
  await browser.close();

  console.log('Initializing Cloud Storage client')
  const storage = new Storage();
  const bucket = await createStorageBucketIfMissing(storage, bucketName);
  await uploadImage(bucket, taskIndex, imageBuffer);

  console.log('Upload complete!');
}

main(process.argv.slice(2)).catch(err => {
  console.error(JSON.stringify({severity: 'ERROR', message: err.message}));
  process.exit(1);
});

main तरीके के बारे में इन बातों का ध्यान रखें:

  • यूआरएल को आर्ग्युमेंट के तौर पर पास किया जाता है.
  • बकेट का नाम, उपयोगकर्ता की ओर से तय किए गए BUCKET_NAME एनवायरमेंट वैरिएबल के तौर पर पास किया जाता है. बकेट का नाम, Google Cloud के सभी प्रोजेक्ट में यूनीक होना चाहिए.
  • Cloud Run जॉब, CLOUD_RUN_TASK_INDEX एनवायरमेंट वैरिएबल पास करते हैं. Cloud Run की मदद से, ऐप्लिकेशन की कई कॉपी को यूनीक टास्क के तौर पर चलाया जा सकता है. CLOUD_RUN_TASK_INDEX से, चल रहे टास्क के इंडेक्स का पता चलता है. Cloud Run की नौकरियों के बाहर कोड चलाने पर, इसकी डिफ़ॉल्ट वैल्यू शून्य होती है. जब ऐप्लिकेशन को एक साथ कई टास्क के तौर पर चलाया जाता है, तो हर टास्क/कंटेनर उस यूआरएल को चुनता है जिसके लिए वह ज़िम्मेदार है. इसके बाद, उसका स्क्रीनशॉट लेता है और इमेज को बकेट में सेव करता है.

package.json

package.json फ़ाइल, ऐप्लिकेशन के बारे में बताती है. साथ ही, Cloud Storage और Puppeteer के लिए डिपेंडेंसी तय करती है:

{
  "name": "screenshot",
  "version": "1.0.0",
  "description": "Create a job to capture screenshots",
  "main": "screenshot.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Google LLC",
  "license": "Apache-2.0",
  "dependencies": {
    "@google-cloud/storage": "^5.18.2",
    "puppeteer": "^13.5.1"
  }
}

Dockerfile

Dockerfile में, ऐप्लिकेशन के लिए कंटेनर इमेज के बारे में बताया गया है. इसमें सभी ज़रूरी लाइब्रेरी और डिपेंडेंसी शामिल हैं:

FROM ghcr.io/puppeteer/puppeteer:16.1.0
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
ENTRYPOINT ["node", "screenshot.js"]

5. जॉब डिप्लॉय करना

जॉब बनाने से पहले, आपको एक सेवा खाता बनाना होगा. इस खाते का इस्तेमाल जॉब को चलाने के लिए किया जाएगा.

gcloud iam service-accounts create screenshot-sa --display-name="Screenshot app service account"

सेवा खाते को storage.admin की भूमिका असाइन करें, ताकि इसका इस्तेमाल बकेट और ऑब्जेक्ट बनाने के लिए किया जा सके.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/storage.admin \
  --member serviceAccount:screenshot-sa@$PROJECT_ID.iam.gserviceaccount.com

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

gcloud beta run jobs deploy screenshot \
  --source=. \
  --args="https://example.com" \
  --args="https://cloud.google.com" \
  --tasks=2 \
  --task-timeout=5m \
  --region=$REGION \
  --set-env-vars=BUCKET_NAME=screenshot-$PROJECT_ID-$RANDOM \
  --service-account=screenshot-sa@$PROJECT_ID.iam.gserviceaccount.com

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

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

--tasks फ़्लैग के साथ टास्क की संख्या तय करके, अपने कंटेनर की कई कॉपी एक साथ चलाई जा सकती हैं. हर टास्क, कंटेनर की एक चालू कॉपी को दिखाता है. एक से ज़्यादा टास्क का इस्तेमाल तब फ़ायदेमंद होता है, जब हर टास्क आपके डेटा के सबसेट को अलग से प्रोसेस कर सकता हो. इसे आसान बनाने के लिए, हर टास्क को अपने इंडेक्स के बारे में पता होता है. यह इंडेक्स, CLOUD_RUN_TASK_INDEX एनवायरमेंट वैरिएबल में सेव होता है. आपका कोड यह तय करता है कि कौनसे टास्क को डेटा के किस सबसेट को हैंडल करना है. इस सैंपल में --tasks=2 सूचना देखें. इससे यह पक्का होता है कि जिन दो यूआरएल को हमें प्रोसेस करना है उनके लिए दो कंटेनर चल रहे हैं.

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

डिफ़ॉल्ट रूप से, आपका जॉब एक साथ ज़्यादा से ज़्यादा टास्क के साथ चलेगा. यह आपके काम के लिए टास्क की संख्या के बराबर होगा. हालांकि, यह संख्या ज़्यादा से ज़्यादा 100 हो सकती है. जिन जॉब के लिए ऐसे बैकएंड का इस्तेमाल किया जाता है जिनकी स्केलेबिलिटी सीमित होती है उनके लिए, पैरललिज़्म को कम पर सेट किया जा सकता है. उदाहरण के लिए, ऐसा डेटाबेस जो सीमित संख्या में चालू कनेक्शन के साथ काम करता है. --parallelism फ़्लैग का इस्तेमाल करके, समानता को कम किया जा सकता है.

6. कोई जॉब चलाना

जॉब चलाने से पहले, जॉब को लिस्ट करें, ताकि यह पता चल सके कि इसे बनाया गया है:

gcloud run jobs list

✔
JOB: screenshot
REGION: us-central
LAST RUN AT:
CREATED: 2022-02-22 12:20:50 UTC

इस कमांड का इस्तेमाल करके, जॉब चलाएं:

gcloud run jobs execute screenshot --region=$REGION

इससे जॉब को पूरा किया जाता है. मौजूदा और पिछली प्रोसेस की सूची देखी जा सकती है:

gcloud run jobs executions list --job screenshot --region=$REGION

...
JOB: screenshot
EXECUTION: screenshot-znkmm
REGION: $REGION
RUNNING: 1
COMPLETE: 1 / 2
CREATED: 2022-02-22 12:40:42 UTC

कोड को लागू करने के बारे में जानकारी. आपको हरे रंग का सही का निशान और tasks completed successfully मैसेज दिखना चाहिए:

gcloud run jobs executions describe screenshot-znkmm --region=$REGION

✔ Execution screenshot-znkmm in region $REGION
2 tasks completed successfully


Image:           $REGION-docker.pkg.dev/$PROJECT_ID/containers/screenshot at 311b20d9...
Tasks:           2
Args:            https://example.com https://cloud.google.com
Memory:          1Gi
CPU:             1000m
Task Timeout:    3600s
Parallelism:     2
Service account: 11111111-compute@developer.gserviceaccount.com
Env vars:
  BUCKET_NAME    screenshot-$PROJECT_ID-$RANDOM

स्थिति देखने के लिए, Cloud Console के Cloud Run jobs पेज पर भी जाएं:

1afde14d65f0d9ce.png

Cloud Storage बकेट में जाकर देखें. आपको बनाई गई दो स्क्रीनशॉट फ़ाइलें दिखेंगी:

7c4d355f6f65106.png

कभी-कभी आपको किसी प्रोसेस को पूरा होने से पहले ही रोकना पड़ सकता है. ऐसा तब होता है, जब आपको लगता है कि आपको किसी काम को अलग-अलग पैरामीटर के साथ चलाना है या कोड में कोई गड़बड़ी है और आपको कंप्यूटिंग के लिए ज़रूरत से ज़्यादा समय नहीं देना है.

अपने जॉब के एक्ज़ीक्यूशन को रोकने के लिए, आपको एक्ज़ीक्यूशन मिटाना होगा:

gcloud run jobs executions delete screenshot-znkmm --region=$REGION

7. किसी नौकरी की जानकारी अपडेट करना

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

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

--args फ़्लैग में जाकर, काम को अपडेट करें और उन पेजों को बदलें जिनके स्क्रीनशॉट ऐप्लिकेशन लेता है. पेजों की संख्या दिखाने के लिए, --tasks फ़्लैग को भी अपडेट करें.

gcloud run jobs update screenshot \
  --args="https://www.pinterest.com" \
  --args="https://www.apartmenttherapy.com" \
  --args="https://www.google.com" \
  --region=$REGION \
  --tasks=3

जॉब को फिर से चलाएं. --wait फ़्लैग में यह समय पास किया जाता है, ताकि एक्ज़ीक्यूशन खत्म होने का इंतज़ार किया जा सके:

gcloud run jobs execute screenshot --region=$REGION --wait

कुछ सेकंड बाद, आपको बकेट में तीन और स्क्रीनशॉट दिखेंगे:

ed0cbe0b5a5f9144.png

8. कोई जॉब शेड्यूल करना

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

सबसे पहले, पक्का करें कि Cloud Scheduler API चालू हो:

gcloud services enable cloudscheduler.googleapis.com

Cloud Run jobs की ज़्यादा जानकारी वाले पेज पर जाएं और Triggers सेक्शन पर क्लिक करें:

3ae456368905472f.png

Add Scheduler Trigger बटन चुनें:

48cbba777f75e1eb.png

ऐसा करने पर, दाईं ओर एक पैनल खुल जाएगा. इस कॉन्फ़िगरेशन के साथ, हर दिन सुबह 9:00 बजे चलने वाला शेड्यूलर जॉब बनाएं और Continue चुनें:

81fd098be0db216.png

अगले पेज पर, डिफ़ॉल्ट कंप्यूट सेवा खाता चुनें और Create को चुनें:

fe479501dfb91f9f.png

अब आपको Cloud Scheduler का बनाया गया नया ट्रिगर दिखेगा:

5a7bc6d96b970b92.png

Cloud Scheduler पेज पर जाने के लिए, View Details पर क्लिक करें.

शेड्यूलर के शुरू होने के लिए, सुबह 9 बजे तक इंतज़ार किया जा सकता है. इसके अलावा, Force Run को चुनकर, Cloud Scheduler को मैन्युअल तरीके से ट्रिगर किया जा सकता है:

959525f2c8041a6a.png

कुछ सेकंड बाद, आपको Cloud Scheduler की नौकरी के सफलतापूर्वक पूरा होने की जानकारी दिखेगी:

d64e03fc84d61145.png

आपको Cloud Scheduler से किए गए कॉल के ज़रिए जोड़े गए तीन और स्क्रीनशॉट भी दिखेंगे:

56398a0e827de8b0.png

9. बधाई हो

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

सफ़ाई (ज़रूरी नहीं)

शुल्क से बचने के लिए, संसाधनों को हटा दें.

अगर आपको प्रोजेक्ट की ज़रूरत नहीं है, तो उसे मिटा दें:

gcloud projects delete $PROJECT_ID

अगर आपको प्रोजेक्ट की ज़रूरत है, तो एक-एक करके संसाधन मिटाए जा सकते हैं.

सोर्स कोड मिटाने के लिए:

rm -rf ~/jobs-demos/

Artifact Registry की रिपॉज़िटरी मिटाएं:

gcloud artifacts repositories delete containers --location=$REGION

सेवा खाता मिटाने के लिए:

gcloud iam service-accounts delete screenshot-sa@$PROJECT_ID.iam.gserviceaccount.com

Cloud Run जॉब मिटाएं:

gcloud run jobs delete screenshot --region=$REGION

Cloud Scheduler जॉब मिटाने के लिए:

gcloud scheduler jobs delete screenshot-scheduler-trigger --location=$REGION

Cloud Storage बकेट मिटाएं:

gcloud storage rm --recursive gs://screenshot-$PROJECT_ID

हमने क्या-क्या शामिल किया है

  • वेब पेजों के स्क्रीनशॉट लेने के लिए, किसी ऐप्लिकेशन का इस्तेमाल करने का तरीका.
  • ऐप्लिकेशन के लिए कंटेनर इमेज बनाने का तरीका.
  • ऐप्लिकेशन के लिए Cloud Run जॉब बनाने का तरीका.
  • ऐप्लिकेशन को Cloud Run जॉब के तौर पर चलाने का तरीका.
  • नौकरी की जानकारी अपडेट करने का तरीका.
  • Cloud Scheduler की मदद से, जॉब को शेड्यूल करने का तरीका.