১. সংক্ষিপ্ত বিবরণ
এই ল্যাবে, আপনি একটি ইভেন্টআর্ক ট্রিগার তৈরি করবেন যা একটি পাব/সাব টপিককে ওয়ার্কফ্লোস সার্ভিসের সাথে সংযুক্ত করে। ইভেন্টআর্ক আপনাকে সার্ভিস-টু-সার্ভিস কমিউনিকেশনকে ডিকাপল করতে দেয় – যা আপনার সলিউশনকে আরও এক্সটেনসিবল এবং ইভেন্ট-ড্রাইভেন করে তোলে। আপনি একটি ওয়ার্কফ্লো তৈরি করবেন যাতে সিম্বাল ইটস-এ অর্ডার করার জন্য গ্রাহকের রিওয়ার্ড পয়েন্ট গণনা করার একটি বিজনেস প্রসেস সম্পাদনের জন্য একাধিক ধাপ অন্তর্ভুক্ত থাকবে। ওয়ার্কফ্লোটি বিজনেস লজিক সম্পাদনের জন্য একটি প্রাইভেট ক্লাউড রান সার্ভিস এপিআই কল করবে। ক্লাউড রান সার্ভিসটি শুধুমাত্র অভ্যন্তরীণ ট্র্যাফিক অনুমোদনের জন্য কনফিগার করা আছে এবং এর জন্য অথেনটিকেশন প্রয়োজন। ওয়ার্কফ্লোটি গণনা করা রিওয়ার্ড পয়েন্ট সম্পর্কে অর্ডার সার্ভিসকে অবহিত করার জন্য পাব/সাব টপিকে একটি মেসেজ পাবলিশ করবে।
ইভেন্টার্ক কী?
ইভেন্টআর্ক আপনাকে অন্তর্নিহিত পরিকাঠামো বাস্তবায়ন, কাস্টমাইজ বা রক্ষণাবেক্ষণ না করেই ইভেন্ট-চালিত আর্কিটেকচার তৈরি করার সুযোগ দেয়। ইভেন্টআর্ক বিচ্ছিন্ন মাইক্রোসার্ভিসগুলোর মধ্যে স্টেট পরিবর্তনের প্রবাহ, যা ইভেন্ট নামে পরিচিত, পরিচালনা করার জন্য একটি প্রমিত সমাধান প্রদান করে। ট্রিগার হলে, ইভেন্টআর্ক এই ইভেন্টগুলোকে পাব/সাব সাবস্ক্রিপশনের মাধ্যমে বিভিন্ন গন্তব্যে (যেমন ওয়ার্কফ্লো বা ক্লাউড রান) পাঠিয়ে দেয় এবং একই সাথে আপনার জন্য ডেলিভারি, নিরাপত্তা, অনুমোদন, পর্যবেক্ষণযোগ্যতা এবং ত্রুটি-পরিচালনা পরিচালনা করে।
গুগল ইভেন্ট প্রদানকারী
- ৯০টিরও বেশি গুগল ক্লাউড প্রোভাইডার রয়েছে। এই প্রোভাইডাররা সরাসরি উৎস থেকে (যেমন, ক্লাউড স্টোরেজ) অথবা ক্লাউড অডিট লগ এন্ট্রির মাধ্যমে ইভেন্ট পাঠায়।
- পাব/সাব প্রোভাইডার। এই প্রোভাইডাররা পাব/সাব মেসেজ ব্যবহার করে ইভেন্টআর্ক-এ ইভেন্ট পাঠায়।
তৃতীয় পক্ষের প্রদানকারী
তৃতীয়-পক্ষ প্রদানকারীরা হলো গুগল-বহির্ভূত এমন সত্তা যারা ইভেন্টার্কের কোনো উৎস সরবরাহ করে।
ইভেন্টার্ক ট্রিগার
- ক্লাউড পাব/সাব ইভেন্ট। পাব/সাব টপিকে প্রকাশিত মেসেজের মাধ্যমে ইভেন্টআর্ক ট্রিগার হতে পারে।
- ক্লাউড অডিট লগ (সিএএল) ইভেন্টসমূহ। ক্লাউড অডিট লগ প্রতিটি ক্লাউড প্রজেক্ট, ফোল্ডার এবং অর্গানাইজেশনের জন্য অ্যাডমিন অ্যাক্টিভিটি ও ডেটা অ্যাক্সেস অডিট লগ প্রদান করে।
- সরাসরি ইভেন্ট। ইভেন্টআর্ক বিভিন্ন সরাসরি ইভেন্টের মাধ্যমে ট্রিগার হতে পারে, যেমন ক্লাউড স্টোরেজ বাকেটের আপডেট অথবা ফায়ারবেস রিমোট কনফিগ টেমপ্লেটের আপডেট।
ইভেন্টের গন্তব্যস্থল
- ওয়ার্কফ্লো
- ক্লাউড রান
- জিকেই
- ক্লাউড ফাংশন ( ২য় প্রজন্ম )

