ক্লাউড ফাংশন (২য় প্রজন্ম) দিয়ে শুরু করা

1. ভূমিকা

ক্লাউড রান ফাংশন লেখা শুরু করতে, আপনি নিম্নলিখিত কোডল্যাবগুলি ব্যবহার করতে পারেন:

অন্যথায়, এই কোডল্যাবটি আপনাকে কীভাবে ক্লাউড ফাংশন (2য় জেনার) তৈরি করতে হয় তার মধ্যে নিয়ে যায়।

ওভারভিউ

ক্লাউড ফাংশন (2য় জেনার) হল Google ক্লাউড ফাংশন এর পরবর্তী সংস্করণ, Google ক্লাউডের ফাংশন-এ-সার্ভিস অফার৷ এই নতুন সংস্করণটি একটি উন্নত বৈশিষ্ট্য সেট সহ আসে এবং এটি এখন ক্লাউড রান এবং ইভেন্টার্ক দ্বারা চালিত, যা আপনাকে কার্যক্ষমতা এবং স্কেলেবিলিটির উপর আরও উন্নত নিয়ন্ত্রণ দেয় এবং 90+ এর বেশি ইভেন্ট উত্স থেকে ফাংশন রানটাইম এবং ট্রিগারগুলির উপর আরও নিয়ন্ত্রণ দেয়৷

এই কোডল্যাবটি আপনাকে ক্লাউড ফাংশন তৈরি করার মাধ্যমে নিয়ে যাবে যা HTTP কলগুলিতে সাড়া দেয় এবং পাব/সাব মেসেজ এবং ক্লাউড অডিট লগ দ্বারা ট্রিগার হয়৷

নতুন কি?

ক্লাউড ফাংশনের এই নতুন সংস্করণটি ক্লাউড রান, ক্লাউড বিল্ড, আর্টিফ্যাক্ট রেজিস্ট্রি এবং ইভেন্টর্ক দ্বারা চালিত একটি উন্নত FaaS অভিজ্ঞতা প্রদান করে।

উন্নত পরিকাঠামো

  • দীর্ঘতর অনুরোধ প্রক্রিয়াকরণ: আপনার ক্লাউড ফাংশনগুলিকে 5 মিনিটের ডিফল্টের চেয়ে বেশি সময় চালান, যাতে ক্লাউড স্টোরেজ বা BigQuery থেকে ডেটার বড় স্ট্রীম প্রক্রিয়াকরণের মতো দীর্ঘ অনুরোধের কাজের চাপ চালানো সহজ হয়৷ HTTP ফাংশনগুলির জন্য, এটি 60 মিনিট পর্যন্ত। ইভেন্ট-চালিত ফাংশনের জন্য, এটি বর্তমানে 10 মিনিট পর্যন্ত।
  • বড় উদাহরণ: ক্লাউড ফাংশনে 16GB পর্যন্ত RAM এবং 4টি vCPU-এর সুবিধা নিন যা বৃহত্তর ইন-মেমরি, কম্পিউট-ইনটেনসিভ এবং আরও সমান্তরাল ওয়ার্কলোডের অনুমতি দেয়।
  • কনকারেন্সি: একটি একক ফাংশন ইনস্ট্যান্স সহ 1000টি পর্যন্ত সমবর্তী অনুরোধগুলি প্রক্রিয়া করুন, ঠাণ্ডা শুরু কম করা এবং স্কেলিং করার সময় লেটেন্সি উন্নত করা।
  • ন্যূনতম দৃষ্টান্ত: আপনার ঠান্ডা শুরু কমাতে পূর্ব-উষ্ণ দৃষ্টান্ত প্রদান করুন এবং নিশ্চিত করুন যে আপনার অ্যাপ্লিকেশনের বুটস্ট্র্যাপ সময় অ্যাপ্লিকেশন কর্মক্ষমতা প্রভাবিত করে না।
  • ট্র্যাফিক বিভাজন: আপনার ফাংশনের একাধিক সংস্করণ সমর্থন করুন, বিভিন্ন সংস্করণের মধ্যে ট্র্যাফিক বিভক্ত করুন এবং আপনার ফাংশনটিকে আগের সংস্করণে ফিরিয়ে আনুন।

