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

1. ওভারভিউ

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

19c7b05f35789fda.png

যা শিখবেন

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

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

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

  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.

4. ক্লাউড এসকিউএল সেট আপ করা হচ্ছে

ক্লাউড এসকিউএল হল একটি সম্পূর্ণ-পরিচালিত ডাটাবেস পরিষেবা যা ক্লাউডে আপনার PostgreSQL এবং MySQL রিলেশনাল ডেটাবেস সেট আপ, রক্ষণাবেক্ষণ, পরিচালনা এবং পরিচালনা করা সহজ করে তোলে। প্রতিটি ক্লাউড SQL দৃষ্টান্ত একটি ভার্চুয়াল মেশিন (VM) দ্বারা চালিত হয় যা Google ক্লাউড হোস্ট সার্ভারে চলে৷ উচ্চ প্রাপ্যতা বিকল্পটিতে প্রাথমিক VM এর মতো একই সেটআপ সহ অন্য জোনে একটি স্ট্যান্ডবাই VM অন্তর্ভুক্ত রয়েছে। ডাটাবেসটি একটি স্কেলেবল, দীর্ঘস্থায়ী নেটওয়ার্ক স্টোরেজ ডিভাইসে রাখা হয় যা একটি স্থায়ী ডিস্ক নামে পরিচিত, যা VM এর সাথে সংযুক্ত। ক্লাউড এসকিউএল ইনস্ট্যান্সের সময়কালে একটি অ্যাপ্লিকেশান যে আইপি অ্যাড্রেসের সাথে সংযোগ স্থাপন করে সেটি স্থির থাকে তা নিশ্চিত করার জন্য প্রতিটি 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. একটি এসকিউএল ব্যবহারকারী তৈরি করুন
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].
[...]

5. সার্ভারহীন ভিপিসি

সার্ভারহীন ভিপিসি অ্যাক্সেস আপনাকে সার্ভারহীন পরিবেশ যেমন ক্লাউড রান, অ্যাপ ইঞ্জিন বা ক্লাউড ফাংশন থেকে সরাসরি আপনার ভার্চুয়াল প্রাইভেট ক্লাউড নেটওয়ার্কে সংযোগ করতে দেয়। সার্ভারলেস ভিপিসি অ্যাক্সেস কনফিগার করা আপনার সার্ভারহীন পরিবেশকে অভ্যন্তরীণ DNS এবং অভ্যন্তরীণ আইপি ঠিকানাগুলি (RFC 1918 এবং RFC 6598 দ্বারা সংজ্ঞায়িত করা হয়েছে) ব্যবহার করে আপনার 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].

6. ক্লাউড রানে স্থাপন করা হচ্ছে

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

  1. ম্যাভেন ব্যবহার করে অ্যাপ্লিকেশন কম্পাইল করুন
./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

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

  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

7. পরিষেবা পরীক্ষা করা

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

8. অভিনন্দন!

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

এরপর কি:

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

পরিষ্কার করুন

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

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

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