ওয়ার্কফ্লো বলতে কী বোঝায়?
ওয়ার্কফ্লোস একটি সম্পূর্ণ পরিচালিত পরিষেবা যা আপনাকে মাইক্রোসার্ভিস, টাস্ক এবং এপিআই একীভূত করতে দেয়। ওয়ার্কফ্লোস একটি সার্ভারবিহীন পরিষেবা এবং এটি আপনার চাহিদা মেটাতে স্বয়ংক্রিয়ভাবে স্কেল করবে।
ওয়ার্কফ্লো ব্যবহারের ক্ষেত্রসমূহ:
- ইভেন্ট-চালিত ওয়ার্কফ্লো নির্দিষ্ট ট্রিগারের মাধ্যমে কার্যকর হয়। উদাহরণস্বরূপ, যখন একটি নতুন অর্ডার জমা দেওয়া হয় এবং আপনি গ্রাহকের লয়্যালটি পয়েন্ট গণনা করতে চান। অথবা যখন কোনো অর্ডার বাতিল করা হয়, তখন ইভেন্টটি প্রকাশ করা যেতে পারে এবং সমস্ত আগ্রহী পরিষেবা ইভেন্টটি প্রক্রিয়া করবে।
- ব্যাচ জব ওয়ার্কফ্লো ক্লাউড শিডিউলার ব্যবহার করে নিয়মিতভাবে কাজগুলো চালায়। উদাহরণস্বরূপ, ব্যর্থ (failed) অবস্থায় থাকা মেনু আইটেমগুলো পরীক্ষা করা এবং সেগুলো মুছে ফেলার জন্য একটি রাতের কাজ।
যেসব ওয়ার্কফ্লো বিভিন্ন সার্ভিসকে সমন্বয় করে, সেগুলোর জন্য ওয়ার্কফ্লোস আদর্শ। আপনি এক বছর পর্যন্ত অপেক্ষা এবং পুনঃপ্রচেষ্টা অন্তর্ভুক্ত প্রক্রিয়াগুলোকে স্বয়ংক্রিয় করতে পারেন।
ওয়ার্কফ্লোর সুবিধাসমূহ:
- কোডের চেয়ে কনফিগারেশন: কোড লেখার পরিবর্তে লজিককে কনফিগারেশনে স্থানান্তর করে টেকনিক্যাল ডেট হ্রাস করুন।
- আপনার আর্কিটেকচারকে সরল করুন। স্টেটফুল ওয়ার্কফ্লো আপনাকে অতিরিক্ত নির্ভরতা ছাড়াই জটিল সার্ভিস ইন্টিগ্রেশনগুলো দেখতে ও নিরীক্ষণ করতে দেয়।
- নির্ভরযোগ্যতা এবং ফল্ট টলারেন্স অন্তর্ভুক্ত করুন। অন্যান্য সিস্টেম ব্যর্থ হলেও ডিফল্ট বা কাস্টম রিট্রাই লজিক এবং এরর হ্যান্ডলিংয়ের মাধ্যমে ব্যর্থতা নিয়ন্ত্রণ করুন—প্রতিটি ধাপ ক্লাউড স্প্যানারে চেকপয়েন্ট করার মাধ্যমে আপনাকে অগ্রগতির হিসাব রাখতে সাহায্য করে।
- কোনো রক্ষণাবেক্ষণের প্রয়োজন নেই। প্রয়োজন অনুযায়ী সম্প্রসারণ করুন: এখানে প্যাচ বা রক্ষণাবেক্ষণের কিছু নেই। শুধুমাত্র আপনার ওয়ার্কফ্লো চলার সময়ই অর্থ প্রদান করুন, অপেক্ষারত বা নিষ্ক্রিয় থাকাকালীন কোনো খরচ নেই।
এই ল্যাবে, আপনি একটি ইভেন্ট-ড্রাইভেন ওয়ার্কফ্লো কনফিগার করবেন।
আপনি যা শিখবেন
এই ল্যাবে, আপনারা নিম্নলিখিত বিষয়গুলো করতে শিখবেন:
- ওয়ার্কফ্লো ট্রিগার করার জন্য পাব/সাব টপিক এবং ইভেন্টার্ক কনফিগার করুন।
- ক্লাউড রান পরিষেবা কল করতে এবং পাব/সাব-এ বার্তা প্রকাশ করতে ওয়ার্কফ্লো কনফিগার করুন।
- ক্লাউড লগিং-এ এবং gcloud CLI ব্যবহার করে ওয়ার্কফ্লো-এর স্ট্রাকচার্ড লগ কীভাবে কোয়েরি করবেন
পূর্বশর্ত
- এই ল্যাবটি করার জন্য ক্লাউড কনসোল এবং ক্লাউড শেল পরিবেশ সম্পর্কে পূর্বপরিচিতি আছে বলে ধরে নেওয়া হচ্ছে।
- Cloud Run এবং Cloud Pub/Sub-এর পূর্ব অভিজ্ঞতা থাকলে সহায়ক, তবে তা আবশ্যক নয়।
২. সেটআপ এবং প্রয়োজনীয়তা
ক্লাউড প্রজেক্ট সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



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