বিস্তৃত ইভেন্ট কভারেজ এবং ক্লাউড ইভেন্ট সমর্থন

  • Eventarc ইন্টিগ্রেশন: ক্লাউড ফাংশন এখন Eventarc-এর জন্য নেটিভ সমর্থন অন্তর্ভুক্ত করে, যা ক্লাউড অডিট লগ (BigQuery, Cloud SQL, Cloud Storage...) ব্যবহার করে 90+ এর বেশি ইভেন্ট উত্স নিয়ে আসে এবং অবশ্যই Cloud Functions এখনও কাস্টম সোর্স থেকে ইভেন্ট সমর্থন করে ক্লাউড পাব/সাব সরাসরি।
  • CloudEvent বিন্যাস: সমস্ত ইভেন্ট-চালিত ফাংশন একটি সামঞ্জস্যপূর্ণ বিকাশকারী অভিজ্ঞতা নিশ্চিত করতে, উত্স নির্বিশেষে শিল্পের মান CloudEvents ( cloudevents.io ) মেনে চলে। পেলোডগুলি একটি কাঠামোগত CloudEvent এর মাধ্যমে একটি cloudevent.data পেলোড সহ পাঠানো হয় এবং CloudEvent মান প্রয়োগ করে৷

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

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

gCloud সেট আপ করুন

ক্লাউড শেল-এ, নিশ্চিত করুন যে আপনার প্রোজেক্ট আইডি সেট করা আছে এবং একটি PROJECT_ID ভেরিয়েবলে সেভ করা আছে এবং REGION us-west1 এ সেট করা আছে :

gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)
REGION=us-west1

এপিআই সক্ষম করুন

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

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudfunctions.googleapis.com \
  cloudbuild.googleapis.com \
  eventarc.googleapis.com \
  run.googleapis.com \
  logging.googleapis.com \
  pubsub.googleapis.com

3. HTTP ফাংশন

প্রথম ফাংশনের জন্য, আসুন একটি প্রমাণীকৃত Node.js ফাংশন তৈরি করি যা HTTP অনুরোধে সাড়া দেয়। আসুন একটি 10 ​​মিনিটের টাইমআউট ব্যবহার করি যে কীভাবে একটি ফাংশন HTTP অনুরোধে প্রতিক্রিয়া জানাতে আরও সময় পেতে পারে।

তৈরি করুন

অ্যাপের জন্য একটি ফোল্ডার তৈরি করুন এবং ফোল্ডারটিতে নেভিগেট করুন:

mkdir ~/hello-http && cd $_

একটি index.js ফাইল তৈরি করুন যা সহজভাবে HTTP অনুরোধে সাড়া দেয়:

const functions = require('@google-cloud/functions-framework');

functions.http('helloWorld', (req, res) => {
  res.status(200).send('HTTP with Node.js in GCF 2nd gen!');
});

নির্ভরতা নির্দিষ্ট করতে একটি package.json ফাইল তৈরি করুন:

{
  "name": "nodejs-functions-gen2-codelab",
  "version": "0.0.1",
  "main": "index.js",
  "dependencies": {
    "@google-cloud/functions-framework": "^2.0.0"
  }
}

স্থাপন করুন

ফাংশন স্থাপন করুন:

gcloud functions deploy nodejs-http-function \
  --gen2 \
  --runtime nodejs16 \
  --entry-point helloWorld \
  --source . \
  --region $REGION \
  --trigger-http \
  --timeout 600s

যদিও এই পদক্ষেপের জন্য কঠোরভাবে প্রয়োজনীয় নয়, 600 সেকেন্ডের সময়সীমা নোট করুন। এটি HTTP অনুরোধে সাড়া দেওয়ার জন্য ফাংশনটিকে দীর্ঘ সময়ের জন্য অনুমতি দেয়।

একবার ফাংশনটি স্থাপন করা হলে, আপনি ক্লাউড কনসোলের ক্লাউড ফাংশন বিভাগের অধীনে এটি দেখতে পাবেন:

7541800e1e3f299f.png

পরীক্ষা

নিম্নলিখিত কমান্ড দিয়ে ফাংশন পরীক্ষা করুন:

gcloud functions call nodejs-http-function \
  --gen2 --region $REGION

আপনি HTTP with Node.js in GCF 2nd gen! একটি প্রতিক্রিয়া হিসাবে।

4. পাব/সাব ফাংশন

দ্বিতীয় ফাংশনের জন্য, আসুন একটি নির্দিষ্ট বিষয়ে প্রকাশিত একটি Pub/Sub বার্তা দ্বারা ট্রিগার করা একটি পাইথন ফাংশন তৈরি করি।

Pub/Sub auth টোকেন সেট আপ করুন

আপনি যদি 8 এপ্রিল, 2021 তারিখে বা তার আগে Pub/Sub পরিষেবা অ্যাকাউন্ট সক্রিয় করে থাকেন, তাহলে Pub/Sub পরিষেবা অ্যাকাউন্টে iam.serviceAccountTokenCreator ভূমিকা প্রদান করুন:

PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)')

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member  serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
  --role roles/iam.serviceAccountTokenCreator

তৈরি করুন

নমুনার জন্য ব্যবহার করার জন্য একটি পাব/সাব বিষয় তৈরি করুন:

TOPIC=cloud-functions-gen2-topic
gcloud pubsub topics create $TOPIC

অ্যাপের জন্য একটি ফোল্ডার তৈরি করুন এবং ফোল্ডারটিতে নেভিগেট করুন:

mkdir ~/hello-pubsub && cd $_

একটি main.py ফাইল তৈরি করুন যা ক্লাউড ইভেন্ট আইডি সহ একটি বার্তা লগ করে:

import functions_framework

@functions_framework.cloud_event
def hello_pubsub(cloud_event):
   print('Pub/Sub with Python in GCF 2nd gen! Id: ' + cloud_event['id'])

নির্ভরতা নির্দিষ্ট করতে নিম্নলিখিত বিষয়বস্তু সহ একটি requirements.txt ফাইল তৈরি করুন:

functions-framework==3.*

স্থাপন করুন

ফাংশন স্থাপন করুন:

gcloud functions deploy python-pubsub-function \
  --gen2 \
  --runtime python39 \
  --entry-point hello_pubsub \
  --source . \
  --region $REGION \
  --trigger-topic $TOPIC

একবার ফাংশনটি স্থাপন করা হলে, আপনি ক্লাউড কনসোলের ক্লাউড ফাংশন বিভাগের অধীনে এটি দেখতে পাবেন:

107029714c32baff.png

পরীক্ষা

বিষয়ে একটি বার্তা পাঠিয়ে ফাংশন পরীক্ষা করুন:

gcloud pubsub topics publish $TOPIC --message="Hello World"

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

gcloud functions logs read python-pubsub-function \
  --region $REGION --gen2 --format "value(log)"

5. ক্লাউড স্টোরেজ ফাংশন

পরবর্তী ফাংশনের জন্য, আসুন একটি Node.js ফাংশন তৈরি করি যা একটি ক্লাউড স্টোরেজ বালতি থেকে ইভেন্টগুলিতে প্রতিক্রিয়া জানায়।

সেট আপ করুন

ক্লাউড স্টোরেজ ফাংশন ব্যবহার করতে, ক্লাউড স্টোরেজ পরিষেবা অ্যাকাউন্টে pubsub.publisher IAM ভূমিকা মঞ্জুর করুন:

SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER)

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT \
  --role roles/pubsub.publisher

তৈরি করুন

অ্যাপের জন্য একটি ফোল্ডার তৈরি করুন এবং ফোল্ডারটিতে নেভিগেট করুন:

mkdir ~/hello-storage && cd $_

একটি index.js ফাইল তৈরি করুন যা কেবল ক্লাউড স্টোরেজ ইভেন্টগুলিতে প্রতিক্রিয়া জানায়:

const functions = require('@google-cloud/functions-framework');

functions.cloudEvent('helloStorage', (cloudevent) => {
  console.log('Cloud Storage event with Node.js in GCF 2nd gen!');
  console.log(cloudevent);
});

নির্ভরতা নির্দিষ্ট করতে একটি package.json ফাইল তৈরি করুন:

{
  "name": "nodejs-functions-gen2-codelab",
  "version": "0.0.1",
  "main": "index.js",
  "dependencies": {
    "@google-cloud/functions-framework": "^2.0.0"
  }
}

স্থাপন করুন

প্রথমে, একটি ক্লাউড স্টোরেজ বালতি তৈরি করুন (অথবা আপনার ইতিমধ্যেই বিদ্যমান একটি বালতি ব্যবহার করুন):

​​export BUCKET="gs://gcf-gen2-storage-$PROJECT_ID"
gsutil mb -l $REGION $BUCKET

ফাংশন স্থাপন করুন:

gcloud functions deploy nodejs-storage-function \
  --gen2 \
  --runtime nodejs16 \
  --entry-point helloStorage \
  --source . \
  --region $REGION \
  --trigger-bucket $BUCKET \
  --trigger-location $REGION

একবার ফাংশনটি স্থাপন করা হলে, আপনি এটি ক্লাউড কনসোলের ক্লাউড ফাংশন বিভাগের অধীনে দেখতে পাবেন।

পরীক্ষা

বালতিতে একটি ফাইল আপলোড করে ফাংশনটি পরীক্ষা করুন:

echo "Hello World" > random.txt
gsutil cp random.txt $BUCKET/random.txt

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

gcloud functions logs read nodejs-storage-function \
  --region $REGION --gen2 --limit=100 --format "value(log)"

6. ক্লাউড অডিট লগ ফাংশন

পরবর্তী ফাংশনের জন্য, আসুন একটি Node.js ফাংশন তৈরি করি যা একটি ক্লাউড অডিট লগ ইভেন্ট গ্রহণ করে যখন একটি Compute Engine VM ইনস্ট্যান্স তৈরি হয়। প্রতিক্রিয়া হিসাবে, এটি নতুন তৈরি VM-এ একটি লেবেল যোগ করে, VM-এর নির্মাতাকে নির্দিষ্ট করে।

নতুন তৈরি কম্পিউট ইঞ্জিন VM নির্ধারণ করুন

কম্পিউট ইঞ্জিন 2টি অডিট লগ নির্গত করে যখন একটি VM তৈরি করা হয়।

প্রথমটি ভিএম তৈরির শুরুতে নির্গত হয় এবং এটির মতো দেখায়:

8d394a481644c4b6.png

দ্বিতীয়টি ভিএম তৈরির পরে নির্গত হয় এবং এর মতো দেখায়:

ee0e221d82887cd1.png

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

সেট আপ করুন

ক্লাউড অডিট লগ ফাংশন ব্যবহার করতে, আপনাকে অবশ্যই Eventarc-এর জন্য অডিট লগ সক্রিয় করতে হবে। আপনাকে eventarc.eventReceiver ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করতে হবে।

  1. কম্পিউট ইঞ্জিন API-এর জন্য ক্লাউড অডিট লগ অ্যাডমিন রিড , ডেটা রিড এবং ডেটা রাইটের লগ প্রকারগুলি সক্ষম করুন:

76b7417ea4071241.png

  1. ডিফল্ট কম্পিউট ইঞ্জিন পরিষেবা অ্যাকাউন্টকে eventarc.eventReceiver IAM ভূমিকা মঞ্জুর করুন:
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
  --role roles/eventarc.eventReceiver

কোড পান

অ্যাপ্লিকেশন ধারণ করে রেপো ক্লোন করুন:

git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git

অ্যাপ ডিরেক্টরিতে নেভিগেট করুন:

cd eventarc-samples/gce-vm-labeler/gcf/nodejs

index.js ফাইলটিতে অ্যাপ্লিকেশন কোড রয়েছে যা একটি CloudEvent এ মোড়ানো অডিট লগ গ্রহণ করে। এটি তারপর কম্পিউট ইঞ্জিন ভিএম ইনস্ট্যান্সের বিবরণ বের করে এবং ভিএম ইনস্ট্যান্সে একটি লেবেল সেট করে। নির্দ্বিধায় index.js অধ্যয়ন করুন আপনার নিজের থেকে আরও বিস্তারিতভাবে।

স্থাপন করুন

