১. ভূমিকা
সংক্ষিপ্ত বিবরণ
ক্লাউড রান ফাংশনস হলো পরিচিত GCF ইভেন্টিং প্যারাডাইম এবং ফাংশন সিগনেচার ব্যবহার করে ওয়ার্কলোড ডেপ্লয় করার একটি নতুন উপায়। আমাদের নিজস্ব বিল্ড প্রসেস এবং ডেপ্লয়মেন্ট কনফিগারেশন ব্যবহার করার পরিবর্তে, ক্লাউড রান ফাংশনস আপনাকে ক্লাউড রানে তৈরি করা অন্তর্নিহিত সার্ভিসের উপর সরাসরি নিয়ন্ত্রণ দেয়।
এই অংশে, আপনি শিখবেন কিভাবে পাইথনে একটি ইভেন্ট-ড্রাইভেন ফাংশন স্থাপন করতে হয়, যা ক্লাউড স্টোরেজ বাকেটে আপলোড করা একটি প্লেইন টেক্সট ফাইলের সারসংক্ষেপ তৈরি করতে জেমিনি (Gemini) ব্যবহার করে।
আপনি যা শিখবেন
- কীভাবে একটি ইভেন্ট-চালিত ক্লাউড রান ফাংশন স্থাপন করবেন যা 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 \
eventarc.googleapis.com \
aiplatform.googleapis.com
পরিবেশ ভেরিয়েবল সেটআপ করুন
আপনি এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন, যা এই কোডল্যাব জুড়ে ব্যবহৃত হবে।
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_NAME=crf-vertexai-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
৩. একটি স্টোরেজ বাকেট এবং একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন
একটি স্টোরেজ বাকেট তৈরি করুন
নিম্নলিখিত কমান্ডটি চালিয়ে আপনি একটি ক্লাউড স্টোরেজ বাকেট তৈরি করতে পারেন:
gsutil mb -l us-central1 gs://$BUCKET_NAME
একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
এই উদাহরণটির জন্য, আপনি ক্লাউড স্টোরেজ থেকে একটি ইভেন্ট গ্রহণ করতে এবং ক্লাউড রান ফাংশনটি চালু করার জন্য প্রয়োজনীয় EventArc অনুমতি এবং ক্লাউড রান ইনভোকার রোল সহ একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন।
প্রথমে সার্ভিস অ্যাকাউন্টটি তৈরি করুন।
SERVICE_ACCOUNT="crf-vertexai-codelab" 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
এখন, সার্ভিস অ্যাকাউন্টটিকে এআই প্ল্যাটফর্ম ইউজার রোলটি প্রদান করুন, যাতে এটি জেমিনিতে কল করতে পারে।
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
--role="roles/aiplatform.user"
এবং সার্ভিস অ্যাকাউন্টটিকে স্টোরেজ অবজেক্ট ভিউয়ার রোলটি প্রদান করুন, যাতে এটি ফাইলটি অ্যাক্সেস করতে পারে।
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
--role="roles/storage.objectViewer"
আইডেন্টিটি টোকেন তৈরি করার জন্য ক্লাউড পাব/সাব-এর আপনার প্রোজেক্টে roles/iam.serviceAccountTokenCreator রোলটি প্রয়োজন।
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
ক্লাউড স্টোরেজের মাধ্যমে ইভেন্ট গ্রহণ করার জন্য আপনার ট্রিগারটিকে গুগল ক্লাউড স্টোরেজ সার্ভিস অ্যাকাউন্টে roles/pubsub.publisher রোলটি প্রদান করতে হবে।
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
৪. ফাংশনটি তৈরি এবং স্থাপন করুন
প্রথমে, সোর্স কোডের জন্য একটি ডিরেক্টরি তৈরি করুন এবং সেই ডিরেক্টরিতে প্রবেশ করুন।
mkdir $SERVICE_NAME && cd $_
এরপর, নিম্নলিখিত বিষয়বস্তু সহ একটি requirements.txt ফাইল তৈরি করুন:
functions-framework==3.* google-cloud-aiplatform==1.63.* google-cloud-storage==2.16.*
এরপর, নিম্নলিখিত বিষয়বস্তু সহ একটি main.py ফাইল তৈরি করুন:
import functions_framework
import vertexai
from vertexai.generative_models import GenerativeModel
from google.cloud import storage
vertexai.init(project="<YOUR_PROJECT_ID>", location="us-central1")
model = GenerativeModel(
model_name="gemini-1.5-pro-001",
system_instruction=[
"Summarize the following document in a single sentence. Do not respond with more than one sentence.",
],
)
# Triggered by a change in a storage bucket
@functions_framework.cloud_event
def hello_gcs(cloud_event):
data = cloud_event.data
# download the file
storage_client = storage.Client()
blob = storage_client.bucket(data["bucket"]).get_blob(data["name"])
#print(blob)
doc = blob.download_as_text()
contents = [doc]
response = model.generate_content(contents)
print(response.text)
print(f"Response from Model: {response.text}")
এখন আপনি নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড রান ফাংশনটি স্থাপন করতে পারেন:
gcloud beta run deploy $SERVICE_NAME \
--source . \
--function hello_gcs \
--region $REGION \
--no-allow-unauthenticated \
--service-account $SERVICE_ACCOUNT_ADDRESS
অনুগ্রহ করে নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:
-
--sourceফ্ল্যাগটি ক্লাউড রানকে ফাংশনটিকে একটি চালনাযোগ্য কন্টেইনার-ভিত্তিক পরিষেবাতে বিল্ড করতে বলার জন্য ব্যবহৃত হয়। - নতুন সার্ভিসের এন্ট্রিপয়েন্টকে আপনার কাঙ্ক্ষিত ফাংশন সিগনেচারে সেট করার জন্য
--functionফ্ল্যাগটি (new) ব্যবহৃত হয়। - (ঐচ্ছিক) আপনার ফাংশনটিকে সর্বজনীনভাবে আহ্বানযোগ্য হওয়া থেকে বিরত রাখতে
--no-allow-unauthenticatedব্যবহার করুন।
আপনাকে জিজ্ঞাসা করা হতে পারে, "সোর্স থেকে ডিপ্লয় করার জন্য বিল্ড করা কন্টেইনারগুলো সংরক্ষণ করতে একটি আর্টিফ্যাক্ট রেজিস্ট্রি ডকার রিপোজিটরি প্রয়োজন। [<আপনার_অঞ্চল>] অঞ্চলে [cloud-run-source-deploy] নামে একটি রিপোজিটরি তৈরি করা হবে।" রিপোজিটরিটি তৈরি করতে ডিফল্ট 'হ্যাঁ' বিকল্পটি গ্রহণ করুন।
নিম্নলিখিত কমান্ডটি চালিয়ে আপনি আপনার নতুন সার্ভিস crf-vertexai-codelab দেখতে পারেন:
gcloud beta run services describe $SERVICE_NAME --region $REGION
৫. ইভেন্টটি তৈরি করুন
গুগল ক্লাউড স্টোরেজে যখনই কোনো অবজেক্ট চূড়ান্ত করা হয়, তখন আমাদের ফাংশনে বার্তা পাঠানোর জন্য আমরা একটি ইভেন্টআর্ক ট্রিগার তৈরি করতে পারি:
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
অনুগ্রহ করে মনে রাখবেন, --event-filters ফ্ল্যাগের ক্ষেত্রে আপনার বাকেটের নামে gs:// প্রিফিক্সটি ব্যবহার করবেন না।
আপনি যদি কোনো ত্রুটি দেখতে পান If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent. অনুগ্রহ করে পুনরায় চেষ্টা করার আগে কয়েক মিনিট অপেক্ষা করুন।
ইভেন্টআর্ক ব্যবহার করে ক্লাউড স্টোরেজ থেকে ট্রিগার সার্ভিস সেট আপ করার একটি বিস্তারিত টিউটোরিয়াল ক্লাউড রান ডকুমেন্টেশনে এখানে পাওয়া যাবে: https://cloud.google.com/run/docs/tutorials/eventarc
৬. ফাংশনটি পরীক্ষা করুন
আমাদের ফাংশনটি ডেপ্লয় করা এবং ট্রিগার তৈরি করা হয়ে গেলে, আমরা এখন ফাংশনটি কল করার জন্য প্রস্তুত।
একটি ফাইল তৈরি করে আপনার ক্লাউড স্টোরেজ বাকেটে আপলোড করুন। আপনি এটি ক্লাউড কনসোল ওয়েব ইন্টারফেসের মাধ্যমে, অথবা gsutil CLI টুল ব্যবহার করে করতে পারেন, যেমন—
gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME
ফাইলটি সফলভাবে আপলোড হলে একটি ইভেন্ট তৈরি হবে এবং আপনার ফাংশনটি প্লেইন টেক্সট ফাইলটির সারসংক্ষেপ করার জন্য জেমিনিকে কল করবে। সারসংক্ষেপটি লগ-এ প্রিন্ট করা হবে।
আপনি ক্লাউড রান পরিষেবার জন্য ক্লাউড কনসোলে লগগুলি দেখতে পারেন, অথবা আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"
উদাহরণস্বরূপ, প্রাইভেট প্রিভিউয়ের জন্য ক্লাউড রান ফাংশন ইউজার গাইডের একটি প্লেইন টেক্সট ফাইল আপলোড করলে লগ-এ নিম্নলিখিত বিষয়গুলো প্রিন্ট হয়:
Response from Model: Cloud Run functions offer a new way to deploy serverless workloads with familiar Google Cloud Functions paradigms while providing control over the underlying Cloud Run service.
৭. অভিনন্দন!
কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!
আমরা ক্লাউড রান ফাংশনগুলির ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।
আমরা যা আলোচনা করেছি
- কীভাবে একটি ইভেন্ট-চালিত ক্লাউড রান ফাংশন স্থাপন করবেন যা GCS বাকেটে কোনো অবজেক্ট আপলোড করা হলেই ট্রিগার হয়।
- ক্লাউড স্টোরেজ থেকে ইভেন্ট গ্রহণ করতে এবং ক্লাউড রান ফাংশন চালু করতে যথাযথ ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট কীভাবে তৈরি করবেন
- ক্লাউড স্টোরেজে আপলোড করা একটি প্লেইন টেক্সট ডকুমেন্টের সারসংক্ষেপ করতে জেমিনি কীভাবে ব্যবহার করবেন
৮. পরিষ্কার করুন
অনিচ্ছাকৃত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি এই ক্লাউড রান পরিষেবাটি ফ্রি টিয়ারে আপনার মাসিক ক্লাউড রান ব্যবহারের বরাদ্দের চেয়ে বেশিবার অনিচ্ছাকৃতভাবে চালু হয়ে যায়), আপনি হয় ক্লাউড রান পরিষেবাটি অথবা ধাপ ২-এ তৈরি করা প্রজেক্টটি ডিলিট করে দিতে পারেন।
Cloud Run সার্ভিসগুলো ডিলিট করতে, https://console.cloud.google.com/run/ ঠিকানায় Cloud Run ক্লাউড কনসোলে যান এবং এই কোডল্যাবে আপনার তৈরি করা crf-vertexai-codelab সার্ভিসটি ডিলিট করে দিন।
আপনি যদি পুরো প্রজেক্টটি মুছে ফেলতে চান, তাহলে আপনি https://console.cloud.google.com/cloud-resource-manager -এ গিয়ে, ধাপ ২-এ তৈরি করা প্রজেক্টটি নির্বাচন করে 'ডিলিট' (Delete) বিকল্পটি বেছে নিতে পারেন। প্রজেক্টটি মুছে ফেললে, আপনাকে আপনার ক্লাউড এসডিকে (Cloud SDK)-তে প্রজেক্ট পরিবর্তন করতে হবে। আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রজেক্টের তালিকা দেখতে পারেন।