১. ভূমিকা



ইভেন্টআর্ক বিভিন্ন উৎস থেকে আসা ইভেন্টের সাথে ক্লাউড রান সার্ভিসগুলোকে সংযুক্ত করা সহজ করে তোলে। এটি আপনাকে ইভেন্ট-চালিত আর্কিটেকচার তৈরি করতে দেয়, যেখানে মাইক্রোসার্ভিসগুলো শিথিলভাবে সংযুক্ত এবং বিতরণকৃত থাকে। এটি আপনার জন্য ইভেন্ট গ্রহণ, বিতরণ, নিরাপত্তা, অনুমোদন এবং ত্রুটি-পরিচালনার দায়িত্ব পালন করে।
ওয়ার্কফ্লোস হলো একটি সম্পূর্ণ পরিচালিত অর্কেস্ট্রেশন প্ল্যাটফর্ম যা আপনার সংজ্ঞায়িত ক্রমানুসারে পরিষেবাগুলি সম্পাদন করে: একটি ওয়ার্কফ্লো। এই ওয়ার্কফ্লোগুলি ক্লাউড রান বা ক্লাউড ফাংশনসে হোস্ট করা পরিষেবা, ক্লাউড ভিশন এআই এবং বিগকোয়েরির মতো গুগল ক্লাউড পরিষেবা এবং যেকোনো HTTP-ভিত্তিক API-কে একত্রিত করতে পারে।
এই কোডল্যাবে, আপনি ছবি প্রসেস করার জন্য মাইক্রোসার্ভিসের একটি ইভেন্ট-ড্রাইভেন অর্কেস্ট্রেশন তৈরি করবেন। আপনি ৪টি ইমেজ প্রসেসিং ক্লাউড ফাংশনের ক্রম, ইনপুট এবং আউটপুট অর্কেস্ট্রেট করতে ওয়ার্কফ্লো ব্যবহার করবেন। এরপর আপনি ইভেন্টআর্ক-এর মাধ্যমে অর্কেস্ট্রেশনটিকে একটি লুজলি কাপলড পদ্ধতিতে ক্লাউড স্টোরেজ ইভেন্টে সাড়া দেওয়ার জন্য সক্ষম করবেন।
পরিশেষে, আপনি ইমেজ প্রসেস করার জন্য একটি নমনীয় অথচ সুসংগঠিত সার্ভারলেস আর্কিটেকচার পাবেন।

আপনি যা শিখবেন
- ইভেন্টার্ক এবং ওয়ার্কফ্লো-এর একটি সংক্ষিপ্ত বিবরণ
- ক্লাউড ফাংশন পরিষেবাগুলি কীভাবে স্থাপন করবেন
- ওয়ার্কফ্লো ব্যবহার করে কীভাবে পরিষেবাগুলি পরিচালনা করবেন
- ইভেন্টার্ক ব্যবহার করে ওয়ার্কফ্লোকে কীভাবে ক্লাউড স্টোরেজ ইভেন্টে সাড়া দেওয়ানো যায়
২. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিতে পরিবেশ সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে। - আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
- এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
ক্লাউড শেল শুরু করুন
যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।
গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

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

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারের মধ্যেই করা যাবে। আপনাকে কিছুই ইনস্টল করতে হবে না।
gcloud সেট আপ করুন
ক্লাউড শেলে, আপনার প্রজেক্ট আইডি এবং যে অঞ্চলে আপনার অ্যাপ্লিকেশনটি ডেপ্লয় করতে চান, তা সেট করুন। এগুলোকে PROJECT_ID এবং REGION ভেরিয়েবল হিসেবে সেভ করুন। উপলব্ধ অঞ্চলগুলোর জন্য ক্লাউড ফাংশনস লোকেশনস দেখুন।
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
সোর্স কোডটি নিন
অ্যাপ্লিকেশনটির সোর্স কোড eventarc-samples রিপো-এর processing-pipelines ফোল্ডারে রয়েছে।
রিপোটি ক্লোন করুন:
git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
eventarc-samples/processing-pipelines ফোল্ডারে যান:
cd eventarc-samples/processing-pipelines
৩. স্থাপত্যের সংক্ষিপ্ত বিবরণ
অ্যাপ্লিকেশনটির গঠন নিম্নরূপ:

- একটি ইনপুট বাকেটে একটি ছবি সেভ করা হলে একটি ক্লাউড স্টোরেজ ক্রিয়েট ইভেন্ট তৈরি হয়।
- ইভেন্টার্ক একটি ক্লাউড স্টোরেজ ট্রিগারের মাধ্যমে ক্লাউড স্টোরেজের ক্রিয়েট ইভেন্টটি পড়ে এবং এটিকে ক্লাউডইভেন্ট হিসেবে ওয়ার্কফ্লোতে পাঠায়।
- ওয়ার্কফ্লো-এর প্রথম ধাপে, ফিল্টার (Filter ) নামক একটি ক্লাউড ফাংশন সার্ভিস, ছবিটি নিরাপদ কিনা তা নির্ধারণ করতে ভিশন এপিআই (Vision API) ব্যবহার করে। ছবিটি নিরাপদ হলে, ওয়ার্কফ্লো পরবর্তী ধাপগুলো নিয়ে এগিয়ে যায়।
- ওয়ার্কফ্লোর দ্বিতীয় ধাপে, লেবেলার (Labeler) নামক একটি ক্লাউড ফাংশন সার্ভিস, ভিশন এপিআই (Vision API) ব্যবহার করে ছবিটির লেবেলগুলো বের করে এবং লেবেলগুলো আউটপুট বাকেটে সংরক্ষণ করে।
- তৃতীয় ধাপে, Resizer নামক আরেকটি ক্লাউড ফাংশন পরিষেবা, ImageSharp ব্যবহার করে ছবিটির আকার পরিবর্তন করে এবং পরিবর্তিত ছবিটি আউটপুট বাকেটে সংরক্ষণ করে।
- শেষ ধাপে, ওয়াটারমার্কার (Watermarker) , যা আরেকটি ক্লাউড ফাংশন পরিষেবা, ইমেজশার্প (ImageSharp) ব্যবহার করে রিসাইজ করা ছবিটিতে লেবেলার (Labeler) থেকে লেবেলের একটি ওয়াটারমার্ক যোগ করে এবং ছবিটি আউটপুট বাকেটে সংরক্ষণ করে।
অ্যাপ্লিকেশনটি একটি ক্লাউড স্টোরেজ ইভেন্ট দ্বারা ট্রিগার হয়, তাই এটি ইভেন্ট-ড্রাইভেন। ছবিগুলোর প্রসেসিং একটি ওয়ার্কফ্লোতে সম্পন্ন হয়, তাই এটি একটি অর্কেস্ট্রেশন। পরিশেষে, ছবি প্রসেস করার জন্য এটি একটি নমনীয় অথচ সুসংগঠিত সার্ভারলেস আর্কিটেকচারের ইভেন্ট-ড্রাইভেন অর্কেস্ট্রেশন।
৪. বালতি তৈরি করুন
ব্যবহারকারীদের ছবি আপলোড করার জন্য একটি ইনপুট বাকেট এবং ইমেজ প্রসেসিং পাইপলাইনে প্রক্রিয়াজাত ছবিগুলো সংরক্ষণের জন্য একটি আউটপুট বাকেট তৈরি করুন।
ক্লাউড শেলে নিম্নলিখিতটি চালান:
REGION=us-central1 BUCKET1=$PROJECT_ID-images-input-$RANDOM BUCKET2=$PROJECT_ID-images-output-$RANDOM gsutil mb -l $REGION gs://$BUCKET1 gsutil mb -l $REGION gs://$BUCKET2
৫. ফিল্টার পরিষেবা স্থাপন করুন
চলুন প্রথম সার্ভিসটি ডেপ্লয় করার মাধ্যমে শুরু করা যাক। এই ক্লাউড ফাংশনস সার্ভিসটি বাকেট এবং ফাইলের তথ্য গ্রহণ করে, ভিশন এপিআই (Vision API) ব্যবহার করে ইমেজটি নিরাপদ কিনা তা যাচাই করে এবং ফলাফলটি ফেরত দেয়।
প্রথমে, Cloud Functions gen2 এবং Vision API-এর জন্য প্রয়োজনীয় পরিষেবাগুলি সক্রিয় করুন:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ cloudfunctions.googleapis.com \ run.googleapis.com \ vision.googleapis.com
শীর্ষ স্তরের processing-pipelines ফোল্ডারের ভিতরে সার্ভিসটি ডিপ্লয় করুন:
SERVICE_NAME=filter gcloud functions deploy $SERVICE_NAME \ --gen2 \ --allow-unauthenticated \ --runtime dotnet3 \ --trigger-http \ --region=$REGION \ --entry-point Filter.Function \ --set-build-env-vars GOOGLE_BUILDABLE=image-v3/filter/csharp
ফাংশনটি ডিপ্লয় করা হয়ে গেলে, সার্ভিস URL-টি একটি ভেরিয়েবলে সেট করুন, পরে আমাদের এটি প্রয়োজন হবে:
FILTER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')
৬. লেবেলার পরিষেবা স্থাপন করুন
দ্বিতীয় ক্লাউড ফাংশনস সার্ভিসটি বাকেট এবং ফাইলের তথ্য গ্রহণ করে, ভিশন এপিআই (Vision API) ব্যবহার করে ইমেজটির লেবেলগুলো বের করে এবং লেবেলগুলো আউটপুট বাকেটে সংরক্ষণ করে।
শীর্ষ স্তরের processing-pipelines ফোল্ডারের ভিতরে সার্ভিসটি ডিপ্লয় করুন:
SERVICE_NAME=labeler gcloud functions deploy $SERVICE_NAME \ --gen2 \ --allow-unauthenticated \ --runtime dotnet3 \ --trigger-http \ --region=$REGION \ --set-env-vars BUCKET=$BUCKET2 \ --entry-point Labeler.Function \ --set-build-env-vars GOOGLE_BUILDABLE=image-v2/labeler/csharp
ফাংশনটি ডিপ্লয় করা হয়ে গেলে, সার্ভিস URL-টি একটি ভেরিয়েবলে সেট করুন, পরে আমাদের এটি প্রয়োজন হবে:
LABELER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')
৭. রিসাইজার সার্ভিস স্থাপন করুন
এই ক্লাউড ফাংশনস সার্ভিসটি বাকেট এবং ফাইলের তথ্য গ্রহণ করে, ইমেজশার্প ব্যবহার করে ছবিটির আকার পরিবর্তন করে এবং আউটপুট বাকেটে ছবিটি সংরক্ষণ করে।
শীর্ষ স্তরের processing-pipelines ফোল্ডারের ভিতরে সার্ভিসটি ডিপ্লয় করুন:
SERVICE_NAME=resizer gcloud functions deploy $SERVICE_NAME \ --gen2 \ --allow-unauthenticated \ --runtime dotnet3 \ --trigger-http \ --region=$REGION \ --set-env-vars BUCKET=$BUCKET2 \ --entry-point Resizer.Function \ --set-build-env-vars GOOGLE_BUILDABLE=image-v2/resizer/csharp \ --timeout=120s
রিসাইজার ফাংশনটিকে প্রসেসিংয়ের জন্য অতিরিক্ত সময় দেওয়ার উদ্দেশ্যে ২ মিনিটের timeout মানটি লক্ষ্য করুন।
ফাংশনটি ডিপ্লয় করা হয়ে গেলে, সার্ভিস URL-টি একটি ভেরিয়েবলে সেট করুন, পরে আমাদের এটি প্রয়োজন হবে:
RESIZER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')
৮. ওয়াটারমার্কার পরিষেবা স্থাপন করুন
এই ক্লাউড ফাংশনস সার্ভিসটি বাকেট, ফাইল এবং লেবেলের তথ্য গ্রহণ করে, ফাইলটি পড়ে, ইমেজশার্প ব্যবহার করে লেবেলগুলোকে ছবিতে ওয়াটারমার্ক হিসেবে যোগ করে এবং ছবিটি আউটপুট বাকেটে সংরক্ষণ করে।
শীর্ষ স্তরের processing-pipelines ফোল্ডারের ভিতরে সার্ভিসটি ডিপ্লয় করুন:
SERVICE_NAME=watermarker gcloud functions deploy $SERVICE_NAME \ --gen2 \ --allow-unauthenticated \ --runtime dotnet3 \ --trigger-http \ --region=$REGION \ --set-env-vars BUCKET=$BUCKET2 \ --entry-point Watermarker.Function \ --set-build-env-vars GOOGLE_BUILDABLE=image-v2/watermarker/csharp
ফাংশনটি ডিপ্লয় করা হয়ে গেলে, সার্ভিস URL-টি একটি ভেরিয়েবলে সেট করুন, পরে আমাদের এটি প্রয়োজন হবে:
WATERMARKER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')
এই পর্যায়ে, চারটি ক্লাউড ফাংশনই ডেপ্লয় করা এবং চালু থাকা উচিত:

