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

1. परिचय

पिछली बार अपडेट किए जाने की तारीख: 06-05-2021

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

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

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

आपको क्या बनाना होगा

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

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

इसके अलग-अलग चरण हैं:

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

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

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

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

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

कंसोल पर

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

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

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

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

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 बटन पर क्लिक करें.

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

  1. अपने इंस्टेंस को आईडी दें
  2. डिफ़ॉल्ट उपयोगकर्ता के लिए पासवर्ड डालें (चुने गए DB के लिए उपयोगकर्ता नाम डिफ़ॉल्ट रूप से सेट होगा. उदाहरण के लिए, 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

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

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

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

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

./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 प्रॉम्प्ट मिलेगा. साथ ही, आपके पास अपने डेटाबेस के लिए कमांड चलाने की सुविधा होगी.

आगे क्या होगा?

इनमें से कुछ कोडलैब देखें...

पहचान फ़ाइलें