রিপোজিটরিটি ক্লোন করুন এবং ডিরেক্টরিতে যান, নিচের কমান্ডটি কপি করে টার্মিনালে পেস্ট করুন এবং এন্টার চাপুন:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
lab-setup.sh চালিয়ে প্রয়োজনীয় নির্ভরতাগুলো স্থাপন করুন।
নিম্নলিখিত সম্পদগুলি তৈরি করা হবে:
- AlloyDB ক্লাস্টার এবং ইনস্ট্যান্স
- ক্লাউড রান জব এবং কাস্টমার সার্ভিসের জন্য কন্টেইনার ইমেজ সংরক্ষণের আর্টিফ্যাক্ট রেজিস্ট্রি।
- ক্লাউড রান সার্ভিস এবং জবের জন্য অ্যালয়ডিবি ডেটাবেসের সাথে যোগাযোগের ভিপিসি অ্যাক্সেস কানেক্টর।
- AlloyDB ডেটাবেস তৈরি করার জন্য ক্লাউড রান জব
- ক্লাউড রান কাস্টমার সার্ভিস - একটি জাভা ভিত্তিক মাইক্রোসার্ভিস যা কোয়ার্কাস ফ্রেমওয়ার্ক ব্যবহার করে।
./lab-setup.sh
অনুমতি দিতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন।

