১. ভূমিকা
সংক্ষিপ্ত বিবরণ
ক্লাউড রান ফাংশনস হলো পরিচিত GCF ইভেন্টিং প্যারাডাইম এবং ফাংশন সিগনেচার ব্যবহার করে ওয়ার্কলোড ডেপ্লয় করার একটি নতুন উপায়। আমাদের নিজস্ব বিল্ড প্রসেস এবং ডেপ্লয়মেন্ট কনফিগারেশন ব্যবহার করার পরিবর্তে, ক্লাউড রান ফাংশনস আপনাকে ক্লাউড রানে তৈরি করা অন্তর্নিহিত সার্ভিসের উপর সরাসরি নিয়ন্ত্রণ দেয়।
ক্লাউড রান ফাংশনগুলির মাধ্যমে, আমরা ক্লাউড রান সোর্স ডিপ্লয়ের সহজ ইউএক্স (UX) প্রদান করি, যা ডেভেলপারদের ক্লাউড রান কনফিগারেশন ব্যবহার করে তাদের ওয়ার্কলোডের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়।
এই অংশে, আপনি শিখবেন কিভাবে Node-এ একটি ইভেন্ট-ড্রাইভেন ফাংশন ডেপ্লয় করতে হয়। আপনি এমন একটি ফাংশন ডেপ্লয় করবেন যা Google Cloud Storage বাকেটে কোনো অবজেক্ট চূড়ান্ত হওয়ার সাথে সাথে ট্রিগার হবে।
এই কোডল্যাবে নিচের উদাহরণগুলোতে নোডজেএস (nodejs) স্যাম্পল ব্যবহার করা হয়েছে। তবে, আপনি আপনার পছন্দের ভাষায় ক্লাউড ফাংশনস ২য় জেনারেশন (Cloud Functions 2nd gen)-এর কোড স্যাম্পলগুলো ব্যবহার করতে পারেন:
- পাইথন ফাংশনের নমুনা
- নোডজেএস ফাংশন নমুনা
- গো ফাংশন নমুনা
- জাভা ফাংশনের নমুনা
- পিএইচপি ফাংশনের নমুনা
- রুবি ফাংশন নমুনা
- .NET ফাংশন নমুনা
আপনি যা শিখবেন
- কীভাবে একটি ইভেন্ট-চালিত ক্লাউড রান ফাংশন স্থাপন করবেন যা GCS বাকেটে কোনো অবজেক্ট আপলোড করা হলেই ট্রিগার হয়।
- ক্লাউড স্টোরেজ থেকে ইভেন্ট গ্রহণ করতে এবং ক্লাউড রান ফাংশন চালু করতে যথাযথ ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট কীভাবে তৈরি করবেন
২. এনভায়রনমেন্ট ভেরিয়েবল সেটআপ করুন এবং এপিআই (API) সক্রিয় করুন।
gcloud CLI আপডেট করুন
এই কোডল্যাবটি ব্যবহারের জন্য gcloud CLI-এর একটি সাম্প্রতিক সংস্করণ ইনস্টল করা আবশ্যক। আপনি নিম্নলিখিত কমান্ডটি চালিয়ে CLI আপডেট করতে পারেন:
gcloud components update
এপিআই সক্ষম করুন
এই কোডল্যাবটি ব্যবহার শুরু করার আগে, আপনাকে কয়েকটি এপিআই (API) সক্রিয় করতে হবে। এই কোডল্যাবটির জন্য নিম্নলিখিত এপিআইগুলো ব্যবহার করা প্রয়োজন। আপনি নিম্নলিখিত কমান্ডটি চালিয়ে সেই এপিআইগুলো সক্রিয় করতে পারেন:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
পরিবেশ ভেরিয়েবল সেটআপ করুন
আপনি এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন, যা এই কোডল্যাব জুড়ে ব্যবহৃত হবে।
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID SERVICE_NAME=crf-event-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
৩. একটি স্টোরেজ বাকেট এবং একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন
একটি স্টোরেজ বাকেট তৈরি করুন
নিম্নলিখিত কমান্ডটি চালিয়ে আপনি একটি ক্লাউড স্টোরেজ বাকেট তৈরি করতে পারেন:
gsutil mb -l us-central1 gs://$BUCKET_NAME
একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
এই উদাহরণের জন্য, আপনি ক্লাউড স্টোরেজ থেকে একটি ইভেন্ট গ্রহণ করতে এবং ক্লাউড রান ফাংশনটি চালু করার জন্য প্রয়োজনীয় EventArc অনুমতি এবং ক্লাউড রান ইনভোকার রোল সহ একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন।
প্রথমে সার্ভিস অ্যাকাউন্টটি তৈরি করুন।
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_ACCOUNT="cloud-run-functions" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run functions Eventarc service account"
এরপরে, আপনার Eventarc ট্রিগারের সাথে যুক্ত সার্ভিস অ্যাকাউন্টটিকে প্রজেক্টে Eventarc Event Receiver রোলটি (roles/eventarc.eventReceiver) প্রদান করুন, যাতে ট্রিগারটি ইভেন্ট প্রোভাইডারদের থেকে ইভেন্ট গ্রহণ করতে পারে।
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
এরপর, সার্ভিস অ্যাকাউন্টটিকে ক্লাউড রান ইনভোকার রোলটি প্রদান করুন, যাতে এটি ফাংশনটি ইনভোক করতে পারে।
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
৪. ফাংশনটি তৈরি এবং স্থাপন করুন
প্রথমে, সোর্স কোডের জন্য একটি ডিরেক্টরি তৈরি করুন এবং সেই ডিরেক্টরিতে প্রবেশ করুন।
mkdir ../$SERVICE_NAME && cd $_
এরপর, নিম্নলিখিত বিষয়বস্তু সহ একটি package.json ফাইল তৈরি করুন:
{
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
এরপরে, নিম্নলিখিত বিষয়বস্তু সহ একটি index.js ফাইল তৈরি করুন:
const functions = require("@google-cloud/functions-framework");
// Register a CloudEvent callback with the Functions Framework that will
// be triggered by Cloud Storage.
functions.cloudEvent("helloGCS", (cloudEvent) => {
console.log(`Event ID: ${cloudEvent.id}`);
console.log(`Event Type: ${cloudEvent.type}`);
const file = cloudEvent.data;
console.log(`Bucket: ${file.bucket}`);
console.log(`File: ${file.name}`);
console.log(`Metageneration: ${file.metageneration}`);
console.log(`Created: ${file.timeCreated}`);
console.log(`Updated: ${file.updated}`);
});
এখন আপনি নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড রান ফাংশনটি স্থাপন করতে পারেন:
gcloud beta run deploy $SERVICE_NAME \
--source . \
--function helloGCS \
--region $REGION \
--no-allow-unauthenticated
অনুগ্রহ করে নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:
- –source ফ্ল্যাগটি ক্লাউড রানকে ফাংশনটিকে একটি রানযোগ্য কন্টেইনার-ভিত্তিক পরিষেবাতে বিল্ড করতে বলার জন্য ব্যবহৃত হয়।
- –function ফ্ল্যাগটি (new) নতুন সার্ভিসের এন্ট্রিপয়েন্টকে আপনার কাঙ্ক্ষিত ফাংশন সিগনেচারে সেট করতে ব্যবহৃত হয়।
- (ঐচ্ছিক) আপনার ফাংশনটিকে সর্বজনীনভাবে আহ্বানযোগ্য হওয়া থেকে বিরত রাখতে –no-allow-unauthenticated ব্যবহার করুন।
নিম্নলিখিত কমান্ডটি চালিয়ে আপনি আপনার নতুন সার্ভিস crf-event-codelab দেখতে পারেন:
gcloud beta run services describe $SERVICE_NAME
৫. ইভেন্টটি তৈরি করুন
গুগল ক্লাউড স্টোরেজে যখনই কোনো অবজেক্ট চূড়ান্ত করা হবে, তখন আমাদের ফাংশনে বার্তা পাঠানোর জন্য আমরা একটি ইভেন্টআর্ক ট্রিগার তৈরি করতে পারি:
BUCKET_REGION=$REGION
gcloud eventarc triggers create $TRIGGER_NAME \
--location=$REGION \
--destination-run-service=$SERVICE_NAME \
--destination-run-region=$BUCKET_REGION \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=$BUCKET_NAME" \
--service-account=$SERVICE_ACCOUNT_ADDRESS
অনুগ্রহ করে নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:
- gcs-function-trigger হলো ট্রিগারটির নাম।
- crf-event-codelab হলো সেই ক্লাউড রান সার্ভিসের নাম যেখানে আমাদের ফাংশনটি ডেপ্লয় করা হয়েছে।
- –event-filters ফ্ল্যাগের জন্য, আপনার বাকেট নামে gs:// প্রিফিক্স ব্যবহার করবেন না।
ইভেন্টআর্ক ব্যবহার করে ক্লাউড স্টোরেজ থেকে ট্রিগার সার্ভিস সেট আপ করার একটি বিস্তারিত টিউটোরিয়াল ক্লাউড রান ডকুমেন্টেশনে এখানে পাওয়া যাবে: https://cloud.google.com/run/docs/tutorials/eventarc
৬. ফাংশনটি পরীক্ষা করুন
ডেপ্লয়মেন্ট সম্পূর্ণ হলে, আপনি সার্ভিস ইউআরএলটি দেখতে পাবেন। ফাংশনটি ইনভোক করতে, আপনাকে আপনার আইডেন্টিটি টোকেন অথবা ক্লাউড রান ইনভোকার রোল আছে এমন কোনো প্রিন্সিপালের আইডেন্টিটি টোকেন ব্যবহার করে একটি অথেনটিকেটেড রিকোয়েস্ট পাঠাতে হবে, যেমনটি নিচে দেখানো হয়েছে:
# get the Service URL SERVICE_URL="$(gcloud run services describe $SERVICE_NAME --region us-central1 --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
আমাদের ফাংশনটি ডেপ্লয় করা এবং ট্রিগার তৈরি করা হয়ে গেলে, আমরা এখন ফাংশনটি কল করার জন্য প্রস্তুত।
একটি ফাইল তৈরি করে আপনার ক্লাউড স্টোরেজ বাকেটে আপলোড করুন। আপনি এটি ক্লাউড কনসোল ওয়েব ইন্টারফেসের মাধ্যমে, অথবা gsutil CLI টুল ব্যবহার করে করতে পারেন, যেমন—
echo "hello world" > test.txt gsutil cp test.txt gs://$BUCKET_NAME
ফাইলটি সফলভাবে আপলোড হলে, একটি ইভেন্ট তৈরি হবে এবং আপনার ফাংশনটি অবজেক্টটি সম্পর্কে কিছু প্রাথমিক তথ্য, যেমন ফাইলের নাম, প্রিন্ট করবে। আপনি ক্লাউড কনসোলে ফাংশনটির লগ এন্ট্রিতে এই আউটপুটটি খুঁজে পেতে পারেন। বিকল্পভাবে, আপনি gcloud CLI ব্যবহার করে এই আউটপুটটি কোয়েরি করতে পারেন:
gcloud logging read "resource.labels.service_name=$SERVICE_NAME AND textPayload: File" --format=json
এবং আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন।
"textPayload": "File: test.txt"
৭. অভিনন্দন!
কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!
আমরা ক্লাউড রান ফাংশনগুলির ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।
আমরা যা আলোচনা করেছি
- কীভাবে একটি ইভেন্ট-চালিত ক্লাউড রান ফাংশন স্থাপন করবেন যা GCS বাকেটে কোনো অবজেক্ট আপলোড করা হলেই ট্রিগার হয়।
- ক্লাউড স্টোরেজ থেকে ইভেন্ট গ্রহণ করতে এবং ক্লাউড রান ফাংশন চালু করতে যথাযথ ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট কীভাবে তৈরি করবেন
৮. পরিষ্কার করুন
অনিচ্ছাকৃত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি এই ক্লাউড রান পরিষেবাটি ফ্রি টিয়ারে আপনার মাসিক ক্লাউড রান ব্যবহারের বরাদ্দের চেয়ে বেশিবার অনিচ্ছাকৃতভাবে চালু হয়ে যায়), আপনি হয় ক্লাউড রান পরিষেবাটি অথবা ধাপ ২-এ তৈরি করা প্রজেক্টটি ডিলিট করে দিতে পারেন।
Cloud Run সার্ভিসগুলো ডিলিট করতে, https://console.cloud.google.com/run/ ঠিকানায় Cloud Run ক্লাউড কনসোলে যান এবং এই কোডল্যাবে আপনার তৈরি করা crf-event-codelab সার্ভিসটি ডিলিট করে দিন।
আপনি যদি পুরো প্রজেক্টটি মুছে ফেলতে চান, তাহলে আপনি https://console.cloud.google.com/cloud-resource-manager -এ গিয়ে, ধাপ ২-এ তৈরি করা প্রজেক্টটি নির্বাচন করে 'ডিলিট' (Delete) বিকল্পটি বেছে নিতে পারেন। প্রজেক্টটি মুছে ফেললে, আপনাকে আপনার ক্লাউড এসডিকে (Cloud SDK)-তে প্রজেক্ট পরিবর্তন করতে হবে। আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রজেক্টের তালিকা দেখতে পারেন।