Cloud SQL for PostgreSQL की मदद से, Cloud Run में JavaScript ऐप्लिकेशन को डिप्लॉय करना

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

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

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

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

  • Private Service Connect का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया, PostgreSQL के लिए Cloud SQL इंस्टेंस बनाएं
  • Cloud Run पर ऐसा ऐप्लिकेशन डिप्लॉय करना जो आपके Cloud SQL डेटाबेस से कनेक्ट हो
  • अपने ऐप्लिकेशन में फ़ंक्शन जोड़ने के लिए, Gemini Code Assist का इस्तेमाल करना

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

  • Private Service Connect का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया, PostgreSQL के लिए Cloud SQL इंस्टेंस बनाएं
  • Cloud Run पर ऐसा ऐप्लिकेशन डिप्लॉय करना जो आपके Cloud SQL डेटाबेस से कनेक्ट हो
  • अपने ऐप्लिकेशन में फ़ंक्शन जोड़ने के लिए, Gemini Code Assist का इस्तेमाल करना

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

  1. अगर आपके पास पहले से कोई Google खाता नहीं है, तो आपको Google खाता बनाना होगा.
    • ऑफ़िस या स्कूल वाले खाते के बजाय, निजी खाते का इस्तेमाल करें. ऑफ़िस और स्कूल वाले खातों पर ऐसी पाबंदियां हो सकती हैं जिनकी वजह से, इस लैब के लिए ज़रूरी एपीआई चालू नहीं किए जा सकते.

3. प्रोजेक्ट सेटअप करना

  1. Google Cloud Console में साइन इन करें.
  2. Cloud Console में बिलिंग चालू करें.
    • इस लैब को पूरा करने के लिए, Cloud के संसाधनों पर 1 डॉलर से कम खर्च करना पड़ेगा.
    • आगे कोई शुल्क न देना पड़े, इसके लिए संसाधनों को मिटाएं. इसके लिए, इस लैब के आखिर में दिया गया तरीका अपनाएं.
    • नए उपयोगकर्ताओं को 300 डॉलर का मुफ़्त में आज़माने की सुविधा मिलती है.
  3. नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें.

4. Cloud Shell एडिटर खोलना

  1. Cloud Shell एडिटर पर जाएं
  2. अगर टर्मिनल, स्क्रीन पर सबसे नीचे नहीं दिखता है, तो उसे खोलें:
    • हैमबर्गर मेन्यू हैमबर्गर मेन्यू का आइकॉन पर क्लिक करें
    • Terminal पर क्लिक करें
    • नया टर्मिनल पर क्लिक करेंCloud Shell एडिटर में नया टर्मिनल खोलना
  3. टर्मिनल में, इस कमांड की मदद से अपना प्रोजेक्ट सेट करें:
    • फ़ॉर्मैट:
      gcloud config set project [PROJECT_ID]
      
    • उदाहरण:
      gcloud config set project lab-project-id-example
      
    • अगर आपको अपना प्रोजेक्ट आईडी याद नहीं है, तो:
      • अपने सभी प्रोजेक्ट आईडी की सूची देखने के लिए:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      Cloud Shell Editor टर्मिनल में प्रोजेक्ट आईडी सेट करना
  4. अगर आपसे अनुमति देने के लिए कहा जाए, तो जारी रखने के लिए अनुमति दें पर क्लिक करें. Cloud Shell को अनुमति देने के लिए क्लिक करें
  5. आपको यह मैसेज दिखेगा:
    Updated property [core/project].
    
    अगर आपको WARNING दिखता है और आपसे Do you want to continue (Y/N)? पूछा जाता है, तो हो सकता है कि आपने प्रोजेक्ट आईडी गलत डाला हो. N दबाएं, Enter दबाएं, और gcloud config set project कमांड को फिर से चलाने की कोशिश करें.

5. एपीआई चालू करें

टर्मिनल में, एपीआई चालू करें:

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

अगर आपसे अनुमति देने के लिए कहा जाए, तो जारी रखने के लिए अनुमति दें पर क्लिक करें. Cloud Shell को अनुमति देने के लिए क्लिक करें

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

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

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

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 सेवा खाता अभी बनाया है उसमें लॉग लेखक की भूमिका जोड़ने के लिए, gcloud projects 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"
    