সেটআপ করতে প্রায় ১০ মিনিট সময় লাগবে।
স্ক্রিপ্টটি সম্পন্ন হওয়া পর্যন্ত এবং নিচের আউটপুটটি না দেখা পর্যন্ত অপেক্ষা করুন, তারপর অন্যান্য ধাপগুলো চালান।
Deploying container to Cloud Run service [customer-service] in project [cymbal-eats-19227-5681] region [us-east1] OK Deploying new service... Done. OK Creating Revision... OK Routing traffic... Done. Service [customer-service] revision [customer-service-00001-mid] has been deployed and is serving 100 percent of traffic. Service URL: https://customer-service-e4p5zon5rq-ue.a.run.app
আপনি পরবর্তী বিভাগটি ঘুরে দেখতে পারেন এবং তারপর পরবর্তী ধাপ থেকে আবার শুরু করতে ফিরে আসতে পারেন।
৩. কর্মপ্রবাহ পর্যালোচনা করুন
ওয়ার্কফ্লো মূল ধারণা
একটি ওয়ার্কফ্লো হলো একাধিক ধাপের সমষ্টি, যা ওয়ার্কফ্লো সিনট্যাক্স ( YAML বা JSON ) ব্যবহার করে বর্ণনা করা হয়।
একটি ওয়ার্কফ্লো তৈরি করার পর, সেটিকে ডিপ্লয় করা হয়, যা ওয়ার্কফ্লোটিকে নির্বাহের জন্য প্রস্তুত করে তোলে।
একটি এক্সিকিউশন হলো একটি ওয়ার্কফ্লো-এর সংজ্ঞায় থাকা লজিকের একক চালনা। যে ওয়ার্কফ্লো এক্সিকিউট করা হয়নি, তার জন্য কোনো চার্জ তৈরি হয় না। সমস্ত ওয়ার্কফ্লো এক্সিকিউশন স্বাধীন, এবং পণ্যটির দ্রুত স্কেলিং ক্ষমতা বিপুল সংখ্যক যুগপৎ এক্সিকিউশনের সুযোগ করে দেয়।
কার্যনির্বাহী নিয়ন্ত্রণ
- ধাপসমূহ - একটি ওয়ার্কফ্লো তৈরি করতে, আপনাকে ওয়ার্কফ্লো সিনট্যাক্স ব্যবহার করে কাঙ্ক্ষিত
stepsএবং সম্পাদনের ক্রম নির্ধারণ করতে হবে। প্রতিটি ওয়ার্কফ্লোতে অবশ্যই অন্তত একটি ধাপ থাকতে হবে। - শর্তাবলী - আপনি একটি সিলেকশন মেকানিজম হিসেবে
switchব্লক ব্যবহার করতে পারেন, যা কোনো এক্সপ্রেশনের মানকে একটি ওয়ার্কফ্লো-এর এক্সিকিউশনের প্রবাহ নিয়ন্ত্রণ করতে দেয়। - পুনরাবৃত্তি - আপনি সংখ্যার একটি অনুক্রমের উপর অথবা ডেটার কোনো সংগ্রহের (যেমন একটি তালিকা বা ম্যাপ) মধ্যে পুনরাবৃত্তি করার জন্য একটি
forলুপ ব্যবহার করতে পারেন। - সাবওয়ার্কফ্লো - একটি সাবওয়ার্কফ্লো প্রোগ্রামিং ভাষার রুটিন বা ফাংশনের মতোই কাজ করে, যা আপনাকে এমন একটি ধাপ বা একাধিক ধাপের সমষ্টিকে অন্তর্ভুক্ত করার সুযোগ দেয়, যা আপনার ওয়ার্কফ্লো একাধিকবার পুনরাবৃত্তি করবে।
মৃত্যুদণ্ড কার্যকর করা
- ম্যানুয়াল - আপনি গুগল ক্লাউড কনসোল অথবা গুগল ক্লাউড সিএলআই (CLI) ব্যবহার করে কমান্ড লাইন থেকে ওয়ার্কফ্লো পরিচালনা করতে পারেন।
- প্রোগ্রাম্যাটিক - ওয়ার্কফ্লো পরিচালনা করার জন্য ওয়ার্কফ্লো এপিআই (Workflows API) বা রেস্ট এপিআই (REST API)-এর ক্লাউড ক্লায়েন্ট লাইব্রেরিগুলো ব্যবহার করা যেতে পারে।
- নির্ধারিত - আপনি ক্লাউড শিডিউলার ব্যবহার করে একটি নির্দিষ্ট সময়সূচী অনুযায়ী ওয়ার্কফ্লো চালাতে পারেন।
রানটাইম আর্গুমেন্ট
আপনার প্রধান ওয়ার্কফ্লোতে (যা একটি মেইন ব্লকের মধ্যে থাকে) একটি params ফিল্ড যোগ করে রানটাইমে পাঠানো ডেটা অ্যাক্সেস করা যায়। মেইন ব্লকটি যেকোনো বৈধ JSON ডেটা টাইপের একটিমাত্র আর্গুমেন্ট গ্রহণ করে। 'params' ফিল্ডটি সেই ভেরিয়েবলের নাম দেয়, যা ওয়ার্কফ্লো আপনার পাঠানো ডেটা সংরক্ষণ করতে ব্যবহার করে।
ক্লাউড রান পরিষেবা প্রমাণীকরণের কর্মপ্রবাহ
কাস্টমার সার্ভিস হলো এই রিপোজিটরিতে অন্তর্ভুক্ত একটি নমুনা অ্যাপ্লিকেশন, যা ক্লাউড রান-এ চলে এবং শুধুমাত্র অভ্যন্তরীণ নেটওয়ার্ক থেকে আসা প্রমাণীকৃত অনুরোধগুলোকে অনুমতি দেওয়ার জন্য কনফিগার করা হয়েছে। ক্লাউড রান সার্ভিসের সাথে প্রমাণীকরণের জন্য, আপনি অনুরোধে একটি গুগল-স্বাক্ষরিত ওপেনআইডি কানেক্ট (OIDC) টোকেন যোগ করতে ওয়ার্কফ্লো কনফিগার করবেন।
সার্ভিস-টু-সার্ভিস অথেনটিকেশন সম্পর্কে আরও জানতে ডকুমেন্টেশন পর্যালোচনা করুন।
ওয়ার্কফ্লো অথেন্টিকেশনটি args ব্লকের auth সেকশনের অধীনে কনফিগার করা হয়।
rewardsWorkflow.yaml.tmpl
- create_customer:
call: http.post
args:
url: CUSTOMER_SERVICE_URL/customer
auth:
type: OIDC
ওয়ার্কফ্লো লজিক
যদি কোনো গ্রাহক বিদ্যমান না থাকে, তাহলে এই ওয়ার্কফ্লোটি প্রথমে একজন গ্রাহক তৈরি করার জন্য একটি এপিআই (API) কল করবে এবং তারপর রিওয়ার্ডস পয়েন্ট আপডেট করবে। অর্ডারের মোট পরিমাণের উপর ভিত্তি করে, ওয়ার্কফ্লোটি গ্রাহকের জন্য রিওয়ার্ডস পয়েন্ট গণনা করতে একটি মাল্টিপ্লায়ার নির্বাচন করবে। বিস্তারিত জানতে নিচের নমুনা দেখুন।
- calculate_multiplier:
switch:
- condition: ${totalAmount < 10}
steps:
- set_multiplier1:
assign:
- multiplier: 2
- condition: ${totalAmount >= 10 and totalAmount < 25}
steps:
- set_multiplier2:
assign:
- multiplier: 3
- condition: ${totalAmount >= 25}
steps:
- set_multiplier3:
assign:
- multiplier: 5
- calculate_rewards:
assign:
- rewardPoints: ${customerRecord.rewardPoints * multiplier}

