1. ভূমিকা
ওভারভিউ
ক্লাউড রান ফাংশন হল Google ক্লাউডের ফাংশন-এ-এ-সার্ভিস অফার যা Cloud Run এবং Eventarc দ্বারা চালিত হয়, যা আপনাকে কার্যক্ষমতা এবং স্কেলেবিলিটির উপর আরও উন্নত নিয়ন্ত্রণ দেয় এবং 90টিরও বেশি ইভেন্ট উত্স থেকে ফাংশন রানটাইম এবং ট্রিগারগুলির উপর আরও নিয়ন্ত্রণ দেয়৷
এই কোডল্যাব আপনাকে ক্লাউড রান ফাংশন তৈরি করার মাধ্যমে নিয়ে যাবে যা HTTP কলগুলিতে সাড়া দেয় এবং পাব/সাব মেসেজ এবং ক্লাউড অডিট লগ দ্বারা ট্রিগার হয়।
এই কোডল্যাবটি --base-image পতাকা ব্যবহার করে একটি বেস ইমেজ নির্দিষ্ট করে ফাংশন স্থাপনার জন্য স্বয়ংক্রিয় বেস ইমেজ আপডেট ব্যবহার করে। ক্লাউড রানের জন্য স্বয়ংক্রিয় বেস ইমেজ আপডেট Google-কে স্বয়ংক্রিয়ভাবে বেস ইমেজের অপারেটিং সিস্টেম এবং ভাষা রানটাইম উপাদানগুলিতে নিরাপত্তা প্যাচ তৈরি করতে সক্ষম করে। বেস ইমেজ আপডেট করার জন্য আপনাকে আপনার পরিষেবা পুনর্নির্মাণ বা পুনরায় স্থাপন করতে হবে না। আরও তথ্যের জন্য, স্বয়ংক্রিয় বেস ইমেজ আপডেটগুলি দেখুন
আপনি যদি স্বয়ংক্রিয় বেস ইমেজ আপডেটগুলি ব্যবহার না করতে পছন্দ করেন তবে আপনি এই কোডল্যাবে দেখানো উদাহরণগুলি থেকে --base-image পতাকাটি সরাতে পারেন।
আপনি কি শিখবেন
- ক্লাউড রান ফাংশনগুলির ওভারভিউ এবং কীভাবে স্বয়ংক্রিয় বেস ইমেজ আপডেটগুলি ব্যবহার করবেন।
- HTTP কলে সাড়া দেয় এমন একটি ফাংশন কীভাবে লিখবেন।
- কিভাবে একটি ফাংশন লিখতে হয় যা পাব/সাব বার্তাগুলিতে প্রতিক্রিয়া জানায়।
- ক্লাউড স্টোরেজ ইভেন্টগুলিতে সাড়া দেয় এমন একটি ফাংশন কীভাবে লিখবেন।
- কিভাবে দুটি রিভিশনের মধ্যে ট্রাফিক বিভক্ত করা যায়।
- ঠাণ্ডা থেকে মুক্তি পাওয়ার উপায় ন্যূনতম দৃষ্টান্ত দিয়ে শুরু হয়।
2. সেটআপ এবং প্রয়োজনীয়তা
একটি রুট ফোল্ডার তৈরি করুন
সমস্ত উদাহরণের জন্য একটি রুট ফোল্ডার তৈরি করুন।
mkdir crf-codelab cd crf-codelab
পরিবেশের ভেরিয়েবল সেট আপ করুন
এই কোডল্যাব জুড়ে ব্যবহার করা হবে এমন পরিবেশের ভেরিয়েবল সেট করুন/
gcloud config set project <YOUR-PROJECT-ID> REGION=<YOUR_REGION> PROJECT_ID=$(gcloud config get-value project)
এপিআই সক্ষম করুন
সমস্ত প্রয়োজনীয় পরিষেবাগুলি সক্ষম করুন:
gcloud services enable \ artifactregistry.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 hello-http
একটি index.js ফাইল তৈরি করুন যা HTTP অনুরোধে সাড়া দেয়:
const functions = require('@google-cloud/functions-framework');
functions.http('helloWorld', (req, res) => {
res.status(200).send('HTTP with Node.js in Cloud Run functions!');
});
নির্ভরতা নির্দিষ্ট করতে একটি package.json ফাইল তৈরি করুন:
{
"name": "nodejs-run-functions-codelab",
"version": "0.0.1",
"main": "index.js",
"dependencies": {
"@google-cloud/functions-framework": "^2.0.0"
}
}
স্থাপন করুন
ফাংশন স্থাপন করুন:
gcloud run deploy nodejs-run-function \
--source . \
--function helloWorld \
--base-image nodejs22 \
--region $REGION \
--timeout 600 \
--no-allow-unauthenticated
এই কমান্ডটি আপনার ফাংশন সোর্স কোডকে প্রোডাকশন-রেডি কন্টেইনার ইমেজে রূপান্তর করতে বিল্ডপ্যাক ব্যবহার করে।
নিম্নলিখিত নোট করুন:
-
--sourceপতাকাটি ক্লাউড রানকে ফাংশনটিকে একটি চালানযোগ্য কন্টেইনার ভিত্তিক পরিষেবাতে তৈরি করতে বলার জন্য ব্যবহৃত হয় -
--functionপতাকা (নতুন) ব্যবহার করা হয় নতুন পরিষেবার এন্ট্রিপয়েন্ট সেট করার জন্য যে ফাংশন স্বাক্ষর আপনি আহ্বান করতে চান -
--base-imageপতাকা (নতুন) আপনার ফাংশনের জন্য বেস ইমেজ পরিবেশ নির্দিষ্ট করে, যেমনnodejs22,python312,go123,java21,dotnet8,ruby33, বাphp83। বেস ইমেজ এবং প্রতিটি ইমেজে অন্তর্ভুক্ত প্যাকেজ সম্পর্কে আরো বিস্তারিত জানার জন্য, রানটাইমস বেস ইমেজ দেখুন। - (ঐচ্ছিক)
--timeoutফ্ল্যাগটি HTTP অনুরোধে সাড়া দেওয়ার জন্য ফাংশনটিকে দীর্ঘ সময় শেষ করার অনুমতি দেয়। এই উদাহরণে, 10 মিনিটের প্রতিক্রিয়া সময় প্রদর্শন করতে 600 সেকেন্ড ব্যবহার করা হয়। - (ঐচ্ছিক) আপনার ফাংশনকে সর্বজনীনভাবে আবেদন করা থেকে আটকাতে
--no-allow-unauthenticated
পরীক্ষা
নিম্নলিখিত কমান্ড দিয়ে ফাংশন পরীক্ষা করুন:
# get the Service URL SERVICE_URL="$(gcloud run services describe nodejs-run-function --region $REGION --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
আপনি HTTP with Node.js in Cloud Run functions! প্রতিক্রিয়া হিসাবে।
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-run-functions-pubsub-topic gcloud pubsub topics create $TOPIC
অ্যাপের জন্য একটি ফোল্ডার তৈরি করুন এবং ফোল্ডারটিতে নেভিগেট করুন:
mkdir ../hello-pubsub cd ../hello-pubsub
একটি main.py ফাইল তৈরি করুন যা CloudEvent আইডি ধারণকারী একটি বার্তা লগ করে:
import functions_framework
@functions_framework.cloud_event
def hello_pubsub(cloud_event):
print('Pub/Sub with Python in Cloud Run functions! Id: ' + cloud_event['id'])
নির্ভরতা নির্দিষ্ট করতে নিম্নলিখিত বিষয়বস্তু সহ একটি requirements.txt ফাইল তৈরি করুন:
functions-framework==3.*
স্থাপন করুন
ফাংশন স্থাপন করুন:
gcloud run deploy python-pubsub-function \
--source . \
--function hello_pubsub \
--base-image python313 \
--region $REGION \
--no-allow-unauthenticated
পরিষেবা অ্যাকাউন্ট পরিচয়ের জন্য ব্যবহৃত প্রকল্প নম্বর পুনরুদ্ধার করুন।
PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)')
ট্রিগার তৈরি করুন
gcloud eventarc triggers create python-pubsub-function-trigger \
--location=$REGION \
--destination-run-service=python-pubsub-function \
--destination-run-region=$REGION \
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
--transport-topic=projects/$PROJECT_ID/topics/$TOPIC \
--service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
পরীক্ষা
বিষয়ে একটি বার্তা পাঠিয়ে ফাংশন পরীক্ষা করুন:
gcloud pubsub topics publish $TOPIC --message="Hello World"
আপনি লগগুলিতে প্রাপ্ত ক্লাউড ইভেন্ট দেখতে পাবেন:
gcloud run services logs read python-pubsub-function --region $REGION --limit=10
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 ../hello-storage
একটি index.js ফাইল তৈরি করুন যা কেবল ক্লাউড স্টোরেজ ইভেন্টগুলিতে প্রতিক্রিয়া জানায়:
const functions = require('@google-cloud/functions-framework');
functions.cloudEvent('helloStorage', (cloudevent) => {
console.log('Cloud Storage event with Node.js in Cloud Run functions!');
console.log(cloudevent);
});
নির্ভরতা নির্দিষ্ট করতে একটি package.json ফাইল তৈরি করুন:
{
"name": "nodejs-crf-cloud-storage",
"version": "0.0.1",
"main": "index.js",
"dependencies": {
"@google-cloud/functions-framework": "^2.0.0"
}
}
স্থাপন করুন
প্রথমে, একটি ক্লাউড স্টোরেজ বালতি তৈরি করুন (অথবা আপনার ইতিমধ্যেই বিদ্যমান একটি বালতি ব্যবহার করুন):
export BUCKET_NAME="gcf-storage-$PROJECT_ID" export BUCKET="gs://gcf-storage-$PROJECT_ID" gsutil mb -l $REGION $BUCKET
ফাংশন স্থাপন করুন:
gcloud run deploy nodejs-crf-cloud-storage \ --source . \ --base-image nodejs22 \ --function helloStorage \ --region $REGION \ --no-allow-unauthenticated
একবার ফাংশনটি স্থাপন করা হলে, আপনি এটি ক্লাউড কনসোলের ক্লাউড রান বিভাগের অধীনে দেখতে পাবেন।
এখন Eventarc ট্রিগার তৈরি করুন।
BUCKET_REGION=$REGION gcloud eventarc triggers create nodejs-crf-cloud-storage-trigger \ --location=$BUCKET_REGION \ --destination-run-service=nodejs-crf-cloud-storage \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
পরীক্ষা
বালতিতে একটি ফাইল আপলোড করে ফাংশনটি পরীক্ষা করুন:
echo "Hello World" > random.txt gsutil cp random.txt $BUCKET/random.txt
আপনি লগগুলিতে প্রাপ্ত ক্লাউড ইভেন্ট দেখতে পাবেন:
gcloud run services logs read nodejs-crf-cloud-storage --region $REGION --limit=10
6. ক্লাউড অডিট লগ
পরবর্তী ফাংশনের জন্য, আসুন একটি Node.js ফাংশন তৈরি করি যা একটি ক্লাউড অডিট লগ ইভেন্ট গ্রহণ করে যখন একটি Compute Engine VM ইনস্ট্যান্স তৈরি হয়। প্রতিক্রিয়া হিসাবে, এটি নতুন তৈরি VM-এ একটি লেবেল যোগ করে, VM-এর নির্মাতাকে নির্দিষ্ট করে।
নতুন তৈরি কম্পিউট ইঞ্জিন VM নির্ধারণ করুন
কম্পিউট ইঞ্জিন 2টি অডিট লগ নির্গত করে যখন একটি VM তৈরি করা হয়।
প্রথমটি ভিএম তৈরির শুরুতে নির্গত হয়। VM তৈরি হওয়ার পরে দ্বিতীয়টি নির্গত হয়।
অডিট লগগুলিতে, অপারেশন ক্ষেত্রগুলি আলাদা, যার মধ্যে first: true এবং last: true মান রয়েছে। দ্বিতীয় অডিট লগে একটি উদাহরণ লেবেল করার জন্য আমাদের প্রয়োজনীয় সমস্ত তথ্য রয়েছে, তাই ক্লাউড রান ফাংশনে এটি সনাক্ত করতে আমরা last: true পতাকাটি ব্যবহার করব।
সেট আপ করুন
ক্লাউড অডিট লগ ফাংশন ব্যবহার করতে, আপনাকে অবশ্যই Eventarc-এর জন্য অডিট লগ সক্রিয় করতে হবে। আপনাকে eventarc.eventReceiver ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করতে হবে।
- কম্পিউট ইঞ্জিন API-এর জন্য ক্লাউড অডিট লগ অ্যাডমিন রিড , ডেটা রিড এবং ডেটা রাইটের লগ প্রকারগুলি সক্ষম করুন৷
- ডিফল্ট কম্পিউট ইঞ্জিন পরিষেবা অ্যাকাউন্টকে
eventarc.eventReceiverIAM ভূমিকা মঞ্জুর করুন:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver
ফাংশন তৈরি করুন
এই কোডল্যাবটি node.js ব্যবহার করে তবে আপনি https://github.com/GoogleCloudPlatform/eventarc-samples এ অন্যান্য উদাহরণ পেতে পারেন
একটি package.json ফাইল তৈরি করুন
{
"dependencies": {
"googleapis": "^84.0.0"
}
}
একটি node.js ফাইল তৈরি করুন
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
const { google } = require("googleapis");
var compute = google.compute("v1");
exports.labelVmCreation = async (cloudevent) => {
const data = cloudevent.body;
// in case an event has >1 audit log
// make sure we respond to the last event
if (!data.operation || !data.operation.last) {
console.log("Operation is not last, skipping event");
return;
}
// projects/dogfood-gcf-saraford/zones/us-central1-a/instances/instance-1
var resourceName = data.protoPayload.resourceName;
var resourceParts = resourceName.split("/");
var project = resourceParts[1];
var zone = resourceParts[3];
var instanceName = resourceParts[5];
var username = data.protoPayload.authenticationInfo.principalEmail.split("@")[0];
console.log(`Setting label username: ${username} to instance ${instanceName} for zone ${zone}`);
var authClient = await google.auth.getClient({
scopes: ["https://www.googleapis.com/auth/cloud-platform"]
});
// per docs: When updating or adding labels in the API,
// you need to provide the latest labels fingerprint with your request,
// to prevent any conflicts with other requests.
var labelFingerprint = await getInstanceLabelFingerprint(authClient, project, zone, instanceName);
var responseStatus = await setVmLabel(
authClient,
labelFingerprint,
username,
project,
zone,
instanceName
);
// log results of setting VM label
console.log(JSON.stringify(responseStatus, null, 2));
};
async function getInstanceLabelFingerprint(authClient, project, zone, instanceName) {
var request = {
project: project,
zone: zone,
instance: instanceName,
auth: authClient
};
var response = await compute.instances.get(request);
var labelFingerprint = response.data.labelFingerprint;
return labelFingerprint;
}
async function setVmLabel(authClient, labelFingerprint, username, project, zone, instanceName) {
var request = {
project: project,
zone: zone,
instance: instanceName,
resource: {
labels: { "creator": username },
labelFingerprint: labelFingerprint
},
auth: authClient
};
var response = await compute.instances.setLabels(request);
return response.statusText;
}
স্থাপন করুন
ফাংশন স্থাপন করুন:
gcloud run deploy gce-vm-labeler \ --source . \ --function labelVmCreation \ --region $REGION \ --no-allow-unauthenticated
এখন ট্রিগার তৈরি করুন। লক্ষ্য করুন কিভাবে ফাংশনটি কম্পিউট ইঞ্জিন সন্নিবেশের জন্য অডিট লগগুলিতে --trigger-event-filters পতাকা দিয়ে ফিল্টার করছে।
gcloud eventarc triggers create gce-vm-labeler-trigger \ --location=$REGION \ --destination-run-service=gce-vm-labeler \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.audit.log.v1.written,serviceName=compute.googleapis.com,methodName=v1.compute.instances.insert" \ --service-account=$ROJECT_NUMBER-compute@developer.gserviceaccount.com
পরীক্ষা
env vars সেট করুন:
# if you're using europe-west1 as your region
ZONE=europe-west1-d
VM_NAME=codelab-crf-auditlog
একটি VM তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud compute instances create $VM_NAME --zone=$ZONE --machine-type=e2-medium --image-family=debian-11 --image-project=debian-cloud
একবার VM তৈরি সম্পূর্ণ হয়ে গেলে, আপনি মৌলিক তথ্য বিভাগে ক্লাউড কনসোলে বা নিম্নলিখিত কমান্ড ব্যবহার করে VM-তে যুক্ত creator লেবেল দেখতে পাবেন:
gcloud compute instances describe $VM_NAME --zone=$ZONE
আপনি নিম্নলিখিত উদাহরণের মত আউটপুটে লেবেল দেখতে হবে:
... labelFingerprint: ULU6pAy2C7s= labels: creator: atameldev ...
পরিষ্কার করুন
VM দৃষ্টান্ত মুছে ফেলার বিষয়টি নিশ্চিত করুন। এই ল্যাবে এটি আর ব্যবহার করা হবে না।
gcloud compute instances delete $VM_NAME --zone=$ZONE
7. ট্রাফিক বিভাজন
ক্লাউড রান ফাংশনগুলি আপনার ফাংশনগুলির একাধিক সংশোধন সমর্থন করে, বিভিন্ন সংশোধনগুলির মধ্যে ট্র্যাফিককে বিভক্ত করে এবং আপনার ফাংশনটিকে পূর্বের সংস্করণে ফিরিয়ে আনে৷
এই ধাপে, আপনি একটি ফাংশনের 2টি সংশোধন স্থাপন করবেন এবং তারপর 50-50 এর মধ্যে ট্র্যাফিক বিভক্ত করবেন।
তৈরি করুন
অ্যাপের জন্য একটি ফোল্ডার তৈরি করুন এবং ফোল্ডারটিতে নেভিগেট করুন:
mkdir ../traffic-splitting cd ../traffic-splitting
একটি পাইথন ফাংশন সহ একটি 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>'
নির্ভরতা নির্দিষ্ট করতে নিম্নলিখিত বিষয়বস্তু সহ একটি requirements.txt ফাইল তৈরি করুন:
functions-framework==3.*
স্থাপন করুন
একটি কমলা ব্যাকগ্রাউন্ড সহ ফাংশনের প্রথম সংশোধন স্থাপন করুন:
COLOR=orange gcloud run deploy hello-world-colors \ --source . \ --base-image python313 \ --function hello_world \ --region $REGION \ --allow-unauthenticated \ --update-env-vars COLOR=$COLOR
এই মুহুর্তে, আপনি যদি আপনার ব্রাউজারে HTTP ট্রিগার (উপরের ডিপ্লয়মেন্ট কমান্ডের URI আউটপুট) দেখে ফাংশনটি পরীক্ষা করেন, তাহলে আপনাকে কমলা রঙের পটভূমি সহ Hello World দেখতে হবে:

একটি হলুদ পটভূমি সহ দ্বিতীয় সংশোধন স্থাপন করুন:
COLOR=yellow gcloud run deploy hello-world-colors \ --source . \ --base-image python313 \ --function hello_world \ --region $REGION \ --allow-unauthenticated \ --update-env-vars COLOR=$COLOR
যেহেতু এটি সর্বশেষ সংশোধন, আপনি যদি ফাংশনটি পরীক্ষা করেন তবে আপনাকে হলুদ পটভূমি সহ Hello World দেখতে হবে:

ট্রাফিক 50-50 ভাগ করুন
কমলা এবং হলুদ রিভিশনের মধ্যে ট্র্যাফিক বিভক্ত করতে, আপনাকে ক্লাউড রান পরিষেবাগুলির সংশোধন আইডিগুলি খুঁজে বের করতে হবে৷ এটি পুনর্বিবেচনা আইডি দেখতে কমান্ড:
gcloud run revisions list --service hello-world-colors \ --region $REGION --format 'value(REVISION)'
আউটপুট নিম্নলিখিত অনুরূপ হওয়া উচিত:
hello-world-colors-00001-man hello-world-colors-00002-wok
এখন, এই দুটি সংশোধনের মধ্যে ট্রাফিককে নিম্নরূপ বিভক্ত করুন (আপনার সংশোধনের নাম অনুসারে X-XXX আপডেট করুন):
gcloud run services update-traffic hello-world-colors \ --region $REGION \ --to-revisions hello-world-colors-0000X-XXX=50,hello-world-colors-0000X-XXX=50
পরীক্ষা
এর সর্বজনীন URL পরিদর্শন করে ফাংশনটি পরীক্ষা করুন। অর্ধেক সময়, আপনি কমলা সংশোধন এবং বাকি অর্ধেক, হলুদ সংশোধন দেখতে হবে:


আরও তথ্যের জন্য রোলব্যাক, ক্রমান্বয়ে রোলআউট এবং ট্রাফিক মাইগ্রেশন দেখুন।
8. নূন্যতম দৃষ্টান্ত
ক্লাউড রান ফাংশনে, আপনি উষ্ণ এবং অনুরোধ পরিবেশনের জন্য প্রস্তুত রাখার জন্য ন্যূনতম সংখ্যক ফাংশন উদাহরণ নির্দিষ্ট করতে পারেন। এটি ঠান্ডা শুরুর সংখ্যা সীমিত করতে কার্যকর।
এই ধাপে, আপনি ধীর শুরুর সাথে একটি ফাংশন স্থাপন করবেন। আপনি কোল্ড স্টার্ট সমস্যা লক্ষ্য করবেন। তারপর, আপনি কোল্ড স্টার্ট থেকে মুক্তি পেতে ন্যূনতম দৃষ্টান্ত মান 1 সেট করে ফাংশনটি স্থাপন করবেন।
তৈরি করুন
অ্যাপের জন্য একটি ফোল্ডার তৈরি করুন এবং এতে নেভিগেট করুন:
mkdir ../min-instances cd ../min-instances
একটি 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 Cloud Run functions!")
}
স্থাপন করুন
শূন্যের ডিফল্ট ন্যূনতম দৃষ্টান্ত মান সহ ফাংশনের প্রথম সংশোধন স্থাপন করুন:
gcloud run deploy go-slow-function \ --source . \ --base-image go123 \ --function HelloWorld \ --region $REGION \ --no-allow-unauthenticated
এই কমান্ড দিয়ে ফাংশন পরীক্ষা করুন:
# get the Service URL SERVICE_URL="$(gcloud run services describe go-slow-function --region $REGION --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
আপনি প্রথম কলে 10 সেকেন্ড বিলম্ব (কোল্ড স্টার্ট) পর্যবেক্ষণ করবেন এবং তারপর বার্তাটি দেখতে পাবেন। পরবর্তী কল অবিলম্বে ফিরে আসা উচিত.
ন্যূনতম দৃষ্টান্ত সেট করুন
প্রথম অনুরোধে কোল্ড স্টার্ট থেকে পরিত্রাণ পেতে, --min-instances ফ্ল্যাগটি নিম্নরূপ 1-এ সেট করে ফাংশনটি পুনরায় স্থাপন করুন:
gcloud run deploy go-slow-function \ --source . \ --base-image go123 \ --function HelloWorld \ --region $REGION \ --no-allow-unauthenticated \ --min-instances 1
পরীক্ষা
আবার ফাংশন পরীক্ষা করুন:
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
প্রথম অনুরোধে আপনি আর 10 সেকেন্ড বিলম্ব দেখতে পাবেন না। প্রথম আহ্বানের জন্য কোল্ড স্টার্ট সমস্যা (অনেকদিন পরে) চলে গেছে, ন্যূনতম উদাহরণের জন্য ধন্যবাদ!
আরও তথ্যের জন্য সর্বনিম্ন দৃষ্টান্ত ব্যবহার দেখুন।
9. অভিনন্দন!
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন!
আমরা কভার করেছি কি
- ক্লাউড রান ফাংশনগুলির ওভারভিউ এবং কীভাবে স্বয়ংক্রিয় বেস ইমেজ আপডেটগুলি ব্যবহার করবেন।
- HTTP কলে সাড়া দেয় এমন একটি ফাংশন কীভাবে লিখবেন।
- কিভাবে একটি ফাংশন লিখতে হয় যা পাব/সাব বার্তাগুলিতে প্রতিক্রিয়া জানায়।
- ক্লাউড স্টোরেজ ইভেন্টগুলিতে সাড়া দেয় এমন একটি ফাংশন কীভাবে লিখবেন।
- কিভাবে দুটি রিভিশনের মধ্যে ট্রাফিক বিভক্ত করা যায়।
- ঠাণ্ডা থেকে মুক্তি পাওয়ার উপায় ন্যূনতম দৃষ্টান্ত দিয়ে শুরু হয়।