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

1. ভূমিকা

1965fab24c502bd5.png

ওভারভিউ

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

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

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

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

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

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

আপনি কি শিখবেন

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

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

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

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

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

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

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

84688aa223b1c3a2.png

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

320e18fedb7fbe0.png

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

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

3. কোড পান

ওয়েব পৃষ্ঠাগুলির স্ক্রিনশট নিতে এবং সেগুলিকে ক্লাউড স্টোরেজে সংরক্ষণ করতে আপনি প্রথমে একটি 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 কন্টেইনার ইমেজ সংজ্ঞায়িত করে।

4. কোড অন্বেষণ করুন

কোডটি অন্বেষণ করতে, ক্লাউড শেল উইন্ডোর শীর্ষে 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
  });
}

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

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

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

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

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

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 \
  --service-account=screenshot-sa@$PROJECT_ID.iam.gserviceaccount.com

এটি উত্স ভিত্তিক স্থাপনা ব্যবহার করে এবং এটি কার্যকর না করে একটি ক্লাউড রান কাজ তৈরি করে।

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

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

প্রতিটি কাজ 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

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

1afde14d65f0d9ce.png

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

7c4d355f6f65106.png

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

আপনার কাজের একটি নির্বাহ বন্ধ করতে, আপনাকে মৃত্যুদন্ড মুছে ফেলতে হবে:

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

7. একটি কাজ আপডেট করুন

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

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

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

8. একটি কাজের সময়সূচী

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

প্রথমে, নিশ্চিত করুন যে ক্লাউড শিডিউলার API সক্ষম করা আছে:

gcloud services enable cloudscheduler.googleapis.com

ক্লাউড রান কাজের বিস্তারিত পৃষ্ঠায় যান এবং Triggers বিভাগে ক্লিক করুন:

3ae456368905472f.png

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

48cbba777f75e1eb.png

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

81fd098be0db216.png

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

fe479501dfb91f9f.png

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

5a7bc6d96b970b92.png

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

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

959525f2c8041a6a.png

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

d64e03fc84d61145.png

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

56398a0e827de8b0.png

9. অভিনন্দন

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

পরিষ্কার করা (ঐচ্ছিক)

চার্জ এড়াতে, সম্পদ পরিষ্কার করা একটি ভাল ধারণা।

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

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

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

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