আপনি আগের মত gcloud দিয়ে ফাংশন স্থাপন করতে পারেন। লক্ষ্য করুন কিভাবে ফাংশনটি --trigger-event-filters পতাকা সহ কম্পিউট ইঞ্জিন সন্নিবেশের জন্য অডিট লগগুলিতে ফিল্টার করছে:

gcloud functions deploy gce-vm-labeler \
  --gen2 \
  --runtime nodejs16 \
  --entry-point labelVmCreation \
  --source . \
  --region $REGION \
  --trigger-event-filters="type=google.cloud.audit.log.v1.written,serviceName=compute.googleapis.com,methodName=beta.compute.instances.insert" \
  --trigger-location us-central1

আপনি ফাংশনটি স্থাপন করতে পারেন এবং Google ক্লাউড কনসোল থেকে একটি Eventarc ট্রিগার যোগ করতে পারেন।

প্রথমে, ক্লাউড ফাংশন বিভাগে যান এবং ২য় প্রজন্মের পরিবেশের সাথে একটি ফাংশন তৈরি করুন:

8ba79a12ee152d8.png

Add Eventarc Trigger বোতামে ক্লিক করুন:

655346320a5e3631.png

এটি ডানদিকে একটি সাইড প্যানেল খোলে যেখানে আপনি Eventarc ট্রিগারের জন্য বিভিন্ন ইভেন্ট প্রদানকারী এবং ইভেন্ট বেছে নিতে পারেন।

সঠিক ইভেন্ট প্রদানকারী এবং ইভেন্ট নির্বাচন করুন এবং তারপর Save Trigger ক্লিক করুন:

7d24325ff06c9b05.png

অবশেষে, পরবর্তী পৃষ্ঠায়, আপনি GitHub-এ index.js এবং package.json ফাইলগুলির সাথে index.js এবং package.json ফাইলগুলিকে আপডেট করতে পারেন এবং Deploy বাটনে ক্লিক করুন:

f2e338eed2ccf5a2.png

পরীক্ষা

আপনার অডিট লগ ফাংশন পরীক্ষা করার জন্য, আপনাকে ক্লাউড কনসোলে একটি কম্পিউট ইঞ্জিন ভিএম তৈরি করতে হবে (আপনি gcloud দিয়ে ভিএমও তৈরি করতে পারেন তবে এটি অডিট লগ তৈরি করে বলে মনে হয় না)।

ক্লাউড কনসোলের কম্পিউট ইঞ্জিন > ভিএম ইনস্ট্যান্স বিভাগে যান এবং একটি নতুন ভিএম তৈরি করুন। একবার VM তৈরি সম্পূর্ণ হয়ে গেলে, আপনি মৌলিক তথ্য বিভাগে ক্লাউড কনসোলে বা নিম্নলিখিত কমান্ড ব্যবহার করে VM-তে যুক্ত creator লেবেল দেখতে পাবেন:

gcloud compute instances describe YOUR_VM_NAME

আপনি নিম্নলিখিত উদাহরণের মত আউটপুটে লেবেল দেখতে হবে:

...
labelFingerprint: ULU6pAy2C7s=
labels:
  creator: atameldev
...

7. ট্রাফিক বিভাজন

ক্লাউড ফাংশন (২য় জেনার) আপনার ফাংশনের একাধিক সংশোধন সমর্থন করে, বিভিন্ন রিভিশনের মধ্যে ট্র্যাফিককে বিভক্ত করে এবং আপনার ফাংশনটিকে পূর্ববর্তী সংস্করণে ফিরিয়ে আনে। এটি সম্ভব কারণ 2nd gen ফাংশন হল হুডের অধীনে ক্লাউড রান পরিষেবা৷

এই ধাপে, আপনি একটি ফাংশনের 2টি সংশোধন স্থাপন করবেন এবং তারপর 50-50 এর মধ্যে ট্র্যাফিক বিভক্ত করবেন।

তৈরি করুন

অ্যাপের জন্য একটি ফোল্ডার তৈরি করুন এবং ফোল্ডারটিতে নেভিগেট করুন:

mkdir ~/traffic-splitting && cd $_

একটি পাইথন ফাংশন সহ একটি main.py ফাইল তৈরি করুন যা একটি রঙ পরিবেশ পরিবর্তনশীল পড়ে এবং সেই পটভূমির রঙে Hello World সাথে প্রতিক্রিয়া জানায়:

import os

color = os.environ.get('COLOR')

def hello_world(request):
    return f'<body style="background-color:{color}"><h1>Hello World!</h1></body>'

স্থাপন করুন

একটি কমলা ব্যাকগ্রাউন্ড সহ ফাংশনের প্রথম সংশোধন স্থাপন করুন:

COLOR=orange
gcloud functions deploy hello-world-colored \
  --gen2 \
  --runtime python39 \
  --entry-point hello_world \
  --source . \
  --region $REGION \
  --trigger-http \
  --allow-unauthenticated \
  --update-env-vars COLOR=$COLOR

এই মুহুর্তে, আপনি যদি আপনার ব্রাউজারে HTTP ট্রিগার (উপরের ডিপ্লয়মেন্ট কমান্ডের URI আউটপুট) দেখে ফাংশনটি পরীক্ষা করেন, তাহলে আপনাকে কমলা রঙের পটভূমি সহ Hello World দেখতে হবে:

36ca0c5f39cc89cf.png

একটি হলুদ পটভূমি সহ দ্বিতীয় সংশোধন স্থাপন করুন:

COLOR=yellow
gcloud functions deploy hello-world-colored \
  --gen2 \
  --runtime python39 \
  --entry-point hello_world \
  --source . \
  --region $REGION \
  --trigger-http \
  --allow-unauthenticated \
  --update-env-vars COLOR=$COLOR

যেহেতু এটি সর্বশেষ সংশোধন, আপনি যদি ফাংশনটি পরীক্ষা করেন তবে আপনাকে হলুদ পটভূমি সহ Hello World দেখতে হবে:

391286a08ad3cdde.png

ট্রাফিক 50-50 ভাগ করুন

কমলা এবং হলুদ রিভিশনের মধ্যে ট্র্যাফিক বিভক্ত করতে, আপনাকে অন্তর্নিহিত ক্লাউড রান পরিষেবাগুলির সংশোধন আইডিগুলি খুঁজে বের করতে হবে৷ এটি পুনর্বিবেচনা আইডি দেখতে কমান্ড:

gcloud run revisions list --service hello-world-colored \
  --region $REGION --format 'value(REVISION)'

আউটপুট নিম্নলিখিত অনুরূপ হওয়া উচিত:

hello-world-colored-00001-man
hello-world-colored-00002-wok

এখন, এই দুটি সংশোধনের মধ্যে ট্রাফিককে নিম্নরূপ বিভক্ত করুন (আপনার সংশোধনের নাম অনুসারে X-XXX আপডেট করুন):

gcloud run services update-traffic hello-world-colored \
  --region $REGION \
  --to-revisions hello-world-colored-0000X-XXX=50,hello-world-colored-0000X-XXX=50

পরীক্ষা

এর সর্বজনীন URL পরিদর্শন করে ফাংশনটি পরীক্ষা করুন। অর্ধেক সময়, আপনি কমলা সংশোধন এবং বাকি অর্ধেক, হলুদ সংশোধন দেখতে হবে:

36ca0c5f39cc89cf.png391286a08ad3cdde.png

আরও তথ্যের জন্য রোলব্যাক, ক্রমান্বয়ে রোলআউট এবং ট্রাফিক মাইগ্রেশন দেখুন।

8. নূন্যতম দৃষ্টান্ত

ক্লাউড ফাংশনে (২য় জেনারে), কেউ একটি ন্যূনতম সংখ্যক ফাংশন দৃষ্টান্ত নির্দিষ্ট করতে পারে যাতে উষ্ণ রাখা যায় এবং অনুরোধগুলি পরিবেশনের জন্য প্রস্তুত থাকে। এটি ঠান্ডা শুরুর সংখ্যা সীমিত করতে কার্যকর।

এই ধাপে, আপনি ধীর শুরুর সাথে একটি ফাংশন স্থাপন করবেন। আপনি কোল্ড স্টার্ট সমস্যা লক্ষ্য করবেন। তারপর, আপনি কোল্ড স্টার্ট থেকে মুক্তি পেতে ন্যূনতম দৃষ্টান্ত মান 1 সেট করে ফাংশনটি স্থাপন করবেন।

