ক্লাউড রানের কাজ শুরু করা

১. ভূমিকা

1965fab24c502bd5.png

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

যেসব কন্টেইনার অনির্দিষ্টকালের জন্য HTTP অনুরোধ শোনার জন্য চলতে থাকে, তাদের জন্য ক্লাউড রান সার্ভিস বেশ উপযুক্ত। অন্যদিকে, যেসব কন্টেইনার তাদের কাজ সম্পূর্ণ হওয়া পর্যন্ত (বর্তমানে ২৪ ঘণ্টা পর্যন্ত) চলে এবং কোনো অনুরোধ পূরণ করে না, তাদের জন্য ক্লাউড রান জব বেশি উপযোগী। উদাহরণস্বরূপ, একটি ডাটাবেস থেকে রেকর্ড প্রসেস করা, ক্লাউড স্টোরেজ বাকেট থেকে ফাইলের তালিকা প্রসেস করা, বা পাই (Pi) গণনার মতো দীর্ঘ সময় ধরে চলা কোনো অপারেশন ক্লাউড রান জব হিসেবে প্রয়োগ করলে ভালোভাবে কাজ করবে।

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

ক্লাউড রান জব-এ, আপনি নির্দিষ্ট সংখ্যক টাস্ক উল্লেখ করে আপনার কন্টেইনারের একাধিক কপি সমান্তরালভাবে চালাতে পারেন। প্রতিটি টাস্ক কন্টেইনারের একটি চলমান কপিকে প্রতিনিধিত্ব করে। একাধিক টাস্ক ব্যবহার করা সুবিধাজনক হয় যদি প্রতিটি টাস্ক স্বাধীনভাবে আপনার ডেটার একটি উপসেট প্রসেস করতে পারে। উদাহরণস্বরূপ, ক্লাউড এসকিউএল থেকে ১০,০০০ রেকর্ড বা ক্লাউড স্টোরেজ থেকে ১০,০০০ ফাইল প্রসেস করার কাজটি আরও দ্রুত করা যেতে পারে যদি ১০টি টাস্ক ১০০০টি রেকর্ড বা ফাইল সমান্তরালভাবে প্রসেস করে।

ক্লাউড রান জব ব্যবহার করার প্রক্রিয়াটি দুটি ধাপে সম্পন্ন হয়:

  1. জব তৈরি করুন: এর মধ্যে জবটি চালানোর জন্য প্রয়োজনীয় সমস্ত কনফিগারেশন অন্তর্ভুক্ত থাকে, যেমন কন্টেইনার ইমেজ, রিজিয়ন, এনভায়রনমেন্ট ভেরিয়েবল।
  2. জবটি চালান: এটি জবটির একটি নতুন এক্সিকিউশন তৈরি করে। ঐচ্ছিকভাবে, ক্লাউড শিডিউলার ব্যবহার করে একটি নির্দিষ্ট সময়সূচী অনুযায়ী আপনার জবটি চালানোর জন্য সেট আপ করুন।

এই কোডল্যাবে, আপনি প্রথমে ওয়েব পেজের স্ক্রিনশট নিয়ে ক্লাউড স্টোরেজে সংরক্ষণ করার জন্য একটি Node.js অ্যাপ্লিকেশন তৈরি করবেন। এরপর আপনি অ্যাপ্লিকেশনটির জন্য একটি কন্টেইনার ইমেজ তৈরি করবেন, ক্লাউড রান জবসে এটি চালাবেন, আরও ওয়েব পেজ প্রসেস করার জন্য জবটি আপডেট করবেন এবং ক্লাউড শিডিউলার ব্যবহার করে একটি নির্দিষ্ট সময়সূচী অনুযায়ী জবটি চালাবেন।

আপনি যা শিখবেন

  • অ্যাপ ব্যবহার করে কীভাবে ওয়েব পেজের স্ক্রিনশট নিতে হয়।
  • অ্যাপ্লিকেশনটির জন্য কীভাবে একটি কন্টেইনার ইমেজ তৈরি করবেন।
  • অ্যাপ্লিকেশনটির জন্য কীভাবে একটি ক্লাউড রান জব তৈরি করবেন।
  • অ্যাপ্লিকেশনটিকে ক্লাউড রান জব হিসেবে কীভাবে চালাবেন।
  • চাকরিটি কীভাবে আপডেট করবেন।
  • ক্লাউড শিডিউলার দিয়ে কীভাবে কাজটি শিডিউল করবেন।

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

স্ব-গতিতে পরিবেশ সেটআপ

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

ক্লাউড শেল সক্রিয় করুন

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

গুগল ক্লাউড শেল টার্মিনালের স্ক্রিনশট, যা দেখাচ্ছে যে পরিবেশটি সংযুক্ত হয়েছে।

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