৯. ওয়ার্কফ্লো সংজ্ঞায়িত ও স্থাপন করুন
ফিল্টার, লেবেলার, রিসাইজার এবং ওয়াটারমার্কার সার্ভিসগুলোকে একটি ওয়ার্কফ্লোতে একত্রিত করতে ওয়ার্কফ্লো ব্যবহার করুন। ওয়ার্কফ্লো আমাদের সংজ্ঞায়িত ক্রম এবং প্যারামিটার অনুযায়ী এই সার্ভিসগুলোকে কল করার কাজটি সমন্বয় করবে।
প্রথমে, ওয়ার্কফ্লো-এর জন্য প্রয়োজনীয় সার্ভিসগুলো চালু করুন:
gcloud services enable \ workflows.googleapis.com \ workflowexecutions.googleapis.com
সংজ্ঞা দিন
Workflows একটি CloudEvent প্যারামিটার হিসেবে গ্রহণ করে। আমরা একটি ট্রিগার তৈরি করার পর এটি Eventarc থেকে আসবে। প্রথম দুটি ধাপে, Workflows ইভেন্টটি লগ করে এবং ইভেন্ট থেকে বাকেট ও ফাইলের তথ্য বের করে নেয়:
main:
params: [event]
steps:
- log_event:
call: sys.log
args:
text: ${event}
severity: INFO
- extract_bucket_and_file:
assign:
- bucket: ${event.data.bucket}
- file: ${event.data.name}
filter ধাপে, ওয়ার্কফ্লো আমাদের পূর্বে ডেপ্লয় করা ফিল্টার সার্ভিসটিকে কল করে। এরপর এটি ফাইলটির নিরাপত্তা লগ করে এবং পরীক্ষা করে:
- filter:
call: http.post
args:
url: FILTER_URL # TODO: Replace
auth:
type: OIDC
body:
bucket: ${bucket}
file: ${file}
result: filterResponse
- log_safety:
call: sys.log
args:
text: ${filterResponse.body.safe}
severity: INFO
- check_safety:
switch:
- condition: ${filterResponse.body.safe == true}
next: label
next: end
label ধাপে, ওয়ার্কফ্লো লেবেলার সার্ভিসকে কল করে এবং তার প্রতিক্রিয়া (শীর্ষ ৩টি লেবেল) গ্রহণ করে:
- label:
call: http.post
args:
url: LABELER_URL # TODO: Replace
auth:
type: OIDC
body:
bucket: ${bucket}
file: ${file}
result: labelResponse
resize ধাপে, ওয়ার্কফ্লো রিসাইজার সার্ভিসকে কল করে এবং রেসপন্সটি (রিসাইজ করা ইমেজের বাকেট ও ফাইল) ক্যাপচার করে:
- resize:
call: http.post
args:
url: RESIZER_URL # TODO: Replace
auth:
type: OIDC
body:
bucket: ${bucket}
file: ${file}
result: resizeResponse
watermark ধাপে, ওয়ার্কফ্লো রিসাইজ করা ছবি এবং লেবেল সহ ওয়াটারমার্কার সার্ভিসকে কল করে এবং ফলাফলটি (রিসাইজ ও ওয়াটারমার্ক করা ছবিটি) ক্যাপচার করে:
- watermark:
call: http.post
args:
url: WATERMARKER_URL # TODO: Replace
auth:
type: OIDC
body:
bucket: ${resizeResponse.body.bucket}
file: ${resizeResponse.body.file}
labels: ${labelResponse.body.labels}
result: watermarkResponse
final ধাপে, ওয়ার্কফ্লোটি লেবেলার, রিসাইজার এবং ওয়াটারমার্কার সার্ভিসগুলো থেকে HTTP স্ট্যাটাস কোড ফেরত দেয়:
- final:
return:
label: ${labelResponse.code}
resize: ${resizeResponse.code}
watermark: ${watermarkResponse.code}
মোতায়েন করুন
ওয়ার্কফ্লো ডিপ্লয় করার আগে, ম্যানুয়ালি অথবা sed ব্যবহার করে সার্ভিস ইউআরএলগুলো ডিপ্লয় করা ফাংশনগুলোর ইউআরএল দিয়ে প্রতিস্থাপন করা হয়েছে কিনা, তা নিশ্চিত করুন।
শীর্ষ স্তরের processing-pipelines ফোল্ডারের ভিতরে, image-v3 ফোল্ডারে যান যেখানে workflows.yaml ফাইলটি অবস্থিত:
cd image-v3/
ডেপ্লয় করা সার্ভিসগুলোর আসল URL দিয়ে প্লেসহোল্ডার URL-গুলো প্রতিস্থাপন করতে sed চালান:
sed -i -e "s|FILTER_URL|${FILTER_URL}|" workflow.yaml
sed -i -e "s|LABELER_URL|${LABELER_URL}|" workflow.yaml
sed -i -e "s|RESIZER_URL|${RESIZER_URL}|" workflow.yaml
sed -i -e "s|WATERMARKER_URL|${WATERMARKER_URL}|" workflow.yaml
ওয়ার্কফ্লোটি স্থাপন করুন:
WORKFLOW_NAME=image-processing
gcloud workflows deploy $WORKFLOW_NAME \
--source=workflow.yaml \
--location=$REGION
কয়েক সেকেন্ডের মধ্যেই আপনি কনসোলে ওয়ার্কফ্লোটি ডেপ্লয় হতে দেখবেন:

১০. ট্রিগার তৈরি করুন
ওয়ার্কফ্লোটি ডেপ্লয় করা হয়ে গেলে, শেষ ধাপটি হলো একটি ইভেন্টআর্ক ট্রিগারের মাধ্যমে এটিকে ক্লাউড স্টোরেজ ইভেন্টের সাথে সংযুক্ত করা।
এককালীন সেটআপ
প্রথমে, Eventarc-এর জন্য প্রয়োজনীয় পরিষেবাগুলি সক্রিয় করুন:
gcloud services enable \ eventarc.googleapis.com
একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন যা আপনি ইভেন্টআর্ক ট্রিগারে ব্যবহার করবেন।
SERVICE_ACCOUNT=eventarc-trigger-imageproc-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Eventarc trigger image processing service account"
workflows.invoker রোলটি মঞ্জুর করুন, যাতে সার্ভিস অ্যাকাউন্টটি ব্যবহার করে Eventarc থেকে Workflows চালু করা যায়:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/workflows.invoker \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
eventarc.eventReceiver রোলটি মঞ্জুর করুন, তাহলে সার্ভিস অ্যাকাউন্টটি ব্যবহার করা যাবে।
ক্লাউড স্টোরেজ ট্রিগার:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/eventarc.eventReceiver \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ক্লাউড স্টোরেজ সার্ভিস অ্যাকাউন্টকে pubsub.publisher রোলটি প্রদান করুন। Eventarc-এর ক্লাউড স্টোরেজ ট্রিগারের জন্য এটি প্রয়োজন:
STORAGE_SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p $PROJECT_ID)"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$STORAGE_SERVICE_ACCOUNT \
--role roles/pubsub.publisher
তৈরি করুন
একটি ট্রিগার তৈরি করতে নিম্নলিখিতটি চালান। এই ট্রিগারটি ইনপুট ক্লাউড স্টোরেজ বাকেট থেকে নতুন ফাইল তৈরির ইভেন্টগুলো ফিল্টার করে এবং সেগুলোকে আমাদের পূর্বে সংজ্ঞায়িত ওয়ার্কফ্লোতে পাঠিয়ে দেয়:
TRIGGER_NAME=trigger-image-processing gcloud eventarc triggers create $TRIGGER_NAME \ --location=$REGION \ --destination-workflow=$WORKFLOW_NAME \ --destination-workflow-location=$REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET1" \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
আপনি ক্লাউড কনসোলের ইভেন্টআর্ক বিভাগে দেখতে পাবেন যে ট্রিগারটি তৈরি হয়ে প্রস্তুত আছে:

১১. পাইপলাইনটি পরীক্ষা করুন
ইমেজ প্রসেসিং পাইপলাইনটি ক্লাউড স্টোরেজ থেকে ইভেন্ট গ্রহণ করার জন্য প্রস্তুত। পাইপলাইনটি পরীক্ষা করার জন্য, ইনপুট বাকেটে একটি ইমেজ আপলোড করুন:
gsutil cp beach.jpg gs://$BUCKET1
ছবিটি আপলোড করার সাথে সাথেই আপনি ওয়ার্কফ্লো এক্সিকিউশন সক্রিয় অবস্থায় দেখতে পাবেন:

মিনিটখানেক পর আপনি দেখবেন যে কার্য সম্পাদন সফল হয়েছে। এছাড়াও আপনি ওয়ার্কফ্লোটির ইনপুট এবং আউটপুট দেখতে পারবেন:

আপনি যদি আউটপুট বাকেটের বিষয়বস্তু তালিকাভুক্ত করেন, তাহলে আপনি রিসাইজ করা ছবিটি, রিসাইজ ও ওয়াটারমার্কযুক্ত ছবিটি এবং ছবিটির লেবেলগুলো দেখতে পাবেন:
gsutil ls gs://$BUCKET2 gs://$PROJECT_ID-images-output-$RANDOM/beach-400x400-watermark.jpeg gs://$PROJECT_ID-images-output-$RANDOM/beach-400x400.png gs://$PROJECT_ID-images-output-$RANDOM/beach-labels.txt
পুনরায় যাচাই করার জন্য, আপনি রিসাইজ করা ও ওয়াটারমার্ক দেওয়া ছবিটি খুলে ফলাফলটি দেখতে পারেন:

১২. অভিনন্দন
অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!
আমরা যা আলোচনা করেছি
- ইভেন্টার্ক এবং ওয়ার্কফ্লো-এর একটি সংক্ষিপ্ত বিবরণ
- ক্লাউড ফাংশন পরিষেবাগুলি কীভাবে স্থাপন করবেন
- ওয়ার্কফ্লো ব্যবহার করে কীভাবে পরিষেবাগুলি পরিচালনা করবেন
- ইভেন্টার্ক ব্যবহার করে ওয়ার্কফ্লোকে কীভাবে ক্লাউড স্টোরেজ ইভেন্টে সাড়া দেওয়ানো যায়