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

1. ভূমিকা

1965fab24c502bd5.png

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

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

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

ক্লাউড রান জবসে, আপনি আপনার কন্টেইনারের একাধিক কপি সমান্তরালভাবে চালাতে পারেন, বেশ কয়েকটি কাজ নির্দিষ্ট করে। প্রতিটি কাজ কন্টেইনারের একটি চলমান কপি উপস্থাপন করে। প্রতিটি কাজ স্বাধীনভাবে আপনার ডেটার একটি উপসেট প্রক্রিয়া করতে পারলে একাধিক কাজ ব্যবহার করা কার্যকর। উদাহরণস্বরূপ, ক্লাউড SQL থেকে 10,000 রেকর্ড বা ক্লাউড স্টোরেজ থেকে 10,000 ফাইল প্রক্রিয়াকরণের মাধ্যমে 10 টি কাজ 1000 রেকর্ড বা ফাইল প্রক্রিয়াকরণের মাধ্যমে দ্রুত সম্পন্ন করা যেতে পারে, প্রতিটি সমান্তরালভাবে।

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

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

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

তুমি কি শিখবে

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

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

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

  1. গুগল ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। যদি আপনার ইতিমধ্যেই একটি জিমেইল বা গুগল ওয়ার্কস্পেস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

295004821bab6a87.png সম্পর্কে

37d264871000675d.png সম্পর্কে

96d86d3d5655cdbe.png সম্পর্কে

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

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

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

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

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

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

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

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

জিক্লাউড সেট আপ করুন

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

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

API গুলি সক্ষম করুন

সমস্ত প্রয়োজনীয় পরিষেবা সক্ষম করুন:

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 পরিবেশ পরিবর্তনশীল হিসাবে পাস করা হয়। বাকেটের নামটি সমস্ত Google ক্লাউডে বিশ্বব্যাপী অনন্য হতে হবে।
  • একটি CLOUD_RUN_TASK_INDEX এনভায়রনমেন্ট ভ্যারিয়েবল Cloud Run jobs দ্বারা পাস করা হয়। Cloud Run jobs অ্যাপ্লিকেশনের একাধিক কপি অনন্য টাস্ক হিসেবে চালাতে পারে। CLOUD_RUN_TASK_INDEX চলমান টাস্কের সূচক উপস্থাপন করে। Cloud Run jobs এর বাইরে কোড চালানো হলে এটি ডিফল্টভাবে শূন্য থাকে। যখন অ্যাপ্লিকেশনটি একাধিক টাস্ক হিসেবে চালানো হয়, তখন প্রতিটি টাস্ক/কন্টেইনার তার জন্য দায়ী URLটি তুলে নেয়, একটি স্ক্রিনশট নেয় এবং ছবিটি বাকেটে সংরক্ষণ করে।

প্যাকেজ.জেসন

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 লক্ষ্য করুন। এটি নিশ্চিত করে যে আমরা যে 2টি URL প্রক্রিয়া করতে চাই তার জন্য 2টি কন্টেইনার চলছে।

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

ডিফল্টরূপে, আপনার কাজটি যতটা সম্ভব সমান্তরালভাবে চালানো হবে। এটি আপনার কাজের জন্য কাজের সংখ্যার সমান হবে, সর্বোচ্চ 100 পর্যন্ত। সীমিত স্কেলেবিলিটি সহ ব্যাকএন্ড অ্যাক্সেস করে এমন কাজের জন্য আপনি parallelism lower সেট করতে পারেন। উদাহরণস্বরূপ, একটি ডাটাবেস যা সীমিত সংখ্যক সক্রিয় সংযোগ সমর্থন করে। আপনি --parallelism পতাকা দিয়ে 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

কয়েক সেকেন্ড পরে, আপনি বাকেটে আরও 3টি স্ক্রিনশট যুক্ত দেখতে পাবেন:

ed0cbe0b5a5f9144.png সম্পর্কে

৮. একটি কাজের সময়সূচী নির্ধারণ করুন

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

প্রথমে, নিশ্চিত করুন যে ক্লাউড শিডিউলার 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 সম্পর্কে

ক্লাউড শিডিউলারের কলে যোগ করা আরও 3টি স্ক্রিনশট আপনার দেখা উচিত:

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

আমরা যা কভার করেছি

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