7. Cloud SQL इंस्टेंस बनाना

  1. Private Service Connect की मदद से, Cloud Run से Cloud SQL को नेटवर्क से कनेक्ट करने की अनुमति देने के लिए, सेवा कनेक्शन की नीति बनाएं
    gcloud network-connectivity service-connection-policies create quickstart-policy \
        --network=default \
        --project=${GOOGLE_CLOUD_PROJECT} \
        --region=us-central1 \
        --service-class=google-cloud-sql \
        --subnets=https://www.googleapis.com/compute/v1/projects/${GOOGLE_CLOUD_PROJECT}/regions/us-central1/subnetworks/default
    
  2. अपने डेटाबेस के लिए यूनीक पासवर्ड जनरेट करना
    export DB_PASSWORD=$(openssl rand -base64 20)
    
  3. Cloud SQL इंस्टेंस बनाने के लिए, gcloud sql instances create कमांड चलाएं
    gcloud sql instances create quickstart-instance \
        --project=${GOOGLE_CLOUD_PROJECT} \
        --root-password=${DB_PASSWORD} \
        --database-version=POSTGRES_17 \
        --tier=db-perf-optimized-N-2 \
        --region=us-central1 \
        --ssl-mode=ENCRYPTED_ONLY \
        --no-assign-ip \
        --enable-private-service-connect \
        --psc-auto-connections=network=projects/${GOOGLE_CLOUD_PROJECT}/global/networks/default
    

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

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

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

एचटीटीपी अनुरोधों का जवाब देने वाला 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. PostgreSQL डेटाबेस के साथ इंटरैक्ट करने के लिए, pg इंस्टॉल करें.
    npm install pg
    
  4. इनकमिंग एचटीटीपी अनुरोध स्वीकार करने के लिए, एक्सप्रेस इंस्टॉल करें.
    npm install express
    
  5. ऐप्लिकेशन कोड के साथ index.mjs फ़ाइल बनाएं. इस कोड से ये काम किए जा सकते हैं:
    • एचटीटीपी अनुरोध स्वीकार करना
    • डेटाबेस से कनेक्ट करना
    • डेटाबेस में एचटीटीपी अनुरोध का समय सेव करना
    • पिछले पांच अनुरोधों का समय दिखाता है
    Cloud Shell में यह कमांड चलाएं:
    cat > index.mjs << "EOF"
    import express from 'express';
    import pg from 'pg';
    const { Pool } = pg;
    
    const pool = new Pool({
      host: process.env.DB_HOST,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      ssl: {
        require: true,
        rejectUnauthorized: false, // required for self-signed certs
        // https://node-postgres.com/features/ssl#self-signed-cert
      }
    });
    
    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 एनवायरमेंट वैरिएबल से तय किए गए पोर्ट पर सुनता है. ऐप्लिकेशन अब डिप्लॉय करने के लिए तैयार है.

9. ऐप्लिकेशन को Cloud Run पर डिप्लॉय करना

  1. आपको जो Cloud Run सेवा बनानी है उसके लिए, Cloud Run सेवा खाते में नेटवर्क उपयोगकर्ता की भूमिका जोड़ने के लिए, gcloud projects add-iam-policy-binding कमांड को इस तरह चलाएं.
    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
    --member "serviceAccount:service-$(gcloud projects describe ${GOOGLE_CLOUD_PROJECT} --format="value(projectNumber)")@serverless-robot-prod.iam.gserviceaccount.com" \
    --role "roles/compute.networkUser"
    
  1. अपने ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने के लिए, यह कमांड चलाएं:
    gcloud run deploy helloworld \
      --region=us-central1 \
      --source=. \
      --set-env-vars DB_NAME="quickstart_db" \
      --set-env-vars DB_USER="postgres" \
      --set-env-vars DB_PASSWORD=${DB_PASSWORD} \
      --set-env-vars DB_HOST="$(gcloud sql instances describe quickstart-instance --project=${GOOGLE_CLOUD_PROJECT} --format='value(settings.ipConfiguration.pscConfig.pscAutoConnections.ipAddress)')" \
      --service-account="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
      --network=default \
      --subnet=default \
      --allow-unauthenticated
    
  2. अगर कहा जाए, तो जारी रखने के लिए Y और Enter दबाएं:
    Do you want to continue (Y/n)? Y
    

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

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

10. बधाई हो

इस लैब में, आपने ये काम करने का तरीका जाना है:

  • Private Service Connect का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया, PostgreSQL के लिए Cloud SQL इंस्टेंस बनाएं
  • Cloud Run पर ऐसा ऐप्लिकेशन डिप्लॉय करना जो आपके Cloud SQL डेटाबेस से कनेक्ट हो
  • अपने ऐप्लिकेशन में फ़ंक्शन जोड़ने के लिए, Gemini Code Assist का इस्तेमाल करना

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

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

gcloud projects delete ${GOOGLE_CLOUD_PROJECT}