Cloud Run पर Node.js ऐप्लिकेशन को PostgreSQL के लिए Cloud SQL से कनेक्ट करने का तरीका

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

Cloud SQL Node.js कनेक्टर, Node.js ऐप्लिकेशन को Cloud SQL डेटाबेस से सुरक्षित रूप से कनेक्ट करने का सबसे आसान तरीका है. Cloud Run पूरी तरह से मैनेज किया गया बिना सर्वर वाला प्लैटफ़ॉर्म है. इसकी मदद से, स्टेटलेस कंटेनर चलाए जा सकते हैं, जिन्हें एचटीटीपी अनुरोधों के ज़रिए ऐक्सेस किया जा सकता है. यह कोडलैब आपको दिखाएगा कि Cloud Run पर Node.js ऐप्लिकेशन को IAM की पुष्टि का इस्तेमाल करके, सेवा खाते के साथ PostgreSQL के लिए Cloud SQL से सुरक्षित तरीके से कनेक्ट करने का तरीका बताया जाएगा.

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

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

  • PostgreSQL डेटाबेस के लिए Cloud SQL इंस्टेंस बनाना
  • Node.js ऐप्लिकेशन को क्लाउड रन पर डिप्लॉय करें
  • Cloud SQL Node.js कनेक्टर लाइब्रेरी का इस्तेमाल करके, अपने ऐप्लिकेशन को अपने डेटाबेस से कनेक्ट करें

ज़रूरी शर्तें

  • यह लैब, Cloud Console और Cloud Shell एनवायरमेंट के बारे में अच्छी तरह से समझ लेता है.

2. शुरू करने से पहले

Cloud प्रोजेक्ट का सेटअप

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

खोज बार की दाईं ओर मौजूद आइकॉन पर क्लिक करके, Cloud Shell को चालू करें.

ecdc43ada29e91b.png

Cloud Shell से, एपीआई चालू करें:

gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
  run.googleapis.com artifactregistry.googleapis.com \
  cloudbuild.googleapis.com servicenetworking.googleapis.com

अनुमति देने के लिए कहे जाने पर, "अनुमति दें" पर क्लिक करें जारी रखने के लिए.

6356559df3eccdda.png

इस निर्देश को पूरा होने में कुछ मिनट लग सकते हैं, लेकिन आखिर में इससे मिलता-जुलता एक मैसेज दिखेगा:

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

3. सेवा खाता सेट अप करना

Cloud Run के लिए इस्तेमाल किया जाने वाला Google Cloud सेवा खाता बनाएं और उसे कॉन्फ़िगर करें, ताकि उसके पास Cloud SQL से कनेक्ट करने के लिए सही अनुमतियां हों.

  1. नया सेवा खाता बनाने के लिए, gcloud iam service-accounts create कमांड को इस तरह से चलाएं:
    gcloud iam service-accounts create quickstart-service-account \
      --display-name="Quickstart Service Account"
    
  2. आपने अभी-अभी जो Google Cloud सेवा खाता बनाया है उसमें Cloud SQL क्लाइंट की भूमिका जोड़ने के लिए, gcloud प्रोजेक्ट add-iam-policy-binding कमांड को यहां बताए गए तरीके से चलाएं. Cloud Shell में, ${GOOGLE_CLOUD_PROJECT} एक्सप्रेशन को आपके प्रोजेक्ट के नाम से बदल दिया जाएगा. अगर आपको लगता है कि यह बदलाव मैन्युअल तरीके से किया जा सकता है, तो इसे मैन्युअल तरीके से भी बदला जा सकता है.
    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
      --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
      --role="roles/cloudsql.client"
    
  3. अभी-अभी बनाए गए Google Cloud सेवा खाते में Cloud SQL इंस्टेंस उपयोगकर्ता की भूमिका जोड़ने के लिए, gcloud प्रोजेक्ट add-iam-policy-binding कमांड को यहां बताए गए तरीके से चलाएं.
    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
      --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
      --role="roles/cloudsql.instanceUser"
    
  4. अभी-अभी बनाए गए Google Cloud सेवा खाते में लॉग राइटर की भूमिका जोड़ने के लिए, gcloud प्रोजेक्ट add-iam-policy-binding कमांड को यहां बताए गए तरीके से चलाएं.
    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
      --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
    

