GKE অটোপাইলট এবং পাব/সাবের সাথে সংহত ওয়ার্কফ্লো ট্রিগার করতে Eventarc কনফিগার করা হচ্ছে

১. সংক্ষিপ্ত বিবরণ

এই ল্যাবে, আপনি একটি ইভেন্টআর্ক ট্রিগার তৈরি করবেন যা একটি পাব/সাব টপিককে ওয়ার্কফ্লোস সার্ভিসের সাথে সংযুক্ত করে। ইভেন্টআর্ক আপনাকে সার্ভিস-টু-সার্ভিস কমিউনিকেশনকে ডিকাপল করতে দেয় – যা আপনার সলিউশনকে আরও এক্সটেনসিবল এবং ইভেন্ট-ড্রাইভেন করে তোলে। আপনি এমন একটি ওয়ার্কফ্লো তৈরি করবেন যাতে সিম্বাল ইটস-এ অর্ডার করার জন্য গ্রাহকের রিওয়ার্ড পয়েন্ট গণনা করার একটি বিজনেস প্রসেস সম্পাদনের জন্য একাধিক ধাপ অন্তর্ভুক্ত থাকবে। ওয়ার্কফ্লোটি GKE অটোপাইলটে চলমান একটি অ্যাপ্লিকেশনে একাধিক রিকোয়েস্ট পাঠাবে এবং গণনা করা রিওয়ার্ড পয়েন্ট সম্পর্কে অর্ডার সার্ভিস অ্যাপ্লিকেশনকে অবহিত করার জন্য পাব/সাব টপিকে একটি মেসেজ পাবলিশ করবে।

6c0606022b76f79d.png

GKE অটোপাইলট কী?

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

GKE Standard-এর ক্ষেত্রে, ব্যবহারকারীদের ওয়ার্কার নোড এবং নোড পুল কনফিগারেশন পরিচালনা করতে হয়, বাকি সব GKE সামলে নেয়।

GKE স্ট্যান্ডার্ড মোডে চালানোর ক্ষেত্রে গ্রাহক বনাম গুগলের দায়িত্ব

85500aad65f87437.png

GKE Autopilot-এর মাধ্যমে, নোড পুল কনফিগারেশন এবং ব্যবস্থাপনার দায়িত্ব গুগলের। এর ফলে আপনি ক্লাস্টারের উপরে চলমান অ্যাপ্লিকেশন এবং পরিষেবাগুলিতে মনোযোগ দিতে পারেন।

ইভেন্টার্ক কী?

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

গুগল ইভেন্ট প্রদানকারী

  • ৯০টিরও বেশি গুগল ক্লাউড প্রোভাইডার রয়েছে। এই প্রোভাইডাররা সরাসরি উৎস থেকে (যেমন, ক্লাউড স্টোরেজ) অথবা ক্লাউড অডিট লগ এন্ট্রির মাধ্যমে ইভেন্ট পাঠায়।
  • পাব/সাব প্রোভাইডার। এই প্রোভাইডাররা পাব/সাব মেসেজ ব্যবহার করে ইভেন্টআর্ক-এ ইভেন্ট পাঠায়।

তৃতীয় পক্ষের প্রদানকারী

তৃতীয়-পক্ষ প্রদানকারীরা হলো গুগল-বহির্ভূত এমন সত্তা যারা ইভেন্টার্কের কোনো উৎস সরবরাহ করে।

ইভেন্টার্ক ট্রিগার

  • ক্লাউড পাব/সাব ইভেন্ট। পাব/সাব টপিকে প্রকাশিত মেসেজের মাধ্যমে ইভেন্টআর্ক ট্রিগার হতে পারে।
  • ক্লাউড অডিট লগ (সিএএল) ইভেন্টসমূহ। ক্লাউড অডিট লগ প্রতিটি ক্লাউড প্রজেক্ট, ফোল্ডার এবং অর্গানাইজেশনের জন্য অ্যাডমিন অ্যাক্টিভিটি ও ডেটা অ্যাক্সেস অডিট লগ প্রদান করে।
  • সরাসরি ইভেন্ট। ইভেন্টআর্ক বিভিন্ন সরাসরি ইভেন্টের মাধ্যমে ট্রিগার হতে পারে, যেমন ক্লাউড স্টোরেজ বাকেটের আপডেট অথবা ফায়ারবেস রিমোট কনফিগ টেমপ্লেটের আপডেট।

