ক্লাউড রান থেকে ব্যক্তিগত ক্লাউডএসকিউএল-এর সাথে সংযোগ করা হচ্ছে

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

এই ল্যাবে, আপনি Cymbal Eats মেনু সার্ভিসটি তৈরি করবেন, যেখানে মেনু আইটেম যোগ, আপডেট, ডিলিট এবং তালিকাভুক্ত করার জন্য RESTful API উন্মুক্ত থাকবে। আপনি মেনু সার্ভিসটির ব্যাকএন্ড ডেটাবেস হিসেবে একটি Cloud SQL ডেটাবেস তৈরি করবেন, যা Cloud Run-এ চলবে। যেহেতু Cloud Run এবং Cloud SQL ডেটাবেস একই VPC-তে থাকে না, তাই Cloud Run-কে একটি প্রাইভেট আইপি অ্যাড্রেসের মাধ্যমে Cloud SQL-এর সাথে যোগাযোগ করার সুযোগ দিতে আপনাকে একটি Serverless VPC Access কানেক্টর কনফিগার করতে হবে।

19c7b05f35789fda.png

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

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

  • প্রাইভেট ভিপিসি নেটওয়ার্ক কনফিগার করুন
  • ব্যক্তিগত পোস্টগ্রেস ক্লাউড SQL ডেটাবেস তৈরি করুন
  • ক্লাউডরানকে প্রাইভেট ভিপিসির সাথে সংযুক্ত করুন
  • ক্লাউড রান-এ এমন একটি সার্ভিস ডেপ্লয় করুন যা ক্লাউড SQL ডেটাবেসের সাথে সংযুক্ত হয়।

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

স্ব-গতিতে পরিবেশ সেটআপ

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

পরিবেশ সেটআপ

  1. প্রকল্প এবং সম্পদ সম্পর্কিত পরিবেশ ভেরিয়েবল তৈরি করুন
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
  1. রিপোজিটরিটি ক্লোন করুন এবং ডিরেক্টরিতে যান
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
  1. পরিষেবাগুলি সক্ষম করুন
gcloud services enable \
    sqladmin.googleapis.com \
    run.googleapis.com \
    vpcaccess.googleapis.com \
    servicenetworking.googleapis.com

৩. ব্যক্তিগত অ্যাক্সেস কনফিগার করুন

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

  1. একটি আইপি অ্যাড্রেস রেঞ্জ বরাদ্দ করুন
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].
  1. একটি ব্যক্তিগত সংযোগ তৈরি করুন।
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.

৪. ক্লাউড এসকিউএল সেট আপ করা

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

219cb722c2dd1b82.png

আপনি একটি প্রাইভেট আইপি অ্যাড্রেস ব্যবহার করে একটি পোস্টগ্রেস ক্লাউড এসকিউএল ডেটাবেস তৈরি করবেন।

একটি ডাটাবেস এবং ব্যবহারকারী তৈরি করুন

  1. একটি প্রাইভেট আইপি ব্যবহার করার জন্য একটি পোস্টগ্রেস ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করুন।
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
  1. ডাটাবেস ইনস্ট্যান্সে একটি ডাটাবেস যোগ করুন
gcloud sql databases create $DB_DATABASE --instance=$DB_INSTANCE_NAME

উদাহরণ আউটপুট

Created database [menu-db].
instance: menu-catalog
name: menu-db
project: cymbal1
  1. একটি SQL ব্যবহারকারী তৈরি করুন
gcloud sql users create ${DB_USER} \
    --password=$DB_PASSWORD \
    --instance=$DB_INSTANCE_NAME

উদাহরণ আউটপুট

Created user [menu-user].
  1. ডাটাবেস আইপি ঠিকানা সংরক্ষণ করুন
export DB_INSTANCE_IP=$(gcloud sql instances describe $DB_INSTANCE_NAME \
    --format=json | jq \
    --raw-output ".ipAddresses[].ipAddress")
  1. Compute Engine পরিষেবা অ্যাকাউন্টে Cloud SQL Client রোলটি যোগ করুন
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].
[...]

৫. সার্ভারবিহীন ভিপিসি

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

ক্লাউড এসকিউএল-এর সাথে সংযোগ করার জন্য আপনি ক্লাউড রান সার্ভিসের জন্য একটি সার্ভারলেস ভিপিসি অ্যাক্সেস কানেক্টর তৈরি করবেন।

19c7b05f35789fda.png

  1. আপনার ক্লাউড SQL ইনস্ট্যান্সের মতো একই VPC নেটওয়ার্কে একটি সার্ভারলেস VPC অ্যাক্সেস কানেক্টর তৈরি করুন।
gcloud compute networks vpc-access connectors create ${SERVERLESS_VPC_CONNECTOR} \
    --region=${REGION} \
    --range=10.8.0.0/28

উদাহরণ আউটপুট

Created connector [cymbalconnector].

৬. ক্লাউড রান-এ ডেপ্লয় করা

আপনি ক্লাউড রানে একটি ডকার ইমেজ তৈরি ও স্থাপন করবেন এবং ক্লাউড এসকিউএল ডেটাবেস অ্যাক্সেস করার জন্য ক্লাউড রানকে সার্ভারলেস ভিপিসি কানেক্টরের সাথে সংযুক্ত করবেন।

  1. Maven ব্যবহার করে অ্যাপ্লিকেশনটি কম্পাইল করুন
./mvnw package -DskipTests

উদাহরণ আউটপুট

[...]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  42.864 s
[INFO] Finished at: 2022-04-28T16:15:33Z
[INFO] ------------------------------------------------------------------------
  1. ডকার ইমেজ তৈরি করুন:
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
  1. কন্টেইনার রেজিস্ট্রি-তে ডকার ইমেজ পুশ করুন:
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
  1. মেনু পরিষেবা স্থাপন করুন:
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

গুগল SQL ক্রেডেনশিয়ালের মতো সংবেদনশীল তথ্য সংরক্ষণের জন্য সিক্রেট ম্যানেজার ব্যবহার করার পরামর্শ দেয়। আপনি সিক্রেটগুলোকে এনভায়রনমেন্ট ভেরিয়েবল হিসেবে পাস করতে পারেন অথবা ক্লাউড রানের মাধ্যমে ভলিউম হিসেবে মাউন্ট করতে পারেন

  1. স্টোর মেনু পরিষেবা URL:
MENU_SERVICE_URL=$(gcloud run services describe menu-service \
  --platform managed \
  --region $REGION \
  --format=json | jq \
  --raw-output ".status.url")
  1. মেনু পরিষেবা URL যাচাই করুন
echo $MENU_SERVICE_URL

উদাহরণ আউটপুট

https://menu-service-g2mfphytdq-uk.a.run.app

৭. পরিষেবাটি পরীক্ষা করা

  1. 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"
}
  1. 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"
}

৮. অভিনন্দন!

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

এরপর কী:

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

পরিষ্কার করা

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

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

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