4. Cloud SQL सेट अप करना

Cloud SQL इंस्टेंस बनाने के लिए, gcloud sql instances create कमांड चलाएं.

  • –database-version: डेटाबेस इंजन का टाइप और वर्शन. अगर किसी एपीआई की जानकारी नहीं दी जाती है, तो डिफ़ॉल्ट एपीआई का इस्तेमाल किया जाता है. मौजूदा वर्शन देखने के लिए, gcloud डेटाबेस के वर्शन का दस्तावेज़ देखें.
  • –सीपीयू: मशीन में ज़रूरी कोर की संख्या.
  • –मेमोरी: पूर्णांक की वैल्यू से पता चलता है कि मशीन में कितनी मेमोरी चाहिए. साइज़ की यूनिट दी जानी चाहिए (उदाहरण के लिए, 3072एमबी या 9 जीबी). अगर कोई इकाई तय नहीं की गई है, तो जीबी मान लिया जाता है.
  • –region: इंस्टेंस की रीजनल लोकेशन (उदाहरण के लिए: us-central1, asia-east1, us-east1).
  • –डेटाबेस-फ़्लैग: फ़्लैग सेट करने की अनुमति देता है. इस मामले में, हम पहले बनाए गए सेवा खाते का इस्तेमाल करके, Cloud Run को Cloud SQL से कनेक्ट करने के लिए cloudsql.iam_authentication को चालू कर रहे हैं.
    gcloud sql instances create quickstart-instance \
      --database-version=POSTGRES_14 \
      --cpu=1 \
      --memory=4GB \
      --region=us-central1 \
      --database-flags=cloudsql.iam_authentication=on
    

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

quickstart-instance में Cloud SQL का डेटाबेस बनाने के लिए, gcloud sql databases create कमांड चलाएं.

gcloud sql databases create quickstart_db \
  --instance=quickstart-instance

उस सेवा खाते के लिए PostgreSQL डेटाबेस उपयोगकर्ता बनाएं जिसे आपने डेटाबेस को ऐक्सेस करने के लिए पहले बनाया था.

gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
  --instance=quickstart-instance \
  --type=cloud_iam_service_account

5. आवेदन तैयार करें

ऐसा Node.js ऐप्लिकेशन तैयार करें जो एचटीटीपी अनुरोधों का जवाब देता हो.

  1. Cloud Shell में helloworld नाम की नई डायरेक्ट्री बनाएं. इसके बाद, उस डायरेक्ट्री में बदलाव करें:
    mkdir helloworld
    cd helloworld
    
  2. package.json फ़ाइल को मॉड्यूल के तौर पर शुरू करें.
    npm init -y
    npm pkg set type="module"
    npm pkg set main="index.mjs"
    npm pkg set scripts.start="node index.mjs"
    
  3. Cloud SQL Node.js कनेक्टर डिपेंडेंसी इंस्टॉल करें.
    npm install @google-cloud/cloud-sql-connector
    
  4. PostgreSQL डेटाबेस के साथ इंटरैक्ट करने के लिए, pg इंस्टॉल करें.
    npm install pg
    
  5. आने वाले http अनुरोध स्वीकार करने के लिए, Express इंस्टॉल करें.
    npm install express
    
  6. ऐप्लिकेशन कोड का इस्तेमाल करके index.mjs फ़ाइल बनाएं. यह कोड:
    • एचटीटीपी अनुरोध स्वीकार करें
    • डेटाबेस से कनेक्ट करें
    • एचटीटीपी अनुरोध के समय को डेटाबेस में सेव करता है
    • पिछले पांच अनुरोधों का समय दिखाएं
    Cloud Shell में यह कमांड चलाएं:
    cat > index.mjs << "EOF"
    import express from 'express';
    import pg from 'pg';
    import {Connector} from '@google-cloud/cloud-sql-connector';
    
    const {Pool} = pg;
    
    const connector = new Connector();
    const clientOpts = await connector.getOptions({
        instanceConnectionName: process.env.INSTANCE_CONNECTION_NAME,
        authType: 'IAM'
    });
    
    const pool = new Pool({
        ...clientOpts,
        user: process.env.DB_USER,
        database: process.env.DB_NAME
    });
    
    const app = express();
    
    app.get('/', async (req, res) => {
      await pool.query('INSERT INTO visits(created_at) VALUES(NOW())');
      const {rows} = await pool.query('SELECT created_at FROM visits ORDER BY created_at DESC LIMIT 5');
      console.table(rows); // prints the last 5 visits
      res.send(rows);
    });
    
    const port = parseInt(process.env.PORT) || 8080;
    app.listen(port, async () => {
      console.log('process.env: ', process.env);
      await pool.query(`CREATE TABLE IF NOT EXISTS visits (
        id SERIAL NOT NULL,
        created_at timestamp NOT NULL,
        PRIMARY KEY (id)
      );`);
      console.log(`helloworld: listening on port ${port}`);
    });
    
    EOF
    