ইভেন্টের গন্তব্যস্থল

c7ca054200edf1b3.png

ওয়ার্কফ্লো বলতে কী বোঝায়?

ওয়ার্কফ্লোস একটি সম্পূর্ণ পরিচালিত পরিষেবা যা আপনাকে মাইক্রোসার্ভিস, টাস্ক এবং এপিআই একীভূত করতে দেয়। ওয়ার্কফ্লোস একটি সার্ভারবিহীন পরিষেবা এবং এটি আপনার চাহিদা মেটাতে স্বয়ংক্রিয়ভাবে স্কেল করবে।

ওয়ার্কফ্লো ব্যবহারের ক্ষেত্রসমূহ:

  • ইভেন্ট-চালিত ওয়ার্কফ্লো নির্দিষ্ট ট্রিগারের মাধ্যমে কার্যকর হয়। উদাহরণস্বরূপ, যখন একটি নতুন অর্ডার জমা দেওয়া হয় এবং আপনি গ্রাহকের লয়্যালটি পয়েন্ট গণনা করতে চান। অথবা যখন কোনো অর্ডার বাতিল করা হয়, তখন ইভেন্টটি প্রকাশ করা যেতে পারে এবং সমস্ত আগ্রহী পরিষেবা ইভেন্টটি প্রক্রিয়া করবে।
  • ব্যাচ জব ওয়ার্কফ্লো ক্লাউড শিডিউলার ব্যবহার করে নিয়মিতভাবে কাজগুলো চালায়। উদাহরণস্বরূপ, ব্যর্থ (failed) অবস্থায় থাকা মেনু আইটেমগুলো পরীক্ষা করা এবং সেগুলো মুছে ফেলার জন্য একটি রাতের কাজ।

যেসব ওয়ার্কফ্লো বিভিন্ন সার্ভিসকে সমন্বয় করে, সেগুলোর জন্য ওয়ার্কফ্লোস আদর্শ। আপনি এক বছর পর্যন্ত অপেক্ষা এবং পুনঃপ্রচেষ্টা অন্তর্ভুক্ত প্রক্রিয়াগুলোকে স্বয়ংক্রিয় করতে পারেন।

ওয়ার্কফ্লোর সুবিধাসমূহ:

  • কোডের চেয়ে কনফিগারেশন: কোড লেখার পরিবর্তে লজিককে কনফিগারেশনে স্থানান্তর করে টেকনিক্যাল ডেট হ্রাস করুন।
  • আপনার আর্কিটেকচারকে সরল করুন। স্টেটফুল ওয়ার্কফ্লো আপনাকে অতিরিক্ত নির্ভরতা ছাড়াই জটিল সার্ভিস ইন্টিগ্রেশনগুলো দেখতে ও নিরীক্ষণ করতে দেয়।
  • নির্ভরযোগ্যতা এবং ফল্ট টলারেন্স অন্তর্ভুক্ত করুন। অন্যান্য সিস্টেম ব্যর্থ হলেও ডিফল্ট বা কাস্টম রিট্রাই লজিক এবং এরর হ্যান্ডলিংয়ের মাধ্যমে ব্যর্থতা নিয়ন্ত্রণ করুন—প্রতিটি ধাপ ক্লাউড স্প্যানারে চেকপয়েন্ট করার মাধ্যমে আপনাকে অগ্রগতির হিসাব রাখতে সাহায্য করে।
  • কোনো রক্ষণাবেক্ষণের প্রয়োজন নেই। প্রয়োজন অনুযায়ী সম্প্রসারণ করুন: এখানে প্যাচ বা রক্ষণাবেক্ষণের কিছু নেই। শুধুমাত্র আপনার ওয়ার্কফ্লো চলার সময়ই অর্থ প্রদান করুন, অপেক্ষারত বা নিষ্ক্রিয় থাকাকালীন কোনো খরচ নেই।

এই ল্যাবে, আপনি একটি ইভেন্ট-ড্রাইভেন ওয়ার্কফ্লো কনফিগার করবেন।

আপনি যা শিখবেন

