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

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

এই ল্যাবে, আপনি সিম্বাল ইটস মেনু পরিষেবা তৈরি করবেন, যা মেনু আইটেমগুলি যোগ, আপডেট, মুছে ফেলা এবং তালিকাভুক্ত করার জন্য RESTful API গুলিকে উন্মুক্ত করবে। আপনি মেনু পরিষেবার জন্য ব্যাকএন্ড ডাটাবেস হিসাবে একটি ক্লাউড SQL ডাটাবেস তৈরি করবেন, যা ক্লাউড রানে চলবে। যেহেতু ক্লাউড রান ক্লাউড SQL ডাটাবেসের মতো একই VPC তে থাকে না, তাই ক্লাউড রানকে একটি ব্যক্তিগত IP ঠিকানার মাধ্যমে ক্লাউড SQL এর সাথে যোগাযোগ করার অনুমতি দেওয়ার জন্য আপনাকে একটি সার্ভারলেস VPC অ্যাক্সেস সংযোগকারী কনফিগার করতে হবে।

19c7b05f35789fda.png সম্পর্কে

তুমি কি শিখবে

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

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

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

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

  1. গুগল ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। যদি আপনার ইতিমধ্যেই একটি জিমেইল বা গুগল ওয়ার্কস্পেস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png সম্পর্কে

a99b7ace416376c4.png সম্পর্কে

bd84a6d3004737c5.png সম্পর্কে

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

পরিবেশ সেটআপ

  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

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

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

  1. একটি IP ঠিকানার পরিসর বরাদ্দ করুন
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.

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

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

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. কম্পিউট ইঞ্জিন পরিষেবা অ্যাকাউন্টে ক্লাউড 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].
[...]

৫. সার্ভারলেস ভিপিসি

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

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

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 ক্রেডেনশিয়ালের মতো সংবেদনশীল তথ্য সংরক্ষণের জন্য Google আপনাকে সিক্রেট ম্যানেজার ব্যবহার করার পরামর্শ দেয়। আপনি এনভায়রনমেন্ট ভেরিয়েবল হিসেবে সিক্রেট পাস করতে পারেন অথবা ক্লাউড রানের মাধ্যমে ভলিউম হিসেবে মাউন্ট করতে পারেন

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

৮. অভিনন্দন!

অভিনন্দন, তুমি কোডল্যাব শেষ করেছ!

এরপর কি:

অন্যান্য সিম্বাল ইটস কোডল্যাবগুলি অন্বেষণ করুন:

পরিষ্কার করা

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

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

বিলিং দূর করার সবচেয়ে সহজ উপায় হল টিউটোরিয়ালের জন্য তৈরি করা প্রকল্পটি মুছে ফেলা।