৪. ওয়ার্কফ্লো কনফিগার এবং স্থাপন করুন
পরিবেশ ভেরিয়েবল সেটআপ করুন:
export REGION=us-east1
export CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
echo $CUSTOMER_SERVICE_URL
ওয়ার্কফ্লো টেমপ্লেটে সার্ভিস URL প্রতিস্থাপন করুন:
sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" rewardsWorkflow.yaml.tmpl > rewardsWorkflow.yaml
ওয়ার্কফ্লো সার্ভিস এবং প্রজেক্ট এনভায়রনমেন্ট ভেরিয়েবলের জন্য অবস্থান নির্ধারণ করুন:
gcloud config set workflows/location ${REGION}
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
ওয়ার্কফ্লোটির জন্য নিম্নলিখিত অনুমতিসহ একটি কাস্টম সার্ভিস অ্যাকাউন্ট তৈরি করুন:
- ক্লাউড রান পরিষেবা চালু করুন
- কল লগিং এপিআই
- PubSub টপিকে বার্তা প্রকাশ করুন
export WORKFLOW_SERVICE_ACCOUNT=workflows-cloudrun-sa
gcloud iam service-accounts create ${WORKFLOW_SERVICE_ACCOUNT}
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/run.invoker"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/pubsub.publisher"
ওয়ার্কফ্লো স্থাপন করুন। ওয়ার্কফ্লোটি পূর্ববর্তী ধাপে তৈরি করা সার্ভিস অ্যাকাউন্টটি ব্যবহার করার জন্য কনফিগার করা হয়েছে:
export WORKFLOW_NAME=rewardsWorkflow
gcloud workflows deploy ${WORKFLOW_NAME} \
--source=rewardsWorkflow.yaml \
--service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com
ওয়ার্কফ্লো সোর্স এবং অন্যান্য বিবরণ পর্যালোচনা করুন (ট্রিগার ট্যাব)। এই মুহূর্তে এই ওয়ার্কফ্লোটি কার্যকর করার জন্য কোনো ট্রিগার কনফিগার করা নেই। আপনি পরবর্তী ধাপে এটি সেট আপ করবেন।