এই ল্যাবে, আপনারা নিম্নলিখিত বিষয়গুলো করতে শিখবেন:

  • ওয়ার্কফ্লো ট্রিগার করার জন্য পাব/সাব টপিক এবং ইভেন্টার্ক কনফিগার করুন।
  • GKE Autopilot-এ চলমান অ্যাপ্লিকেশনে API কল করার জন্য ওয়ার্কফ্লো কনফিগার করুন।
  • পাব/সাব-এ মেসেজ প্রকাশ করার জন্য ওয়ার্কফ্লো কনফিগার করুন।
  • ক্লাউড লগিং-এ এবং gcloud CLI ব্যবহার করে ওয়ার্কফ্লো-এর স্ট্রাকচার্ড লগ কীভাবে কোয়েরি করবেন

পূর্বশর্ত

  • এই ল্যাবটি করার জন্য ক্লাউড কনসোল এবং ক্লাউড শেল পরিবেশ সম্পর্কে পূর্বপরিচিতি আছে বলে ধরে নেওয়া হচ্ছে।
  • GKE এবং Cloud Pub/Sub-এ পূর্ব অভিজ্ঞতা থাকলে সহায়ক, তবে তা আবশ্যক নয়।

২. সেটআপ এবং প্রয়োজনীয়তা

ক্লাউড প্রজেক্ট সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

পরিবেশ সেটআপ

সার্চ বারের ডানদিকে থাকা আইকনটিতে ক্লিক করে ক্লাউড শেল সক্রিয় করুন।

8613854df02635a3.png

রিপোজিটরিটি ক্লোন করুন এবং ডিরেক্টরিতে যান, নিচের কমান্ডটি কপি করে টার্মিনালে পেস্ট করুন এবং এন্টার চাপুন:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

gke-lab-setup.sh চালিয়ে প্রয়োজনীয় নির্ভরতাগুলি স্থাপন করুন।

নিম্নলিখিত সম্পদগুলি তৈরি করা হবে:

  • AlloyDB ক্লাস্টার এবং ইনস্ট্যান্স
  • GKE অটোপাইলট ক্লাস্টার
./gke-lab-setup.sh

অনুমতি দিতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন।

6356559df3eccdda.png

সেটআপ করতে প্রায় ১০ মিনিট সময় লাগবে।

স্ক্রিপ্টটি সম্পন্ন হওয়া পর্যন্ত এবং নিচের আউটপুটটি না দেখা পর্যন্ত অপেক্ষা করুন, তারপর অন্যান্য ধাপগুলো চালান।

NAME: client-instance
ZONE: us-central1-c
MACHINE_TYPE: e2-medium
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.9
EXTERNAL_IP: 35.232.109.233
STATUS: RUNNING

৩. জিকেই অটোপাইলট ক্লাস্টার

GKE অটোপাইলট ক্লাস্টার পর্যালোচনা করুন

প্রজেক্টের এনভায়রনমেন্ট ভেরিয়েবল সেট করুন:

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)')

প্রাথমিক সেটআপের অংশ হিসেবে, নিচের কমান্ডটি ব্যবহার করে ক্লাস্টারটি তৈরি করা হয়েছিল (আপনার এই কমান্ডটি চালানোর প্রয়োজন নেই):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

তৈরি করা GKE অটোপাইলট ক্লাস্টার দেখতে কমান্ডটি চালান:

gcloud container clusters list

নমুনা আউটপুট:

772db9dd58172e0c.png

ক্লাস্টারের জন্য ক্রেডেনশিয়াল সংরক্ষণ করতে কমান্ডটি চালান:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

একটি অ্যাপ্লিকেশন স্থাপন করুন

এরপর আপনি একটি কাস্টমার সার্ভিস অ্যাপ্লিকেশন ডেপ্লয় করবেন। এটি একটি জাভা-ভিত্তিক মাইক্রোসার্ভিস যা কোয়ার্কাস ফ্রেমওয়ার্ক ব্যবহার করে।

cymbal-eats/customer-service ফোল্ডারে যান এবং কন্টেইনার ইমেজ বিল্ড ও আপলোড করতে নিচের কমান্ডগুলো চালান:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

AlloyDB প্রাইভেট আইপি অ্যাড্রেস সেট করুন:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

কাস্টমার সার্ভিস অ্যাপ্লিকেশনটি ডাটাবেসে সংযোগ করার জন্য যে ডাটাবেস ক্রেডেনশিয়াল ব্যবহার করবে, তা সংরক্ষণ করতে নিচের কমান্ডগুলো চালিয়ে Kubernetes secrets অবজেক্ট তৈরি করুন:

DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123

kubectl create secret generic gke-alloydb-secrets \
  --from-literal=database=$DB_NAME \
  --from-literal=username=$DB_USER \
  --from-literal=password=$DB_PASSWORD \
  --from-literal=db_host=$DB_HOST

deployment.yaml ফাইলে CUSTOMER_SERVICE_IMAGE প্রতিস্থাপন করতে কমান্ডটি চালান:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

অ্যাপ্লিকেশনটি ডিপ্লয় করতে কমান্ডটি চালান:

kubectl apply -f customer-service-deployment.yaml

অ্যাপ্লিকেশনটি RUNNING অবস্থায় যেতে কয়েক মুহূর্ত সময় লাগবে।

ডেপ্লয়মেন্ট স্পেসিফিকেশন ফাইলটি পর্যালোচনা করুন:

deployment.yaml.tmpl

কনফিগারেশনের এই অংশে অ্যাপ্লিকেশনটি চালানোর জন্য প্রয়োজনীয় রিসোর্সগুলো নির্দিষ্ট করা আছে।

    spec:
      containers:
      - name: customer-service
        image: CUSTOMER_SERVICE_IMAGE
        resources:
          requests:
            cpu: 250m
            memory: 512Mi
            ephemeral-storage: 512Mi
          limits:
            cpu: 500m
            memory: 1024Mi
            ephemeral-storage: 1Gi

ওয়ার্কফ্লোতে ব্যবহৃত হবে এমন এক্সটার্নাল আইপি তৈরি করার জন্য কমান্ডটি চালান:

SERVICE_NAME=customer-service

kubectl expose deployment $SERVICE_NAME \
  --type LoadBalancer --port 80 --target-port 8080

তৈরি করা রিসোর্সগুলো যাচাই করতে কমান্ডটি চালান:

kubectl get all

নমুনা আউটপুট:

179a23bd33793924.png

৪. কর্মপ্রবাহ পর্যালোচনা করুন

ওয়ার্কফ্লো মূল ধারণা

একটি ওয়ার্কফ্লো হলো একাধিক ধাপের সমষ্টি, যা ওয়ার্কফ্লো সিনট্যাক্স ( YAML বা JSON ) ব্যবহার করে বর্ণনা করা হয়।

একটি ওয়ার্কফ্লো তৈরি করার পর, সেটিকে ডিপ্লয় করা হয়, যা ওয়ার্কফ্লোটিকে নির্বাহের জন্য প্রস্তুত করে তোলে।

একটি এক্সিকিউশন হলো একটি ওয়ার্কফ্লো-এর সংজ্ঞায় থাকা লজিকের একক চালনা। যে ওয়ার্কফ্লো এক্সিকিউট করা হয়নি, তার জন্য কোনো চার্জ তৈরি হয় না। সমস্ত ওয়ার্কফ্লো এক্সিকিউশন স্বাধীন, এবং পণ্যটির দ্রুত স্কেলিং ক্ষমতা বিপুল সংখ্যক যুগপৎ এক্সিকিউশনের সুযোগ করে দেয়।

কার্যনির্বাহী নিয়ন্ত্রণ

  • ধাপসমূহ - একটি ওয়ার্কফ্লো তৈরি করতে, আপনাকে ওয়ার্কফ্লো সিনট্যাক্স ব্যবহার করে কাঙ্ক্ষিত steps এবং সম্পাদনের ক্রম নির্ধারণ করতে হবে। প্রতিটি ওয়ার্কফ্লোতে অবশ্যই অন্তত একটি ধাপ থাকতে হবে।
  • শর্তাবলী - আপনি একটি সিলেকশন মেকানিজম হিসেবে switch ব্লক ব্যবহার করতে পারেন, যা কোনো এক্সপ্রেশনের মানকে একটি ওয়ার্কফ্লো-এর এক্সিকিউশনের প্রবাহ নিয়ন্ত্রণ করতে দেয়।
  • পুনরাবৃত্তি - আপনি সংখ্যার একটি অনুক্রমের উপর অথবা ডেটার কোনো সংগ্রহের (যেমন একটি তালিকা বা ম্যাপ) মধ্যে পুনরাবৃত্তি করার জন্য একটি for লুপ ব্যবহার করতে পারেন।
  • সাবওয়ার্কফ্লো - একটি সাবওয়ার্কফ্লো প্রোগ্রামিং ভাষার রুটিন বা ফাংশনের মতোই কাজ করে, যা আপনাকে এমন একটি ধাপ বা একাধিক ধাপের সমষ্টিকে অন্তর্ভুক্ত করার সুযোগ দেয়, যা আপনার ওয়ার্কফ্লো একাধিকবার পুনরাবৃত্তি করবে।

