১. সংক্ষিপ্ত বিবরণ
এই ল্যাবে, আপনি GKE অটোপাইলটে চালিত একটি পড সহ একটি টু-টিয়ার মাইক্রোসার্ভিস ডেপ্লয় করবেন এবং এটিকে AlloyDB ডেটাবেসের একটি প্রাইভেট ইনস্ট্যান্সের সাথে সংযুক্ত করবেন। কাস্টমার সার্ভিস অ্যাপ্লিকেশনটি Cymbal Eats সিস্টেমের একটি অংশ এবং এটি নিবন্ধিত ব্যবহারকারীদের পরিচালনা করার কার্যকারিতা প্রদান করে। কাস্টমার সার্ভিস অ্যাপ্লিকেশনটি একটি জাভা-ভিত্তিক মাইক্রোসার্ভিস যা Quarkus ফ্রেমওয়ার্ক ব্যবহার করে।

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

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



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

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

সেটআপ করতে প্রায় ১০ মিনিট সময় লাগবে। প্রয়োজনীয় ডিপেন্ডেন্সিগুলো তৈরি করতে ব্যবহৃত সেটআপ স্ক্রিপ্টটি পর্যালোচনা করুন।
gke-lab-setup.sh
পরবর্তী ধাপগুলো চালানোর আগে স্ক্রিপ্টটি সম্পন্ন হওয়া এবং নিচের আউটপুটটি দেখা পর্যন্ত অপেক্ষা করুন।
Job [db-job] has successfully been created. To execute this job, use: gcloud beta run jobs execute db-job OK Creating execution... Done. OK Provisioning resources... Done. Execution [db-job-k94ps] has successfully started running.
৩. অ্যাপ্লিকেশন ডেপ্লয়মেন্ট
AlloyDB ক্লাস্টার পর্যালোচনা করুন
তৈরি করা AlloyDB ইনস্ট্যান্সটি পর্যালোচনা করতে নিচের কমান্ডটি চালান:
gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1
নমুনা আউটপুট:
createTime: '2023-01-06T14:40:07.213288293Z' instanceType: PRIMARY ipAddress: 10.77.176.2 machineConfig: cpuCount: 2 name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance nodes: - zoneId: us-central1-f queryInsightsConfig: queryPlansPerMinute: 5 queryStringLength: 1024 recordApplicationTags: true recordClientAddress: true reconciling: false state: READY uid: df90d57d-88df-49be-a626-6dfec0513e64 updateTime: '2023-01-06T14:49:40.907977843Z' writableNode: zoneId: us-central1-b
কনসোলে উপলব্ধ বৈশিষ্ট্যগুলি (কোয়েরি ইনসাইট, মনিটরিং) অন্বেষণ করুন।

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
নমুনা আউটপুট:

ক্লাস্টারের জন্য ক্রেডেনশিয়াল সংরক্ষণ করতে কমান্ডটি চালান:
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 অবস্থায় যেতে কয়েক মুহূর্ত সময় লাগবে।
টেস্ট স্টেপগুলিতে ব্যবহৃত হবে এমন এক্সটার্নাল আইপি তৈরি করার জন্য কমান্ডটি চালান:
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
তৈরি করা রিসোর্সগুলো যাচাই করতে কমান্ডটি চালান:
kubectl get all
নমুনা আউটপুট:

৪. পরীক্ষার আবেদন
কাস্টমার সার্ভিস ইউআরএল সংরক্ষণ করতে নিচের কমান্ডগুলো চালান।
kubectl get svc
পূর্ববর্তী আউটপুট থেকে প্রাপ্ত External IP-এর মান ব্যবহার করে নিচের এনভায়রনমেন্ট ভেরিয়েবলটি সেট করুন।
CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
নতুন গ্রাহক রেকর্ড তৈরি করতে নিচের কমান্ডগুলো চালান:
curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"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 $CUSTOMER_SERVICE_URL/customer | jq
নমুনা আউটপুট:
[
{
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2023-01-06T16:13:19.118744",
"email": "ajensen9090+eats@gmail.com",
"id": "id1",
"name": "Angela Jensen",
"rewardPoints": 3,
"state": "CA",
"updateDateTime": "2023-01-06T16:13:19.118896",
"zip": "94043"
}
]
GKE ওয়ার্কলোড এবং পরিষেবাগুলি পর্যালোচনা করুন
ক্লাউড কনসোলে Kubernetes Engine খুলুন এবং তৈরি করা ওয়ার্কলোড ও সার্ভিসগুলো পর্যালোচনা করুন।


অ্যাপ্লিকেশন লগ
লগস এক্সপ্লোরার খুলুন এবং সেই লগগুলি খুঁজুন যেগুলিতে 'Customer already exists' লেখাটি রয়েছে।

৫. অভিনন্দন!
অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!
আমরা যা আলোচনা করেছি:
- AlloyDB ডাটাবেসের প্রাইভেট ইনস্ট্যান্স কীভাবে তৈরি করবেন
- GKE Autopilot ক্লাস্টারে কীভাবে একটি অ্যাপ্লিকেশন স্থাপন করবেন যা AlloyDB ইনস্ট্যান্সের সাথে সংযোগ স্থাপন করে
এরপর কী:
Cymbal Eats-এর অন্যান্য কোডল্যাবগুলি অন্বেষণ করুন:
- ইভেন্টার্কের মাধ্যমে ক্লাউড ওয়ার্কফ্লো চালু করা
- ক্লাউড স্টোরেজ থেকে ইভেন্ট প্রসেসিং ট্রিগার করা
- ক্লাউড রান থেকে প্রাইভেট ক্লাউডএসকিউএল-এ সংযোগ করা
- ক্লাউড রান থেকে সম্পূর্ণ পরিচালিত ডেটাবেসগুলিতে সংযোগ স্থাপন
- আইডেন্টিটি অ্যাওয়্যার প্রক্সি (IAP) ব্যবহার করে সার্ভারলেস অ্যাপ্লিকেশন সুরক্ষিত করুন
- ক্লাউড শিডিউলারের মাধ্যমে ক্লাউড রান জব চালু করা
- ক্লাউড রানে নিরাপদে স্থাপন করা
- ক্লাউড রান ইনগ্রেস ট্র্যাফিক সুরক্ষিত করা
পরিষ্কার করা
এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলো যে প্রজেক্টে রয়েছে সেটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্সগুলো ডিলিট করে দিন।
প্রকল্পটি মুছে ফেলা হচ্ছে
বিলিং বন্ধ করার সবচেয়ে সহজ উপায় হলো টিউটোরিয়ালের জন্য তৈরি করা প্রজেক্টটি ডিলিট করে দেওয়া।