1. ওভারভিউ
এই ল্যাবে, আপনি Cymbal Eats মেনু পরিষেবা তৈরি করবেন, মেনু আইটেমগুলি যোগ, আপডেট, মুছে এবং তালিকাভুক্ত করার জন্য RESTful APIs প্রকাশ করবেন। আপনি মেনু পরিষেবার জন্য ব্যাকএন্ড ডাটাবেস হিসাবে একটি ক্লাউড SQL ডাটাবেস তৈরি করবেন, যা ক্লাউড রানে চলবে। যেহেতু ক্লাউড রান ক্লাউড এসকিউএল ডাটাবেসের মতো একই ভিপিসিতে থাকে না, তাই ক্লাউড রানকে একটি ব্যক্তিগত আইপি ঠিকানার মাধ্যমে ক্লাউড এসকিউএল-এর সাথে যোগাযোগ করার অনুমতি দেওয়ার জন্য আপনাকে একটি সার্ভারহীন ভিপিসি অ্যাক্সেস সংযোগকারী কনফিগার করতে হবে।
যা শিখবেন
এই ল্যাবে, আপনি নিম্নলিখিতগুলি কীভাবে করবেন তা শিখবেন:
- ব্যক্তিগত VPC নেটওয়ার্ক কনফিগার করুন
- ব্যক্তিগত পোস্টগ্রেস ক্লাউড এসকিউএল ডেটাবেস তৈরি করুন
- ক্লাউডরানকে প্রাইভেট ভিপিসিতে সংযুক্ত করুন
- ক্লাউড রানে একটি পরিষেবা স্থাপন করুন যা ক্লাউড SQL ডাটাবেসের সাথে সংযোগ করে
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।
- প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
- প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত
PROJECT_ID
হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে। - আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
এনভায়রনমেন্ট সেটআপ
- প্রকল্প এবং সম্পদ সম্পর্কিত পরিবেশ ভেরিয়েবল তৈরি করুন
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)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service
export SERVERLESS_VPC_CONNECTOR=cymbalconnector
export DB_INSTANCE_NAME=menu-catalog
export DB_INSTANCE_PASSWORD=password123
export DB_DATABASE=menu-db
export DB_USER=menu-user
export DB_PASSWORD=menupassword123
- সংগ্রহস্থল ক্লোন করুন এবং ডিরেক্টরিতে নেভিগেট করুন
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
- পরিষেবাগুলি সক্ষম করুন
gcloud services enable \
sqladmin.googleapis.com \
run.googleapis.com \
vpcaccess.googleapis.com \
servicenetworking.googleapis.com
3. ব্যক্তিগত অ্যাক্সেস কনফিগার করুন
আপনার ভিপিসি নেটওয়ার্ক এবং অন্তর্নিহিত Google ক্লাউড ভিপিসি নেটওয়ার্ক যেখানে আপনার ক্লাউড SQL দৃষ্টান্ত অবস্থিত তার মধ্যে একটি VPC পিয়ারিং লিঙ্ক হিসাবে ব্যক্তিগত পরিষেবা অ্যাক্সেস প্রদান করা হয়৷ ব্যক্তিগত সংযোগ আপনার VPC নেটওয়ার্কে VM দৃষ্টান্ত এবং আপনি যে পরিষেবাগুলি ব্যবহার করেন তা শুধুমাত্র অভ্যন্তরীণ আইপি ঠিকানাগুলির মাধ্যমে যোগাযোগ করার অনুমতি দেয়৷ ব্যক্তিগত পরিষেবা অ্যাক্সেসের মাধ্যমে উপলব্ধ পরিষেবাগুলি অ্যাক্সেস করতে, VM দৃষ্টান্তগুলিতে ইন্টারনেট সংযোগ বা বাহ্যিক আইপি ঠিকানাগুলির প্রয়োজন হয় না।
- একটি আইপি ঠিকানা পরিসীমা বরাদ্দ করুন
gcloud compute addresses create google-managed-services-default \
--global \
--purpose=VPC_PEERING \
--prefix-length=20 \
--network=projects/$PROJECT_ID/global/networks/default
উদাহরণ আউটপুট
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-2-348215/global/addresses/google-managed-services-default].
- একটি ব্যক্তিগত সংযোগ তৈরি করুন।
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=google-managed-services-default \
--network=default \
--project=$PROJECT_ID
উদাহরণ আউটপুট
Operation "operations/pssn.p24-528514492617-2f2b507f-e4e5-4d53-a4de-9ddaceb4e92f" finished successfully.
4. ক্লাউড এসকিউএল সেট আপ করা হচ্ছে
ক্লাউড এসকিউএল হল একটি সম্পূর্ণ-পরিচালিত ডাটাবেস পরিষেবা যা ক্লাউডে আপনার PostgreSQL এবং MySQL রিলেশনাল ডেটাবেস সেট আপ, রক্ষণাবেক্ষণ, পরিচালনা এবং পরিচালনা করা সহজ করে তোলে। প্রতিটি ক্লাউড SQL দৃষ্টান্ত একটি ভার্চুয়াল মেশিন (VM) দ্বারা চালিত হয় যা Google ক্লাউড হোস্ট সার্ভারে চলে৷ উচ্চ প্রাপ্যতা বিকল্পটিতে প্রাথমিক VM এর মতো একই সেটআপ সহ অন্য জোনে একটি স্ট্যান্ডবাই VM অন্তর্ভুক্ত রয়েছে। ডাটাবেসটি একটি স্কেলেবল, দীর্ঘস্থায়ী নেটওয়ার্ক স্টোরেজ ডিভাইসে রাখা হয় যা একটি স্থায়ী ডিস্ক নামে পরিচিত, যা VM এর সাথে সংযুক্ত। ক্লাউড এসকিউএল ইনস্ট্যান্সের সময়কালে একটি অ্যাপ্লিকেশান যে আইপি অ্যাড্রেসের সাথে সংযোগ স্থাপন করে সেটি স্থির থাকে তা নিশ্চিত করার জন্য প্রতিটি VM-কে একটি স্ট্যাটিক আইপি ঠিকানা বরাদ্দ করা হয়।
আপনি একটি ব্যক্তিগত আইপি ঠিকানা সহ একটি পোস্টগ্রেস ক্লাউড এসকিউএল ডাটাবেস তৈরি করবেন।
একটি ডাটাবেস এবং ব্যবহারকারী তৈরি করুন
- একটি ব্যক্তিগত আইপি ব্যবহার করার জন্য একটি পোস্টগ্রেস ক্লাউড এসকিউএল উদাহরণ তৈরি করুন
gcloud sql instances create $DB_INSTANCE_NAME \
--project=$PROJECT_ID \
--network=projects/$PROJECT_ID/global/networks/default \
--no-assign-ip \
--database-version=POSTGRES_12 \
--cpu=2 \
--memory=4GB \
--region=$REGION \
--root-password=${DB_INSTANCE_PASSWORD}
উদাহরণ আউটপুট
Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/cymbal1/instances/menu-instance]. NAME: menu-instance DATABASE_VERSION: POSTGRES_12 LOCATION: us-east1-a TIER: db-custom-2-4096 PRIMARY_ADDRESS: - PRIVATE_ADDRESS: 10.8.80.5 STATUS: RUNNABLE
- ডাটাবেস ইনস্ট্যান্সে একটি ডাটাবেস যোগ করুন
gcloud sql databases create $DB_DATABASE --instance=$DB_INSTANCE_NAME
উদাহরণ আউটপুট
Created database [menu-db]. instance: menu-catalog name: menu-db project: cymbal1
- একটি এসকিউএল ব্যবহারকারী তৈরি করুন
gcloud sql users create ${DB_USER} \
--password=$DB_PASSWORD \
--instance=$DB_INSTANCE_NAME
উদাহরণ আউটপুট
Created user [menu-user].
- ডাটাবেসের আইপি ঠিকানা সংরক্ষণ করুন
export DB_INSTANCE_IP=$(gcloud sql instances describe $DB_INSTANCE_NAME \
--format=json | jq \
--raw-output ".ipAddresses[].ipAddress")
- কম্পিউট ইঞ্জিন পরিষেবা অ্যাকাউন্টে ক্লাউড SQL ক্লায়েন্ট ভূমিকা যোগ করুন
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/cloudsql.client"
উদাহরণ আউটপুট
Updated IAM policy for project [cymbal1]. [...]
5. সার্ভারহীন ভিপিসি
সার্ভারহীন ভিপিসি অ্যাক্সেস আপনাকে সার্ভারহীন পরিবেশ যেমন ক্লাউড রান, অ্যাপ ইঞ্জিন বা ক্লাউড ফাংশন থেকে সরাসরি আপনার ভার্চুয়াল প্রাইভেট ক্লাউড নেটওয়ার্কে সংযোগ করতে দেয়। সার্ভারলেস ভিপিসি অ্যাক্সেস কনফিগার করা আপনার সার্ভারহীন পরিবেশকে অভ্যন্তরীণ DNS এবং অভ্যন্তরীণ আইপি ঠিকানাগুলি (RFC 1918 এবং RFC 6598 দ্বারা সংজ্ঞায়িত করা হয়েছে) ব্যবহার করে আপনার VPC নেটওয়ার্কে অনুরোধ পাঠানোর অনুমতি দেয়। এই অনুরোধগুলির প্রতিক্রিয়াগুলিও আপনার অভ্যন্তরীণ নেটওয়ার্ক ব্যবহার করে৷
আপনি ক্লাউড এসকিউএল-এর সাথে সংযোগ করতে ক্লাউড রান পরিষেবার জন্য একটি সার্ভারহীন ভিপিসি অ্যাক্সেস সংযোগকারী তৈরি করবেন।
- আপনার ক্লাউড SQL দৃষ্টান্ত হিসাবে একই VPC নেটওয়ার্কে একটি সার্ভারহীন VPC অ্যাক্সেস সংযোগকারী তৈরি করুন৷
gcloud compute networks vpc-access connectors create ${SERVERLESS_VPC_CONNECTOR} \
--region=${REGION} \
--range=10.8.0.0/28
উদাহরণ আউটপুট
Created connector [cymbalconnector].
6. ক্লাউড রানে স্থাপন করা হচ্ছে
আপনি ক্লাউড রানে একটি ডকার ইমেজ তৈরি ও স্থাপন করবেন এবং ক্লাউড এসকিউএল ডাটাবেস অ্যাক্সেস করতে সার্ভারলেস ভিপিসি সংযোগকারীর সাথে ক্লাউড রানকে সংযুক্ত করবেন।
- ম্যাভেন ব্যবহার করে অ্যাপ্লিকেশন কম্পাইল করুন
./mvnw package -DskipTests
উদাহরণ আউটপুট
[...] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 42.864 s [INFO] Finished at: 2022-04-28T16:15:33Z [INFO] ------------------------------------------------------------------------
- ডকার ইমেজ তৈরি করুন:
docker build -f src/main/docker/Dockerfile.jvm \
--tag gcr.io/$PROJECT_NAME/menu-service .
উদাহরণ আউটপুট
[...] Successfully built 4ef5d7a3befc Successfully tagged gcr.io/cymbal1/menu-service:latest
- কন্টেইনার রেজিস্ট্রিতে ডকার ইমেজ পুশ করুন:
docker push gcr.io/$PROJECT_NAME/menu-service
উদাহরণ আউটপুট
Using default tag: latest The push refers to repository [gcr.io/cymbalsql/menu-service] 17b374963800: Pushed d9a51c06430d: Pushed fff5d2a2cfc9: Pushed f21fceb558c6: Pushed 5ffbbbf218dd: Pushed 60609ec85f86: Layer already exists f2c4302f03b8: Layer already exists latest: digest: sha256:f64cb7c288dbf4ad9b12bd210c23c5aec1048dee040450ff2d9dbdf96e83a426 size: 1789
- মেনু পরিষেবা স্থাপন করুন:
gcloud run deploy $MENU_SERVICE_NAME \
--image=gcr.io/$PROJECT_NAME/menu-service:latest \
--region $REGION \
--allow-unauthenticated \
--set-env-vars DB_USER=$DB_USER \
--set-env-vars DB_PASS=$DB_PASSWORD \
--set-env-vars DB_DATABASE=$DB_DATABASE \
--set-env-vars DB_HOST=$DB_INSTANCE_IP \
--vpc-connector $SERVERLESS_VPC_CONNECTOR \
--project=$PROJECT_ID \
--quiet
উদাহরণ আউটপুট
[...] Done. Service [menu-service] revision [menu-service-00002-xox] has been deployed and is serving 100 percent of traffic. Service URL: https://menu-service-g2mfphytdq-uk.a.run.app
গুগল সুপারিশ করে যে আপনি এসকিউএল শংসাপত্রের মতো সংবেদনশীল তথ্য সংরক্ষণ করতে সিক্রেট ম্যানেজার ব্যবহার করুন। আপনি ক্লাউড রানের সাথে পরিবেশের ভেরিয়েবল বা ভলিউম হিসাবে মাউন্ট করতে পারেন।
- স্টোর মেনু পরিষেবা URL:
MENU_SERVICE_URL=$(gcloud run services describe menu-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
- মেনু পরিষেবা URL যাচাই করুন
echo $MENU_SERVICE_URL
উদাহরণ আউটপুট
https://menu-service-g2mfphytdq-uk.a.run.app
7. পরিষেবা পরীক্ষা করা
- POST অনুরোধ পাঠিয়ে নতুন মেনু আইটেম তৈরি করুন:
curl -X POST "${MENU_SERVICE_URL}/menu" \
-H 'Content-Type: application/json' \
-d '{
"itemImageURL": "https://images.unsplash.com/photo-1631452180519-c014fe946bc7?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1587&q=80",
"itemName": "Curry Plate",
"itemPrice": 12.5,
"itemThumbnailURL": "https://images.unsplash.com/photo-1631452180519-c014fe946bc7?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1587&q=80",
"spiceLevel": 3,
"status": "Ready",
"tagLine": "Spicy touch for your taste buds!!"
}'
উদাহরণ আউটপুট
{ "id": 16, "createDateTime": "2022-04-28T18:14:04.17225", "itemImageURL": "https://images.unsplash.com/photo-1631452180519-c014fe946bc7?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1587&q=80", "itemName": "Curry Plate", "itemPrice": 12.5, "itemThumbnailURL": "https://images.unsplash.com/photo-1631452180519-c014fe946bc7?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1587&q=80", "spiceLevel": 3, "status": "Processing", "tagLine": "Spicy touch for your taste buds!!", "updateDateTime": "2022-04-28T18:14:04.172298" }
- PUT অনুরোধ পাঠিয়ে মেনু আইটেমের স্থিতি পরিবর্তন করুন:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Ready"}'
উদাহরণ আউটপুট
{ "id": 1, "createDateTime": "2022-04-28T17:21:02.369093", "itemImageURL": "https://images.unsplash.com/photo-1631452180519-c014fe946bc7?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1587&q=80", "itemName": "Curry Plate", "itemPrice": 12.50, "itemThumbnailURL": "https://images.unsplash.com/photo-1631452180519-c014fe946bc7?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1587&q=80", "spiceLevel": 0, "status": "Ready", "tagLine": "Spicy touch for your taste buds!!", "updateDateTime": "2022-04-28T17:21:02.657636" }
8. অভিনন্দন!
অভিনন্দন, আপনি কোডল্যাব শেষ করেছেন!
এরপর কি:
অন্যান্য Cymbal Eats কোডল্যাবগুলি অন্বেষণ করুন:
- Eventarc এর সাথে ক্লাউড ওয়ার্কফ্লো ট্রিগার করা
- ক্লাউড স্টোরেজ থেকে ইভেন্ট প্রসেসিং ট্রিগার করছে
- ক্লাউড রান থেকে সম্পূর্ণরূপে পরিচালিত ডেটাবেসে সংযোগ করা হচ্ছে
- আইডেন্টিটি অ্যাওয়ার প্রক্সি (IAP) সহ সুরক্ষিত সার্ভারহীন অ্যাপ্লিকেশন
- ক্লাউড শিডিউলারের সাথে ক্লাউড রান জব ট্রিগার করা
- ক্লাউড রানে নিরাপদে স্থাপন করা হচ্ছে
- ক্লাউড রান ইনগ্রেস ট্রাফিক সুরক্ষিত
- GKE অটোপাইলট থেকে ব্যক্তিগত AlloyDB-তে সংযোগ করা হচ্ছে
পরিষ্কার করুন
এই টিউটোরিয়ালে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, হয় সংস্থানগুলি রয়েছে এমন প্রকল্পটি মুছুন, অথবা প্রকল্পটি রাখুন এবং পৃথক সংস্থানগুলি মুছুন৷
প্রকল্প মুছে ফেলা হচ্ছে
বিলিং দূর করার সবচেয়ে সহজ উপায় হল আপনি টিউটোরিয়ালের জন্য তৈরি করা প্রকল্পটি মুছে ফেলা।