মৃত্যুদণ্ড কার্যকর করা

  • ম্যানুয়াল - আপনি গুগল ক্লাউড কনসোল অথবা গুগল ক্লাউড সিএলআই (CLI) ব্যবহার করে কমান্ড লাইন থেকে ওয়ার্কফ্লো পরিচালনা করতে পারেন।
  • প্রোগ্রাম্যাটিক - ওয়ার্কফ্লো পরিচালনা করার জন্য ওয়ার্কফ্লো এপিআই (Workflows API) বা রেস্ট এপিআই (REST API)-এর ক্লাউড ক্লায়েন্ট লাইব্রেরিগুলো ব্যবহার করা যেতে পারে।
  • নির্ধারিত - আপনি ক্লাউড শিডিউলার ব্যবহার করে একটি নির্দিষ্ট সময়সূচী অনুযায়ী ওয়ার্কফ্লো চালাতে পারেন।

রানটাইম আর্গুমেন্ট

আপনার প্রধান ওয়ার্কফ্লোতে (যা একটি মেইন ব্লকের মধ্যে থাকে) একটি params ফিল্ড যোগ করে রানটাইমে পাঠানো ডেটা অ্যাক্সেস করা যায়। মেইন ব্লকটি যেকোনো বৈধ JSON ডেটা টাইপের একটিমাত্র আর্গুমেন্ট গ্রহণ করে। 'params' ফিল্ডটি সেই ভেরিয়েবলের নাম দেয়, যা ওয়ার্কফ্লো আপনার পাঠানো ডেটা সংরক্ষণ করতে ব্যবহার করে।

ওয়ার্কফ্লো লজিক

যদি কোনো গ্রাহক বিদ্যমান না থাকে, তাহলে ওয়ার্কফ্লোটি প্রথমে একজন গ্রাহক তৈরি করার জন্য একটি এপিআই (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}

99f9cf1076c03fb6.png

৫. ওয়ার্কফ্লো কনফিগার এবং স্থাপন করুন

সার্ভিসটির এক্সটার্নাল আইপি অ্যাড্রেস দেখতে কমান্ডটি চালান:

kubectl get svc

নমুনা আউটপুট:

fe5cfec2bc836a5f.png

পূর্ববর্তী আউটপুট থেকে প্রাপ্ত External IP-এর মান ব্যবহার করে নিচের এনভায়রনমেন্ট ভেরিয়েবলটি সেট করুন।

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

ওয়ার্কফ্লো টেমপ্লেটে কাস্টমার সার্ভিস অ্যাপ্লিকেশন URL প্রতিস্থাপন করুন:

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" gkeRewardsWorkflow.yaml.tmpl > gkeRewardsWorkflow.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-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/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=gkeRewardsWorkflow.yaml \
  --service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com

ওয়ার্কফ্লো সোর্স এবং অন্যান্য বিবরণ পর্যালোচনা করুন (ট্রিগার ট্যাব)। এই মুহূর্তে এই ওয়ার্কফ্লোটি কার্যকর করার জন্য কোনো ট্রিগার কনফিগার করা নেই। আপনি পরবর্তী ধাপে এটি সেট আপ করবেন।

66ba7ebbde76d5a6.png

৬. পাব/সাব টপিক এবং ইভেন্টআর্ক ট্রিগার কনফিগার করুন

এরপর আপনি দুটি পাব/সাব টপিক তৈরি করবেন এবং একটি ইভেন্টআর্ক ট্রিগার কনফিগার করবেন।

অর্ডার সার্ভিস অ্যাপ্লিকেশনটি নতুন অর্ডার সম্পর্কিত তথ্যসহ 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.

তৈরি করা ইভেন্টআর্ক ট্রিগারটি পর্যালোচনা করুন।