gcloud সেট আপ করুন

ক্লাউড শেলে, আপনার প্রজেক্ট আইডি এবং যে অঞ্চলে ক্লাউড রান জবটি ডেপ্লয় করতে চান, তা সেট করুন। এগুলোকে PROJECT_ID এবং REGION ভেরিয়েবল হিসেবে সেভ করুন। ভবিষ্যতে, আপনি ক্লাউড রান লোকেশনগুলো থেকে একটি অঞ্চল বেছে নিতে পারবেন।

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

৩. কোডটি সংগ্রহ করুন

প্রথমে আপনি ওয়েব পেজের স্ক্রিনশট নিয়ে ক্লাউড স্টোরেজে সংরক্ষণ করার জন্য একটি Node.js অ্যাপ্লিকেশন তৈরি করেন। পরবর্তীতে, আপনি অ্যাপ্লিকেশনটির জন্য একটি কন্টেইনার ইমেজ তৈরি করেন এবং ক্লাউড রান-এ একটি জব হিসেবে সেটি চালান।

ক্লাউড শেল থেকে, এই রিপো থেকে অ্যাপ্লিকেশন কোড ক্লোন করতে নিম্নলিখিত কমান্ডটি চালান:

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 কন্টেইনার ইমেজ নির্ধারণ করে।

৪. কোডটি অন্বেষণ করুন

কোডটি দেখার জন্য, ক্লাউড শেল উইন্ডোর উপরের দিকে থাকা Open Editor বোতামে ক্লিক করে বিল্ট-ইন টেক্সট এডিটরটি ব্যবহার করুন।

15a2cdc9b7f6dfc6.png

এখানে প্রতিটি ফাইলের একটি সংক্ষিপ্ত ব্যাখ্যা দেওয়া হলো।

স্ক্রিনশট.জেএস

screenshot.js প্রথমে Puppeteer এবং Cloud Storage-কে ডিপেন্ডেন্সি হিসেবে যুক্ত করে। Puppeteer হলো একটি Node.js লাইব্রেরি যা ওয়েব পেজের স্ক্রিনশট নিতে ব্যবহৃত হয়:

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

Puppeteer চালু করার জন্য একটি initBrowser ফাংশন এবং প্রদত্ত URL-এর স্ক্রিনশট নেওয়ার জন্য একটি 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
  });
}

এরপরে, ক্লাউড স্টোরেজ বাকেট পাওয়া বা তৈরি করার জন্য একটি ফাংশন এবং কোনো বাকেটে ওয়েবপেজের স্ক্রিনশট আপলোড করার জন্য আরেকটি ফাংশন রয়েছে:

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 মেথড সম্পর্কে নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:

  • URL-গুলো আর্গুমেন্ট হিসেবে পাঠানো হয়।
  • বাকেটের নামটি ব্যবহারকারী-সংজ্ঞায়িত BUCKET_NAME এনভায়রনমেন্ট ভেরিয়েবল হিসেবে প্রদান করা হয়। বাকেটের নামটি অবশ্যই সমস্ত গুগল ক্লাউড জুড়ে বিশ্বব্যাপী অনন্য হতে হবে।
  • ক্লাউড রান জবগুলো একটি CLOUD_RUN_TASK_INDEX এনভায়রনমেন্ট ভ্যারিয়েবল পাস করে। ক্লাউড রান জবগুলো অ্যাপ্লিকেশনটির একাধিক কপিকে স্বতন্ত্র টাস্ক হিসেবে চালাতে পারে। CLOUD_RUN_TASK_INDEX চলমান টাস্কটির ইন্ডেক্স বা সূচককে নির্দেশ করে। যখন কোডটি ক্লাউড রান জবের বাইরে চালানো হয়, তখন এর ডিফল্ট মান শূন্য থাকে। যখন অ্যাপ্লিকেশনটি একাধিক টাস্ক হিসেবে চালানো হয়, তখন প্রতিটি টাস্ক/কন্টেইনার তার দায়িত্বপ্রাপ্ত URL-টি গ্রহণ করে, একটি স্ক্রিনশট নেয় এবং ছবিটি বাকেটে সংরক্ষণ করে।

প্যাকেজ.json

package.json ফাইলটি অ্যাপ্লিকেশনটিকে সংজ্ঞায়িত করে এবং ক্লাউড স্টোরেজ ও পাপেটিয়ারের জন্য নির্ভরতাগুলো নির্দিষ্ট করে:

{
  "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 অ্যাপ্লিকেশনটির জন্য সমস্ত প্রয়োজনীয় লাইব্রেরি এবং ডিপেন্ডেন্সি সহ কন্টেইনার ইমেজটি সংজ্ঞায়িত করে:

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

৫. একটি কাজ স্থাপন করুন

জব তৈরি করার আগে, আপনাকে একটি সার্ভিস অ্যাকাউন্ট তৈরি করতে হবে যা জবটি চালানোর জন্য ব্যবহার করা হবে।

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

আপনি এখন একটি ক্লাউড রান জব ডেপ্লয় করার জন্য প্রস্তুত, যার মধ্যে জবটি চালানোর জন্য প্রয়োজনীয় কনফিগারেশন অন্তর্ভুক্ত রয়েছে।

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

এটি সোর্স-ভিত্তিক ডেপ্লয়মেন্ট ব্যবহার করে এবং একটি ক্লাউড রান জব তৈরি করে, কিন্তু সেটিকে এক্সিকিউট করে না।

লক্ষ্য করুন, কীভাবে ওয়েব পেজগুলো আর্গুমেন্ট হিসেবে পাঠানো হয়েছে। স্ক্রিনশটগুলো সংরক্ষণ করার জন্য বাকেটের নামটি একটি এনভায়রনমেন্ট ভেরিয়েবল হিসেবে পাঠানো হয়।

--tasks ফ্ল্যাগ ব্যবহার করে নির্দিষ্ট সংখ্যক টাস্ক চালানোর মাধ্যমে আপনি আপনার কন্টেইনারের একাধিক কপি সমান্তরালভাবে চালাতে পারেন। প্রতিটি টাস্ক কন্টেইনারের একটি চলমান কপিকে প্রতিনিধিত্ব করে। একাধিক টাস্ক ব্যবহার করা সুবিধাজনক হয় যদি প্রতিটি টাস্ক স্বাধীনভাবে আপনার ডেটার একটি উপসেট প্রসেস করতে পারে। এই কাজটি সহজ করার জন্য, প্রতিটি টাস্ক তার ইনডেক্স সম্পর্কে অবগত থাকে, যা CLOUD_RUN_TASK_INDEX এনভায়রনমেন্ট ভেরিয়েবলে সংরক্ষিত থাকে। কোন টাস্ক ডেটার কোন উপসেটটি পরিচালনা করবে, তা নির্ধারণ করার দায়িত্ব আপনার কোডের। এই স্যাম্পলে --tasks=2 লক্ষ্য করুন। এটি নিশ্চিত করে যে আমরা যে দুটি URL প্রসেস করতে চাই, তার জন্য দুটি কন্টেইনার চলবে।

প্রতিটি টাস্ক সর্বোচ্চ ২৪ ঘন্টা পর্যন্ত চলতে পারে। আপনি --task-timeout ফ্ল্যাগ ব্যবহার করে এই টাইমআউট কমাতে পারেন, যেমনটা আমরা এই উদাহরণে করেছি। কাজটি সফলভাবে সম্পন্ন হওয়ার জন্য সমস্ত টাস্ককে সফল হতে হবে। ডিফল্টরূপে, ব্যর্থ টাস্কগুলো পুনরায় চেষ্টা করা হয় না। টাস্ক ব্যর্থ হলে সেগুলোকে পুনরায় চেষ্টা করার জন্য আপনি কনফিগার করতে পারেন। যদি কোনো টাস্ক তার চেষ্টার সংখ্যা অতিক্রম করে, তাহলে পুরো কাজটি ব্যর্থ হয়ে যায়।

ডিফল্টরূপে, আপনার জবটি যতটা সম্ভব বেশি টাস্ক সমান্তরালভাবে চালাবে। এটি আপনার জবের টাস্ক সংখ্যার সমান হবে, যা সর্বোচ্চ ১০০ পর্যন্ত হতে পারে। যেসব জব সীমিত স্কেলেবিলিটি সম্পন্ন কোনো ব্যাকএন্ড অ্যাক্সেস করে, সেগুলোর জন্য আপনি প্যারালালিজম কমিয়ে সেট করতে চাইতে পারেন। উদাহরণস্বরূপ, একটি ডাটাবেস যা সীমিত সংখ্যক সক্রিয় সংযোগ সমর্থন করে। আপনি --parallelism ফ্ল্যাগ ব্যবহার করে প্যারালালিজম কমাতে পারেন।

৬. একটি কাজ পরিচালনা করুন

জবটি চালানোর আগে, এটি তৈরি হয়েছে কিনা তা দেখতে জবটির তালিকা দেখুন:

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

অবস্থা দেখার জন্য আপনি ক্লাউড কনসোলের ক্লাউড রান জবস পৃষ্ঠাও দেখতে পারেন:

1afde14d65f0d9ce.png

আপনি ক্লাউড স্টোরেজ বাকেটটি পরীক্ষা করলে, তৈরি হওয়া দুটি স্ক্রিনশট ফাইল দেখতে পাবেন:

7c4d355f6f65106.png

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

আপনার কাজের সম্পাদন বন্ধ করতে, আপনাকে এক্সিকিউশনটি ডিলিট করতে হবে:

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

৭. একটি চাকরি আপডেট করুন

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

একইভাবে, কিছু কনফিগারেশন ভেরিয়েবল আপডেট করতে চাইলে আপনাকে জবটিও আপডেট করতে হবে। জবটির পরবর্তী এক্সিকিউশনগুলোতে নতুন কন্টেইনার এবং কনফিগারেশন সেটিংস ব্যবহৃত হবে।

জবটি আপডেট করুন এবং --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

৮. একটি কাজ নির্ধারণ করুন

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

প্রথমে, ক্লাউড শিডিউলার এপিআই (Cloud Scheduler API) সক্রিয় আছে কিনা তা নিশ্চিত করুন:

gcloud services enable cloudscheduler.googleapis.com

ক্লাউড রান জবস ডিটেইল পেজে যান এবং Triggers সেকশনে ক্লিক করুন:

3ae456368905472f.png

Add Scheduler Trigger বাটনটি নির্বাচন করুন:

48cbba777f75e1eb.png

ডানদিকে একটি প্যানেল খুলে যাবে। এই কনফিগারেশন দিয়ে প্রতিদিন সকাল ৯:০০ টায় চালানোর জন্য একটি শিডিউলার জব তৈরি করুন এবং Continue ) নির্বাচন করুন।

