Cloud Run से Private CloudSQL से कनेक्ट करना

1. खास जानकारी

इस लैब में, आपको Cymbal Eagles की मेन्यू सेवा सेट करनी होगी, ताकि मेन्यू आइटम जोड़ने, अपडेट करने, मिटाने, और लिस्ट करने के लिए RESTful API को दिखाया जा सके. आपको मेन्यू सेवा के लिए बैकएंड डेटाबेस के तौर पर Cloud SQL डेटाबेस बनाना होगा, जो Cloud Run में चलेगा. Cloud Run उसी VPC में नहीं है जिसमें Cloud SQL डेटाबेस मौजूद है. इसलिए, आपको बिना सर्वर वाला VPC ऐक्सेस कनेक्टर कॉन्फ़िगर करना होगा, ताकि Cloud Run किसी निजी आईपी पते के ज़रिए, Cloud SQL के साथ इंटरैक्ट कर सके.

19c7b05f35789fda.png

आपको क्या सीखने को मिलेगा

इस लैब में, आपको इन कामों को करने का तरीका पता चलेगा:

  • निजी VPC नेटवर्क कॉन्फ़िगर करें
  • निजी Postgres Cloud SQL का डेटाबेस बनाएं
  • CloudRun को निजी VPC से कनेक्ट करना
  • Cloud Run पर ऐसी सेवा डिप्लॉय करें जो Cloud SQL डेटाबेस से कनेक्ट हो

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेटअप करें

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा.
  • आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

एनवायरमेंट का सेटअप

  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. निजी ऐक्सेस कॉन्फ़िगर करें

निजी सेवाओं का ऐक्सेस, आपके VPC नेटवर्क और उस Google Cloud VPC नेटवर्क के बीच VPC पीयरिंग लिंक के तौर पर दिया जाता है जहां आपका Cloud SQL इंस्टेंस मौजूद होता है. निजी कनेक्शन, आपके VPC नेटवर्क में वीएम इंस्टेंस और उन सेवाओं को अनुमति देता है जिनका इस्तेमाल सिर्फ़ इंटरनल आईपी पतों के ज़रिए बातचीत करने के लिए किया जाता है. निजी सेवाओं को ऐक्सेस करने पर मिलने वाली सेवाओं को ऐक्सेस करने के लिए, वीएम इंस्टेंस को इंटरनेट कनेक्टिविटी या बाहरी आईपी पतों की ज़रूरत नहीं होती.

  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. Cloud SQL सेट अप करना

Cloud SQL पूरी तरह से मैनेज की गई डेटाबेस सेवा है. इसकी मदद से, क्लाउड में PostgreSQL और MySQL के रिलेशनल डेटाबेस को सेट अप करना, मैनेज करना, मैनेज करना, और मैनेज करना आसान हो जाता है. Cloud SQL का हर इंस्टेंस, एक वर्चुअल मशीन (वीएम) से चलाया जाता है, जो Google Cloud होस्ट सर्वर पर चलती है. ज़्यादा उपलब्धता वाले विकल्प में, अन्य ज़ोन में स्टैंडबाय वीएम भी शामिल होती है. इसका सेट अप, मुख्य वीएम जैसा होता है. डेटाबेस को, लंबे समय तक चलने वाले नेटवर्क स्टोरेज डिवाइस पर रखा जाता है. इसे परसिस्टेंट डिस्क कहा जाता है, जो वीएम से कनेक्ट होती है. हर वीएम को एक स्टैटिक आईपी पता असाइन किया जाता है, ताकि यह पक्का किया जा सके कि Cloud SQL इंस्टेंस के दौरान ऐप्लिकेशन जिस आईपी पते से कनेक्ट हो वह एक ही रहे.

219cb722c2dd1b82.png

आपको निजी आईपी पते के साथ Postgres Cloud SQL का डेटाबेस बनाना होगा.

डेटाबेस और उपयोगकर्ता बनाना

  1. निजी आईपी का इस्तेमाल करने के लिए, Postgres Cloud SQL का इंस्टेंस बनाएं
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 क्लाइंट की भूमिका जोड़ना
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. सर्वर के बिना VPC

बिना सर्वर वाले VPC ऐक्सेस की मदद से, Cloud Run, App Engine या Cloud Functions जैसे बिना सर्वर वाले एनवायरमेंट की मदद से, सीधे वर्चुअल प्राइवेट क्लाउड नेटवर्क से कनेक्ट किया जा सकता है. सर्वर के बिना VPC ऐक्सेस करने की सुविधा कॉन्फ़िगर करने से, आपके बिना सर्वर वाले एनवायरमेंट को इंटरनल डीएनएस और इंटरनल आईपी पतों (जैसा कि आरएफ़सी 1918 और आरएफ़सी 6598 की बताई गई जानकारी) का इस्तेमाल करके, VPC नेटवर्क को अनुरोध भेजने की अनुमति मिलती है. इन अनुरोधों के लिए रिस्पॉन्स, आपके इंटरनल नेटवर्क का भी इस्तेमाल करते हैं.

Cloud SQL से कनेक्ट करने के लिए, आपको Cloud Run सेवा के लिए, सर्वर के बिना VPC ऐक्सेस वाला कनेक्टर बनाना होगा.

19c7b05f35789fda.png

  1. Cloud 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. Cloud Run में डिप्लॉय किया जा रहा है

Cloud Run के लिए Docker इमेज बनाएं और उसे डिप्लॉय करें. साथ ही, Cloud SQL डेटाबेस को ऐक्सेस करने के लिए, Cloud Run को सर्वर के बिना VPC कनेक्टर से कनेक्ट करें.

  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

Google का सुझाव है कि आप एसक्यूएल क्रेडेंशियल जैसी संवेदनशील जानकारी सेव करने के लिए, सीक्रेट मैनेजर का इस्तेमाल करें. Cloud Run की मदद से, एनवायरमेंट वैरिएबल के तौर पर सीक्रेट पास किए जा सकते हैं या वॉल्यूम के तौर पर माउंट किया जा सकता है.

  1. स्टोर मेन्यू सेवा का यूआरएल:
MENU_SERVICE_URL=$(gcloud run services describe menu-service \
  --platform managed \
  --region $REGION \
  --format=json | jq \
  --raw-output ".status.url")
  1. मेन्यू सेवा के यूआरएल की पुष्टि करें
echo $MENU_SERVICE_URL

आउटपुट का उदाहरण

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

7. सेवा की जांच करना

  1. पोस्ट अनुरोध भेजकर नया मेन्यू आइटम बनाएं:
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 Eagles के अन्य कोडलैब एक्सप्लोर करें:

व्यवस्थित करें

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते पर शुल्क न लगे. इसके लिए, उस प्रोजेक्ट को मिटा दें जिसमें संसाधन शामिल हैं या प्रोजेक्ट को बनाए रखें और अलग-अलग संसाधनों को मिटाएं.

प्रोजेक्ट मिटाया जा रहा है

बिलिंग हटाने का सबसे आसान तरीका, ट्यूटोरियल के लिए बनाए गए प्रोजेक्ट को मिटाना है.