তৈরি করুন

অ্যাপের জন্য একটি ফোল্ডার তৈরি করুন এবং এতে নেভিগেট করুন:

mkdir ~/min-instances && cd $_

একটি main.go ফাইল তৈরি করুন। এই Go পরিষেবাটিতে একটি init ফাংশন রয়েছে যা 10 সেকেন্ডের জন্য ঘুমায় একটি দীর্ঘ প্রাথমিককরণ অনুকরণ করতে। এটিতে একটি HelloWorld ফাংশন রয়েছে যা HTTP কলগুলিতে সাড়া দেয়:

package p

import (
        "fmt"
        "net/http"
        "time"
)

func init() {
        time.Sleep(10 * time.Second)
}

func HelloWorld(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Slow HTTP Go in GCF 2nd gen!")
}

স্থাপন করুন

শূন্যের ডিফল্ট ন্যূনতম দৃষ্টান্ত মান সহ ফাংশনের প্রথম সংশোধন স্থাপন করুন:

gcloud functions deploy slow-function \
  --gen2 \
  --runtime go116 \
  --entry-point HelloWorld \
  --source . \
  --region $REGION \
  --trigger-http \
  --allow-unauthenticated

এই কমান্ড দিয়ে ফাংশন পরীক্ষা করুন:

gcloud functions call slow-function \
  --gen2 --region $REGION

আপনি প্রথম কলে 10 সেকেন্ড বিলম্ব (কোল্ড স্টার্ট) পর্যবেক্ষণ করবেন এবং তারপর বার্তাটি দেখতে পাবেন। পরবর্তী কল অবিলম্বে ফিরে আসা উচিত.

ন্যূনতম দৃষ্টান্ত সেট করুন

প্রথম অনুরোধে কোল্ড স্টার্ট থেকে পরিত্রাণ পেতে, --min-instances ফ্ল্যাগটি নিম্নরূপ 1-এ সেট করে ফাংশনটি পুনরায় স্থাপন করুন:

gcloud functions deploy slow-function \
  --gen2 \
  --runtime go116 \
  --entry-point HelloWorld \
  --source . \
  --region $REGION \
  --trigger-http \
  --allow-unauthenticated \
  --min-instances 1

পরীক্ষা

আবার ফাংশন পরীক্ষা করুন:

gcloud functions call slow-function \
  --gen2 --region $REGION

প্রথম অনুরোধে আপনি আর 10 সেকেন্ড বিলম্ব দেখতে পাবেন না। প্রথম আহ্বানের জন্য কোল্ড স্টার্ট সমস্যা (অনেকদিন পরে) চলে গেছে, ন্যূনতম উদাহরণের জন্য ধন্যবাদ!

আরও তথ্যের জন্য সর্বনিম্ন দৃষ্টান্ত ব্যবহার দেখুন।

9. সঙ্গতি

ক্লাউড ফাংশনে (2য় জেনারে), একটি ফাংশন ইনস্ট্যান্স ডিফল্টরূপে 1টি সমবর্তী অনুরোধ পরিচালনা করে তবে আপনি একটি উদাহরণ দ্বারা একযোগে প্রক্রিয়া করা যেতে পারে এমন একযোগে অনুরোধের সংখ্যা নির্দিষ্ট করতে পারেন। এটি ঠান্ডা শুরু প্রতিরোধেও কার্যকর হতে পারে কারণ প্রতিটি সমান্তরাল অনুরোধের জন্য একটি নতুন ফাংশন উদাহরণ তৈরি করার প্রয়োজন নেই।

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

কোল্ড-স্টার্ট সমস্যা সমাধানের জন্য, আপনি 100 এর সমবর্তিত মান সহ অন্য একটি ফাংশন স্থাপন করবেন। আপনি লক্ষ্য করবেন যে 10টি অনুরোধ এখন কোল্ড স্টার্ট সমস্যা সৃষ্টি করে না এবং একটি একক ফাংশন ইনস্ট্যান্স সমস্ত অনুরোধগুলি পরিচালনা করতে পারে।

সঙ্গতি ছাড়াই পরীক্ষা

ফাংশনের URL পান:

SLOW_URL=$(gcloud functions describe slow-function --region $REGION --gen2 --format="value(serviceConfig.uri)")

ধীর ফাংশনে 10টি সমসাময়িক অনুরোধ পাঠাতে hey নামে একটি ওপেন সোর্স বেঞ্চমার্কিং টুল ব্যবহার করুন। hey ইতিমধ্যে ক্লাউড শেল ইনস্টল করা আছে:

hey -n 10 -c 10 $SLOW_URL

hey এর আউটপুটে আপনার দেখতে হবে যে কিছু অনুরোধ দীর্ঘ সময় নিচ্ছে:

Summary:
  Total:        10.9053 secs
  Slowest:      10.9048 secs
  Fastest:      0.4439 secs
  Average:      9.7930 secs
  Requests/sec: 0.9170

  Total data:   310 bytes
  Size/request: 31 bytes

Response time histogram:
  0.444 [1]     |■■■■
  1.490 [0]     |
  2.536 [0]     |
  3.582 [0]     |
  4.628 [0]     |
  5.674 [0]     |
  6.720 [0]     |
  7.767 [0]     |
  8.813 [0]     |
  9.859 [0]     |
  10.905 [9]    |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

এটি কারণ অনুরোধগুলি পরিচালনা করার জন্য আরও ফাংশন উদাহরণ তৈরি করা হচ্ছে। আপনি যদি ফাংশনের জন্য সক্রিয় দৃষ্টান্ত গণনা পরীক্ষা করেন, তাহলে আপনাকে এটিও দেখতে হবে যে কিছু পয়েন্ট হিসাবে একাধিক দৃষ্টান্ত তৈরি করা হয়েছে এবং এগুলি কোল্ড স্টার্ট সমস্যা সৃষ্টি করছে:

9f5c6877836d62fb.png

স্থাপন করুন

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

gcloud functions deploy slow-concurrent-function \
  --gen2 \
  --runtime go116 \
  --entry-point HelloWorld \
  --source . \
  --region $REGION \
  --trigger-http \
  --allow-unauthenticated \
  --min-instances 1

সঙ্গতি সেট করুন

ফাংশনের জন্য অন্তর্নিহিত ক্লাউড রান পরিষেবার সঙ্গতি 100 এ সেট করুন (এটি সর্বাধিক 1000 হতে পারে)। এটি নিশ্চিত করে যে কমপক্ষে 100টি অনুরোধ একটি একক ফাংশন উদাহরণ দ্বারা পরিচালনা করা যেতে পারে:

gcloud run services update slow-concurrent-function \
  --concurrency 100 \
  --cpu 1 \
  --region $REGION 

একযোগে পরীক্ষা করুন

ফাংশনের URL পান:

SLOW_CONCURRENT_URL=$(gcloud functions describe slow-concurrent-function --region $REGION --gen2 --format="value(serviceConfig.uri)")

তারপর, 10টি সমবর্তী অনুরোধ পাঠাতে hey ব্যবহার করুন:

hey -n 10 -c 10 $SLOW_CONCURRENT_URL

আপনি hey এর আউটপুটে দেখতে পাবেন যে সমস্ত অনুরোধ দ্রুত প্রক্রিয়া করা হয়:

Summary:
  Total:        0.2164 secs
  Slowest:      0.2163 secs
  Fastest:      0.0921 secs
  Average:      0.2033 secs
  Requests/sec: 46.2028

  Total data:   310 bytes
  Size/request: 31 bytes

Response time histogram:
  0.092 [1]     |■■■■
  0.105 [0]     |
  0.117 [0]     |
  0.129 [0]     |
  0.142 [0]     |
  0.154 [0]     |
  0.167 [0]     |
  0.179 [0]     |
  0.191 [0]     |
  0.204 [0]     |
  0.216 [9]     |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

একটি একক ফাংশন দৃষ্টান্ত সমস্ত অনুরোধগুলি পরিচালনা করতে সক্ষম হয়েছিল এবং কোল্ড স্টার্ট সমস্যাটি চলে গেছে, বর্ধিত সমঝোতার জন্য ধন্যবাদ!

আরও তথ্যের জন্য সঙ্গতি দেখুন।

10. অভিনন্দন!

কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন!

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

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