यह कोड एक बेसिक वेब सर्वर बनाता है, जो PORT एनवायरमेंट वैरिएबल के ज़रिए तय किए गए पोर्ट पर ध्यान देता है. यह ऐप्लिकेशन अब डिप्लॉय किए जाने के लिए तैयार है.

6. क्लाउड रन ऐप्लिकेशन डिप्लॉय करें

अपने ऐप्लिकेशन को क्लाउड रन पर डिप्लॉय करने के लिए, नीचे दिया गया निर्देश चलाएं:

  • –region: इंस्टेंस की रीजनल लोकेशन (उदाहरण के लिए: us-central1, asia-east1, us-east1).
  • –सोर्स: डिप्लॉय किया जाने वाला सोर्स कोड. इस मामले में, ., मौजूदा फ़ोल्डर helloworld के सोर्स कोड का हवाला देता है.
  • –set-env-vars: यह ऐप्लिकेशन के इस्तेमाल किए जाने वाले एनवायरमेंट वैरिएबल को सेट करता है, ताकि ऐप्लिकेशन को Cloud SQL डेटाबेस पर ले जाया जा सके.
  • –सेवा-खाता: Cloud Run डिप्लॉयमेंट को सेवा खाते से जोड़ता है. इसके तहत, इस कोडलैब की शुरुआत में बनाए गए Cloud SQL डेटाबेस से कनेक्ट करने की अनुमतियां दी जाती हैं.
  • –पुष्टि नहीं किए गए अनुरोधों को अनुमति दें: पुष्टि नहीं किए गए अनुरोधों को अनुमति देता है, ताकि ऐप्लिकेशन को इंटरनेट से ऐक्सेस किया जा सके.
gcloud run deploy helloworld \
  --region=us-central1 \
  --source=. \
  --set-env-vars INSTANCE_CONNECTION_NAME="${GOOGLE_CLOUD_PROJECT}:us-central1:quickstart-instance" \
  --set-env-vars DB_NAME="quickstart_db" \
  --set-env-vars DB_USER="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam" \
  --service-account="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
  --allow-unauthenticated

अगर कहा जाए, तो y और Enter दबाकर पुष्टि करें कि आपको जारी रखना है:

Do you want to continue (Y/n)? y

कुछ मिनटों के बाद, ऐप्लिकेशन में आपको एक यूआरएल दिखेगा.

अपने ऐप्लिकेशन को काम करते हुए देखने के लिए यूआरएल पर जाएं. हर बार यूआरएल पर जाने या पेज को रीफ़्रेश करने पर, आपको हाल ही में हुई पांच विज़िट की जानकारी JSON के तौर पर दिखती है.

7. बधाई हो

आपने Cloud Run पर Node.js ऐप्लिकेशन डिप्लॉय किया है. यह Cloud SQL पर चलने वाले PostgreSQL डेटाबेस से कनेक्ट कर सकता है.

हमने इन विषयों के बारे में बताया:

  • PostgreSQL के लिए Cloud SQL बनाना
  • Node.js ऐप्लिकेशन को क्लाउड रन पर डिप्लॉय करना
  • Cloud SQL Node.js कनेक्टर का इस्तेमाल करके, अपने ऐप्लिकेशन को Cloud SQL से कनेक्ट करना

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

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

gcloud projects delete ${GOOGLE_CLOUD_PROJECT}