81fd098be0db216.png

পরবর্তী পৃষ্ঠায়, ডিফল্ট কম্পিউট সার্ভিস অ্যাকাউন্টটি নির্বাচন করুন এবং Create নির্বাচন করুন:

fe479501dfb91f9f.png

এখন আপনি একটি নতুন ক্লাউড শিডিউলার ট্রিগার তৈরি হতে দেখবেন:

5a7bc6d96b970b92.png

ক্লাউড শিডিউলার পৃষ্ঠায় যেতে View Details এ ক্লিক করুন।

আপনি শিডিউলার চালু হওয়ার জন্য সকাল ৯টা পর্যন্ত অপেক্ষা করতে পারেন অথবা Force Run নির্বাচন করে ম্যানুয়ালি ক্লাউড শিডিউলার চালু করতে পারেন।

959525f2c8041a6a.png

কয়েক সেকেন্ড পরে, আপনি দেখতে পাবেন যে ক্লাউড শিডিউলার জবটি সফলভাবে সম্পাদিত হয়েছে:

d64e03fc84d61145.png

ক্লাউড শিডিউলারের কলের মাধ্যমে যুক্ত হওয়া আরও ৩টি স্ক্রিনশটও আপনি দেখতে পাবেন:

56398a0e827de8b0.png

৯. অভিনন্দন

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

পরিচ্ছন্নতা (ঐচ্ছিক)

চার্জ এড়ানোর জন্য রিসোর্সগুলো পরিষ্কার করে নেওয়া ভালো।

আপনার যদি প্রজেক্টটির প্রয়োজন না হয়, তবে আপনি সহজেই প্রজেক্টটি মুছে ফেলতে পারেন:

gcloud projects delete $PROJECT_ID

আপনার প্রয়োজন হলে, রিসোর্সগুলো একে একে মুছে ফেলতে পারেন।

সোর্স কোডটি মুছে ফেলুন:

rm -rf ~/jobs-demos/

আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরিটি মুছে ফেলুন:

gcloud artifacts repositories delete containers --location=$REGION

পরিষেবা অ্যাকাউন্টটি মুছে ফেলুন:

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

ক্লাউড রান জবটি মুছে ফেলুন:

gcloud run jobs delete screenshot --region=$REGION

ক্লাউড শিডিউলার জবটি মুছে ফেলুন:

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

ক্লাউড স্টোরেজ বাকেটটি মুছে ফেলুন:

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

আমরা যা আলোচনা করেছি

  • অ্যাপ ব্যবহার করে কীভাবে ওয়েব পেজের স্ক্রিনশট নিতে হয়।
  • অ্যাপ্লিকেশনটির জন্য কীভাবে একটি কন্টেইনার ইমেজ তৈরি করবেন।
  • অ্যাপ্লিকেশনটির জন্য কীভাবে একটি ক্লাউড রান জব তৈরি করবেন।
  • অ্যাপ্লিকেশনটিকে ক্লাউড রান জব হিসেবে কীভাবে চালাবেন।
  • চাকরিটি কীভাবে আপডেট করবেন।
  • ক্লাউড শিডিউলার দিয়ে কীভাবে কাজটি শিডিউল করবেন।