৫. পাব/সাব টপিক এবং ইভেন্টআর্ক ট্রিগার কনফিগার করুন
এরপর আপনি দুটি পাব/সাব টপিক তৈরি করবেন এবং একটি ইভেন্টআর্ক ট্রিগার কনফিগার করবেন।
অর্ডার সার্ভিস নতুন অর্ডার সম্পর্কিত তথ্যসহ order-topic এ বার্তা প্রকাশ করবে।
ওয়ার্কফ্লোটি অর্ডার রিওয়ার্ড পয়েন্ট এবং মোট পরিমাণ সম্পর্কিত তথ্যসহ মেসেজ order-points-topic এ প্রকাশ করবে। অর্ডার সার্ভিস (যা এই ল্যাবের অংশ এবং ডেপ্লয় করা হয়নি) একটি এন্ডপয়েন্ট উন্মুক্ত করে, যা order-points-topic, এর পুশ সাবস্ক্রিপশন দ্বারা প্রতিটি অর্ডারের রিওয়ার্ড পয়েন্ট এবং মোট পরিমাণ আপডেট করার জন্য ব্যবহৃত হয়।
নতুন পাব/সাব টপিক তৈরি করুন:
export TOPIC_ID=order-topic
export ORDER_POINTS_TOPIC_ID=order-points-topic
gcloud pubsub topics create $TOPIC_ID --project=$PROJECT_ID
gcloud pubsub topics create $ORDER_POINTS_TOPIC_ID --project=$PROJECT_ID
ইভেন্টার্ক পরিষেবার জন্য অবস্থান নির্ধারণ করুন:
gcloud config set eventarc/location ${REGION}
একটি কাস্টম সার্ভিস অ্যাকাউন্ট তৈরি করুন যা ইভেন্টআর্ক ট্রিগার ওয়ার্কফ্লো কার্যকর করতে ব্যবহার করবে।
export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa
gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}
ওয়ার্কফ্লো সম্পাদনের জন্য সার্ভিস অ্যাকাউন্টকে অ্যাক্সেস প্রদান করুন।
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/workflows.invoker"
পাব/সাব মেসেজ শোনার জন্য এবং সেগুলোকে ওয়ার্কফ্লোতে পৌঁছে দেওয়ার জন্য একটি ইভেন্টআর্ক ট্রিগার তৈরি করুন।
gcloud eventarc triggers create new-orders-trigger \
--destination-workflow=${WORKFLOW_NAME} \
--destination-workflow-location=${REGION} \
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
--service-account="${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--transport-topic=$TOPIC_ID
নমুনা আউটপুট:
Creating trigger [new-orders-trigger] in project [qwiklabs-gcp-01-1a990bfcadb3], location [us-east1]...done. Publish to Pub/Sub topic [projects/qwiklabs-gcp-01-1a990bfcadb3/topics/order-topic] to receive events in Workflow [rewardsWorkflow]. WARNING: It may take up to 2 minutes for the new trigger to become active.
তৈরি করা ইভেন্টআর্ক ট্রিগারটি পর্যালোচনা করুন।

