Cloud SQL से कनेक्ट करना: Compute Engine, निजी आईपी, और Cloud SQL प्रॉक्सी

1. परिचय

पिछली बार अपडेट किया गया: 2021-05-06

कनेक्शन के बारे में सोचना

कई तरह के ऐप्लिकेशन और फ़्रेमवर्क उपलब्ध हैं. इस कोडलैब में, हम Cloud SQL Proxy का इस्तेमाल करके, Google Compute Engine में मैनेज की जा रही वर्चुअल मशीन पर चल रहे ऐप्लिकेशन से Cloud SQL को कनेक्ट करने के बारे में जानेंगे. इसके लिए, इंटरनल प्राइवेट आईपी पते का इस्तेमाल किया जाएगा. यह क्लाउड में स्टेटफ़ुल ऐप्लिकेशन चलाने का बेहद सुरक्षित तरीका है. सिर्फ़ निजी आईपी का इस्तेमाल करने और SQL प्रॉक्सी का इस्तेमाल करने से, इंटरनेट पर आपकी गतिविधि कम से कम दिखती है. SQL प्रॉक्सी, आपके लिए एसएसएल कनेक्टिविटी को मैनेज करता है.

इसका एक सामान्य उदाहरण यह है कि किसी ऑन-प्रिमाइसेस ऐप्लिकेशन को स्थानीय तौर पर चलाने के बजाय, क्लाउड में चलाने के लिए शिफ़्ट कर दिया गया है.

आपको क्या बनाने को मिलेगा

यह कोडलैब बहुत छोटा है. इसका मकसद, आपको कनेक्शन के बारे में पूरी जानकारी देना है. इसके लिए, ऐप्लिकेशन के बारे में ज़्यादा सोचने की ज़रूरत नहीं है. Cloud SQL से कनेक्ट करना, SQL डेटाबेस के किसी अन्य इंस्टेंस से कनेक्ट करने जैसा ही है. इसलिए, इस कोडलैब में बनाए गए कोड को किसी भी प्रोडक्शन ऐप्लिकेशन में इस्तेमाल किया जा सकता है.

निर्देशों में, GCP Console में काम करने का तरीका बताया जाएगा. साथ ही, CLI या ऑटोमेशन पर इस्तेमाल करने के लिए, gcloud कमांड के बराबर की कमांड भी शामिल होंगी.

इसके लिए, यह तरीका अपनाएं:

  • Cloud SQL इंस्टेंस से कनेक्शन चालू करने के लिए, कम से कम अनुमतियों वाला सेवा खाता बनाएं
  • Google Compute Engine (GCE) पर वीएम बनाना
  • Cloud SQL इंस्टेंस बनाएं. इस ट्यूटोरियल में Postgres का इस्तेमाल किया गया है. हालांकि, यह MySQL या SQL Server के लिए भी इसी तरह काम करता है
  • GCE इंस्टेंस पर Cloud SQL Proxy को डाउनलोड और चलाया जा सकता है

आपको इन चीज़ों की ज़रूरत होगी

  • ऐसा GCP खाता जिस पर आपके पास एपीआई चालू करने और सेवाएं बनाने की अनुमतियां हों

2. सेवा खाता बनाना

सेवा खातों का इस्तेमाल, आपके GCP प्रोजेक्ट में अलग-अलग सेवाओं का इस्तेमाल करने की अनुमतियां देने के लिए किया जाता है. इस कोडलैब के लिए, हमें इसकी ज़रूरत है, ताकि हम Cloud SQL प्रॉक्सी को अपने Cloud SQL इंस्टेंस से कनेक्ट करने की अनुमति दे सकें.

कंसोल पर

आईएएम सेवा खातों के पेज पर जाएं और पेज पर सबसे ऊपर मौजूद f8393a08b37a422c.png बटन पर क्लिक करें.

अपने सेवा खाते को कोई यूनीक नाम और आईडी दें. इसके बाद, बनाएं पर क्लिक करें.

अगले पेज पर, भूमिका चुनें के लिए ड्रॉप-डाउन पर क्लिक करें. "Cloud SQL" के लिए फ़िल्टर करें और Cloud SQL Client की भूमिका चुनें. जारी रखें पर क्लिक करें.

'हो गया' पर क्लिक करें.

gcloud का इस्तेमाल करके

सेवा खाता बनाएं:

gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"

इससे सेवा खाता बन जाता है. हालांकि, फ़िलहाल इसे कोई भूमिका/अनुमति असाइन नहीं की गई है. सही भूमिका असाइन करने के लिए, यह कमांड चलाएं:

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

उदाहरण के लिए, अगर आपने सेवा खाते का नाम sa-test रखा है और आपके प्रोजेक्ट का नाम my-project-test है, तो कमांड यह होगी:

gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com

3. Compute Engine वीएम बनाना

Google Compute Engine, मैनेज की जाने वाली एक सेवा है. इसमें वर्चुअल मशीन चलती है. इस वर्चुअल मशीन में हमारा वह ऐप्लिकेशन होता है जिससे हमें कनेक्ट करना है. इस कोडलैब में, हम कोई ऐप्लिकेशन नहीं बना रहे हैं. हालांकि, हम psql चलाकर कनेक्टिविटी की पुष्टि करेंगे.

कंसोल पर

Google Compute Engine पेज पर जाएं और 77c46cd1f51bed5c.png बटन पर क्लिक करें.

यहां कई विकल्प मौजूद हैं. आपको बस ये काम करने हैं:

  1. अपने इंस्टेंस को कोई नाम दें
  2. Machine type को f1-micro में बदलें
  3. पहचान और एपीआई ऐक्सेस में जाकर, Service account के लिए ड्रॉपडाउन को Default compute service account से बदलकर, पहले चरण में बनाया गया ड्रॉपडाउन चुनें.
  4. पेज पर सबसे नीचे मौजूद, बनाएं पर क्लिक करें

gcloud का इस्तेमाल करके

सेवा खाता, उस सेवा खाते का पूरा नाम होता है जिसे आपने पहले बनाया था. इसलिए, यह इस फ़ॉर्मैट में होगा: <NAME>@<PROJECT>.iam.gserviceaccount.com.

gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list

4. Cloud SQL इंस्टेंस बनाया जा रहा है

Cloud SQL, मैनेज किए गए रिलेशनल डेटाबेस की हमारी सेवा है. यह MySQL, PostgreSQL, और SQL Server के साथ काम करता है. इस कोडलैब के लिए, हम Postgres डेटाबेस बनाएंगे. हालांकि, तीनों के लिए निर्देश एक जैसे हैं.

कंसोल पर

Cloud SQL पेज पर जाएं और 241836b315e11bf5.png बटन पर क्लिक करें.

जैसा कि हमने बताया है, इस कोडलैब का ज़्यादातर हिस्सा, SQL के किसी भी वर्शन के लिए सामान्य है. हालांकि, इस कोडलैब के लिए PostgreSQL को चुनें.

  1. अपने इंस्टेंस को कोई आईडी दें
  2. डिफ़ॉल्ट उपयोगकर्ता के लिए पासवर्ड डालें.उपयोगकर्ता नाम, चुने गए डेटाबेस के लिए डिफ़ॉल्ट होगा. उदाहरण के लिए, MySQL के लिए root या PostgreSQL के लिए postgres
  3. अगर आपने अपने कंप्यूट इंस्टेंस का क्षेत्र बदला है, तो आपको यहां भी क्षेत्र बदलना चाहिए, ताकि दोनों मेल खाएं.
  4. नीचे की ओर स्क्रोल करें और show configuration options
  5. Connectivity सेक्शन को बड़ा करें
  6. Public IP विकल्प से सही का निशान हटाएं और Private IP चेकबॉक्स पर सही का निशान लगाएं
  7. पक्का करें कि जब निजी आईपी की जांच की गई थी, तब ड्रॉपडाउन में default चुना गया हो
  8. नीचे की ओर स्क्रोल करें और बनाएं पर क्लिक करें

आम तौर पर, इंस्टेंस को शुरू होने में कुछ मिनट लगते हैं.

gcloud का इस्तेमाल करके

यहां से एपीआई चालू करने के लिए, हमारे पास कोई अच्छा प्रॉम्प्ट नहीं है. इसलिए, हमें इसे मैन्युअल तरीके से चालू करना होगा

gcloud services enable servicenetworking.googleapis.com

इसके बाद, हमें अपने डिफ़ॉल्ट वीपीसी नेटवर्क पर निजी सेवा कनेक्टिविटी चालू करनी होगी. इसके लिए, सबसे पहले हमें अपने इंस्टेंस के लिए, आईपी पतों की एक तय सीमा तय करनी होगी.

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

इसके बाद, हम उस आईपी पते की रेंज को अपनी आंतरिक सेवाओं के लिए असाइन करते हैं. इसमें करीब एक मिनट लगता है.

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com  --network=default     --project=<PROJECT ID> --ranges=sql-codelab-allocation --force

आखिर में, इंस्टेंस बनाने की सुविधा फ़िलहाल सिर्फ़ बीटा वर्शन में उपलब्ध है. --no-assign-ip और --network=default की मदद से ही निजी आईपी कनेक्टिविटी को चालू किया जा सकता है. फ़िलहाल, एक ही समय पर प्राइवेट आईपी और पब्लिक आईपी, दोनों को चालू नहीं किया जा सकता. इसलिए, अगर आपको पब्लिक ऐक्सेस की ज़रूरत है, तो आपको इंस्टेंस बनाने के बाद उसमें बदलाव करना होगा. इस प्रोसेस को पूरा होने में कुछ मिनट लगते हैं.

gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>

5. Cloud SQL प्रॉक्सी को सेट अप और चालू करना

वीएम से कनेक्ट होने के बाद, हमें इंस्टेंस कनेक्शन स्ट्रिंग की ज़रूरत होगी. सबसे पहले, हम उस जानकारी को इकट्ठा करेंगे. इसके बाद, एसएसएच के ज़रिए वीएम से कनेक्ट करेंगे. इन हिस्सों के लिए निर्देश, Console बनाम gcloud के लिए उनके संबंधित सेक्शन में होंगे. इसके बाद, बाकी निर्देश वर्चुअल मशीन (वीएम) पर शेल से चलाए जाएंगे.

कंसोल पर

यहां जाएं और अपने Cloud SQL इंस्टेंस के नाम पर क्लिक करें.

थोड़ा नीचे की ओर स्क्रोल करें और Connection name को कॉपी करके रख लें, ताकि बाद में इसका इस्तेमाल किया जा सके.

Google Compute Engine इंस्टेंस की सूची वाले पेज पर जाएं. इसके बाद, अपनी वीएम वाली लाइन ढूंढें.

Connect कॉलम में, SSH बटन पर क्लिक करें. इससे एक अलग विंडो खुलेगी, जो वर्चुअल मशीन से सुरक्षित तरीके से कनेक्ट होती है.

बाकी निर्देशों के लिए, Using gcloud सेक्शन को छोड़ दें, क्योंकि यह दोनों के लिए एक जैसा है.

gcloud का इस्तेमाल करके

<INSTANCE NAME> की जगह अपने Cloud SQL इंस्टेंस का नाम डालें:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

बाद में इस्तेमाल करने के लिए, इंस्टेंस कनेक्शन का नाम सेव करें.

आपको <ZONE> को उस ज़ोन से बदलना होगा जिसका इस्तेमाल आपने इंस्टेंस बनाते समय किया था. अगर आपने इसे नहीं बदला है, तो यह us-central1-b पर सेट होगा. साथ ही, <INSTANCE_NAME> को उस नाम से बदलें जो आपने पहले दिया था.

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

वीएम से कनेक्ट होने के बाद

सबसे पहले, हमें प्रॉक्सी डाउनलोड करनी होगी. यह आपके ऑपरेटिंग सिस्टम पर निर्भर करता है. अगर आपने वीएम बनाते समय ओएस नहीं बदला है, तो यह Linux होगा. इसके लिए, इन कमांड का इस्तेमाल किया जा सकता है:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy

अगर आपने ऑपरेटिंग सिस्टम बदल दिया है, तो अपने ओएस के लिए प्रॉक्सी पाने का सही निर्देश जानने के लिए यहां जाएं.

प्रॉक्सी चलाने के लिए, Cloud SQL इंस्टेंस की जानकारी से कॉपी किया गया इंस्टेंस कनेक्शन का नाम लें. इसके बाद, इसे <INSTANCE_CONNECTION_NAME> की जगह पर डालें. यह भी ध्यान दें कि अगर Postgres db का इस्तेमाल नहीं किया जा रहा है या आपने db के डिफ़ॉल्ट पोर्ट को बदल दिया है, तो टीसीपी पोर्ट नंबर बदल सकता है.

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

6. कनेक्शन की जांच की जा रही है और काम पूरा किया जा रहा है

जैसा कि पहले बताया गया है, अगर आपको टेस्ट करने के लिए GCE इंस्टेंस में कोई ऐप्लिकेशन सेट अप करना है, तो भी कोई समस्या नहीं है. इस कोडलैब के लिए, हम psql इंस्टॉल करेंगे. साथ ही, इस क्लाइंट का इस्तेमाल करके यह पुष्टि करेंगे कि हम अपने डेटाबेस से कनेक्ट हो सकते हैं.

वर्चुअल मशीन (वीएम) पर एसएसएच सेशन से:

sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"

इसके बाद, Cloud SQL इंस्टेंस बनाते समय सेट अप किए गए डिफ़ॉल्ट उपयोगकर्ता का पासवर्ड डालें.

बधाई हो! अगर सब कुछ ठीक रहा, तो आपको Postgres प्रॉम्प्ट दिखेगा. इसके बाद, अपने डेटाबेस के लिए कमांड चलाई जा सकती हैं.

आगे क्या करना है?

यहां दिए गए कुछ कोडलैब आज़माएं...

रेफ़रंस दस्तावेज़