bda445561ad5f4.png

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

3fccdda7d5526597.png

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

23d338abc16eaac8.png

৭. পরীক্ষার কার্যপ্রবাহ

6c0606022b76f79d.png

অর্ডার সার্ভিস সিমুলেট করতে, আপনাকে ক্লাউড শেল থেকে পাব/সাব টপিকে মেসেজ পাঠাতে হবে এবং ক্লাউড কনসোলে কাস্টমার সার্ভিস লগ যাচাই করতে হবে।

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'

ওয়ার্কফ্লো সম্পাদনের বিবরণ এবং লগ পর্যালোচনা করুন।

1e802826c700cc3e.png

57ff9705bf507fb0.png

৮. ওয়ার্কফ্লো স্ট্রাকচার্ড লগিং

ওয়ার্কফ্লোটি 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

ক্লাউড কনসোলে লগস এক্সপ্লোরার খুলুন এবং ২ ডলারের বেশি মোট পরিমাণযুক্ত প্রক্রিয়াকৃত অর্ডারগুলি খুঁজে বের করার জন্য একটি কোয়েরি চালান।

সার্চ কোয়েরি ফিল্ডটি দেখানোর জন্য 'Show query'-তে ক্লিক করুন।

f0a57ff3d10bad2.png

resource.type="workflows.googleapis.com/Workflow" AND 
jsonPayload.totalAmount > 2 AND 
timestamp >= "2023-01-01T00:00:00Z" AND 
timestamp <= "2024-12-31T23:59:59Z"

নমুনা আউটপুট:

9093f87159f1b928.png

ক্লাউড শেল খুলুন এবং নিচের কমান্ডগুলো ব্যবহার করে gcloud CLI-এর মাধ্যমে লগ পড়ুন

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

table ফরম্যাট ব্যবহার করে নমুনা আউটপুট:

35d5fd851ecde60.png

JSON ফরম্যাটে লগ পেতে নিচের কমান্ডটি চালান:

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format=json | jq

json ফরম্যাট ব্যবহার করে নমুনা আউটপুট:

ac7421548ea9a9f2.png

৯. গ্রাহকের রেকর্ড পর্যালোচনা করুন

(ঐচ্ছিক পদক্ষেপ)

কাস্টমার সার্ভিস ইউআরএল এনভায়রনমেন্ট ভেরিয়েবল সেট করতে নিচের কমান্ডগুলো চালান।

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

curl $CUSTOMER_SERVICE_URL/customer | jq

নমুনা আউটপুট:

[
  {
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2023-01-31T17:22:08.853644",
    "email": "ajensen9090+eats@gmail.com",
    "id": "id1",
    "name": "Angela Jensen",
    "rewardPoints": 4,
    "state": "CA",
    "updateDateTime": "2023-01-31T17:22:09.652117",
    "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 $CUSTOMER_SERVICE_URL/customer | jq

সর্বশেষ লগগুলি পরীক্ষা করতে নিচের কমান্ডটি চালান:

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

১০. অভিনন্দন!

অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!

আমরা যা আলোচনা করেছি:

  • ওয়ার্কফ্লো ট্রিগার করার জন্য পাব/সাব টপিক এবং ইভেন্টার্ক কীভাবে কনফিগার করবেন
  • GKE Autopilot-এ চলমান অ্যাপ্লিকেশনে API কল করার জন্য ওয়ার্কফ্লো কীভাবে কনফিগার করবেন
  • পাব/সাব-এ মেসেজ প্রকাশ করার জন্য ওয়ার্কফ্লো কীভাবে কনফিগার করবেন
  • ক্লাউড লগিং-এ এবং gcloud CLI ব্যবহার করে ওয়ার্কফ্লো-এর স্ট্রাকচার্ড লগ কীভাবে কোয়েরি করবেন

এরপর কী:

Cymbal Eats-এর অন্যান্য কোডল্যাবগুলি অন্বেষণ করুন:

পরিষ্কার করা

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলো যে প্রজেক্টে রয়েছে সেটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্সগুলো ডিলিট করে দিন।

প্রকল্পটি মুছে ফেলা হচ্ছে

বিলিং বন্ধ করার সবচেয়ে সহজ উপায় হলো টিউটোরিয়ালের জন্য তৈরি করা প্রজেক্টটি ডিলিট করে দেওয়া।