ট্রিগারের জন্য তৈরি করা সাবস্ক্রিপশনটি পর্যালোচনা করুন।

ওয়ার্কফ্লো অংশের পরিবর্তনগুলো পর্যালোচনা করুন। একটি নতুন ট্রিগার যোগ করা হয়েছে।

৬. পরীক্ষার কার্যপ্রবাহ
অর্ডার সার্ভিস সিমুলেট করতে, আপনাকে ক্লাউড শেল থেকে পাব/সাব টপিকে মেসেজ পাঠাতে হবে এবং ক্লাউড কনসোলে ক্লাউড রান কাস্টমার সার্ভিস লগ যাচাই করতে হবে।
export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'
নমুনা আউটপুট:
messageIds: - '5063709859203105'
ওয়ার্কফ্লো সম্পাদনের বিবরণ এবং লগ পর্যালোচনা করুন।


৭. ওয়ার্কফ্লো স্ট্রাকচার্ড লগিং
ওয়ার্কফ্লোটি JSON ফরম্যাটে স্ট্রাকচার্ড লগ লেখার জন্য কনফিগার করা হয়েছে। ক্লাউড লগিং এপিআই, workflows.googleapis.com/Workflow রিসোর্স ব্যবহার করে এবং projects/${PROJECT_ID}/logs/Workflows লগ নামের অধীনে লগগুলো লেখা হয়।
নিচে লগিং কনফিগারেশন পর্যালোচনা করুন।
- log_totalAmount:
call: sys.log
args:
json:
orderNumber: ${order.orderNumber}
totalAmount: ${totalAmount}
multiplier: ${multiplier}
totalRewardPoints: ${rewardPoints}
orderRewardPoints: ${orderRewardPoints}
severity: INFO
কনসোলে লগস এক্সপ্লোরার খুলুন এবং ২ ডলারের বেশি মোট পরিমাণযুক্ত প্রক্রিয়াকৃত অর্ডারগুলির জন্য একটি কোয়েরি চালান ।
নিচের কোয়েরিটি ব্যবহার করুন, এখানে প্রজেক্ট আইডি ( qwiklabs-gcp-01-1a990bfcadb3 ) এর জায়গায় আপনার বর্তমান প্রজেক্ট আইডি বসান:
resource.type="workflows.googleapis.com/Workflow" AND
logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND
jsonPayload.totalAmount > 2 AND
timestamp >= "2022-11-01T23:59:59Z" AND
timestamp <= "2023-11-05T00:00:00Z"
নমুনা আউটপুট:

ক্লাউড শেল খুলুন এবং নিচের কমান্ডগুলো ব্যবহার করে gcloud CLI-এর মাধ্যমে লগ পড়ুন ।
প্রজেক্ট আইডি ( qwiklabs-gcp-01-1a990bfcadb3 ) এর জায়গায় আপনার বর্তমান প্রজেক্ট আইডি বসান।
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
table ফরম্যাট ব্যবহার করে নমুনা আউটপুট:

প্রজেক্ট আইডি ( qwiklabs-gcp-01-1a990bfcadb3 ) এর জায়গায় আপনার বর্তমান প্রজেক্ট আইডি বসান।
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format=json | jq
json ফরম্যাট ব্যবহার করে নমুনা আউটপুট:

৮. গ্রাহকের রেকর্ড পর্যালোচনা করুন
(ঐচ্ছিক পদক্ষেপ) বর্তমানে customer-service শুধুমাত্র অভ্যন্তরীণ নেটওয়ার্ক থেকে ট্র্যাফিক গ্রহণ করার জন্য কনফিগার করা আছে।
সার্ভিস ইউআরএল সংরক্ষণ করতে এবং কাস্টমার-সার্ভিসে কল করতে নিচের কমান্ডগুলো চালান।
export REGION=us-east1
CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer
আপনি একটি ত্রুটি বার্তা পাবেন যে প্রবেশ নিষিদ্ধ।
<html><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>403 Forbidden</title> </head> <body text=#000000 bgcolor=#ffffff> <h1>Error: Forbidden</h1> <h2>Access is forbidden.</h2> <h2></h2> </body></html>
বিদ্যমান গ্রাহক রেকর্ড দেখতে, ক্লাউড রান customer-service ইনগ্রেস সেটিংস পরিবর্তন করে " Allow all traffic " অপশনটি নির্বাচন করুন এবং "Save" এ ক্লিক করুন।
এর ফলে এন্ডপয়েন্টটি পাবলিক হয়ে যাবে এবং আপনি কার্ল (curl) ব্যবহার করে ক্লাউড শেল থেকে কাস্টমার সার্ভিস এপিআই কল করতে পারবেন।

সার্ভিসের URL সংরক্ষণ করতে এবং বিদ্যমান গ্রাহকদের তালিকা পেতে নিচের কমান্ডগুলো চালান।
CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq
নমুনা আউটপুট:
[
{
"id": "id1",
"rewardPoints": 3,
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2022-11-11T15:56:45.487566",
"email": "ajensen9090+eats@gmail.com",
"name": "Angela Jensen",
"state": "CA",
"updateDateTime": "2022-11-11T15:56:45.866125",
"zip": "94043"
}
]
একাধিকবার নতুন অর্ডার প্রকাশ করতে এবং curl কমান্ডের সাহায্যে গ্রাহকের রিওয়ার্ড পয়েন্ট যাচাই করতে কমান্ডটি চালান।
নতুন অর্ডার বার্তা প্রকাশ করুন:
export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'
গ্রাহকের রিওয়ার্ড পয়েন্ট যাচাই করুন:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq
লগ যাচাই করুন। প্রজেক্ট আইডি ( qwiklabs-gcp-01-1a990bfcadb3 ) এর জায়গায় আপনার বর্তমান প্রজেক্ট আইডি বসান।
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
৯. অভিনন্দন!
অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!
আমরা যা আলোচনা করেছি:
- ওয়ার্কফ্লো কীভাবে কনফিগার করবেন
- ওয়ার্কফ্লোর জন্য ইভেন্টার্ক ট্রিগার কীভাবে কনফিগার করবেন
- ওয়ার্কফ্লো থেকে ক্লাউড রান সার্ভিসকে কীভাবে কল করবেন
- ক্লাউড লগিং-এ স্ট্রাকচার্ড লগ কীভাবে কোয়েরি করবেন এবং gcloud CLI ব্যবহার করে
এরপর কী:
Cymbal Eats-এর অন্যান্য কোডল্যাবগুলি অন্বেষণ করুন:
- ক্লাউড স্টোরেজ থেকে ইভেন্ট প্রসেসিং ট্রিগার করা
- ক্লাউড রান থেকে প্রাইভেট ক্লাউডএসকিউএল-এ সংযোগ করা
- ক্লাউড রান থেকে সম্পূর্ণ পরিচালিত ডেটাবেসগুলিতে সংযোগ স্থাপন
- আইডেন্টিটি অ্যাওয়্যার প্রক্সি (IAP) ব্যবহার করে সার্ভারলেস অ্যাপ্লিকেশন সুরক্ষিত করুন
- ক্লাউড শিডিউলারের মাধ্যমে ক্লাউড রান জব চালু করা
- ক্লাউড রানে নিরাপদে স্থাপন করা
- ক্লাউড রান ইনগ্রেস ট্র্যাফিক সুরক্ষিত করা
- GKE অটোপাইলট থেকে ব্যক্তিগত AlloyDB-তে সংযোগ স্থাপন
পরিষ্কার করা
এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলো যে প্রজেক্টে রয়েছে সেটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্সগুলো ডিলিট করে দিন।
প্রকল্পটি মুছে ফেলা হচ্ছে
বিলিং বন্ধ করার সবচেয়ে সহজ উপায় হলো টিউটোরিয়ালের জন্য তৈরি করা প্রজেক্টটি ডিলিট করে দেওয়া।
