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

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

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

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

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

  • AlloyDB इंस्टेंस बनाएं (Private Service Connect का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया)
  • Cloud Run पर ऐसा ऐप्लिकेशन डिप्लॉय करना जो आपके AlloyDB इंस्टेंस से कनेक्ट हो
  • अपने ऐप्लिकेशन में फ़ंक्शन जोड़ने के लिए, 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 \
  alloydb.googleapis.com \
  run.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  cloudaicompanion.googleapis.com

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

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

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

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

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

  1. नया सेवा खाता बनाने के लिए, gcloud iam service-accounts create कमांड को इस तरह चलाएं:
    gcloud iam service-accounts create quickstart-service-account \
      --display-name="Quickstart Service Account"
    
  2. आपने जो Google Cloud सेवा खाता अभी बनाया है उसमें AlloyDB डेटाबेस उपयोगकर्ता की भूमिका जोड़ने के लिए, 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/alloydb.databaseUser"
    
  3. आपने जो 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/serviceusage.serviceUsageConsumer"
    
  4. आपने जो 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. AlloyDB इंस्टेंस बनाना

  1. Cloud SQL इंस्टेंस बनाने के लिए, gcloud alloydb clusters create कमांड चलाएं
    gcloud alloydb clusters create quickstart-cluster \
      --password=$(openssl rand -base64 20) \
      --region=us-central1 \
      --project=${GOOGLE_CLOUD_PROJECT} \
      --enable-private-service-connect \
      --database-version=POSTGRES_16
    

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

  1. Cloud SQL इंस्टेंस बनाने के लिए, gcloud alloydb instances create कमांड चलाएं
    gcloud alloydb instances create quickstart-instance \
      --project=${GOOGLE_CLOUD_PROJECT} \
      --instance-type=PRIMARY \
      --cpu-count=2 \
      --region=us-central1 \
      --cluster=quickstart-cluster \
      --allowed-psc-projects=${GOOGLE_CLOUD_PROJECT} \
      --database-flags=alloydb.iam_authentication=on
    
  2. पीएससी सेवा के अटैचमेंट का लिंक पाने और उसे किसी वैरिएबल में एक्सपोर्ट करने के लिए, gcloud alloydb instances describe कमांड चलाएं
    export SERVICE_ATTACHMENT=$(gcloud alloydb instances describe quickstart-instance \
        --cluster=quickstart-cluster --region=us-central1 \
        --format="value(pscInstanceConfig.serviceAttachmentLink)")
    
  3. gcloud compute addresses create quickstart-address \
      --region=us-central1 \
      --subnet=default
    
  4. gcloud compute forwarding-rules create quickstart-endpoint \
      --region=us-central1 \
      --network=default \
      --address=quickstart-address \
      --target-service-attachment=${SERVICE_ATTACHMENT}
    

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

gcloud alloydb users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
  --cluster=quickstart-cluster \
  --region=us-central1 \
  --type=IAM_BASED \
  --superuser=true

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. Google Cloud Auth लाइब्रेरी इंस्टॉल करें.
    npm install google-auth-library
    
  4. PostgreSQL डेटाबेस के साथ इंटरैक्ट करने के लिए, pg इंस्टॉल करें.
    npm install pg
    
  5. इनकमिंग एचटीटीपी अनुरोध स्वीकार करने के लिए, एक्सप्रेस इंस्टॉल करें.
    npm install express
    
  6. ऐप्लिकेशन कोड के साथ index.mjs फ़ाइल बनाएं. इस कोड से ये काम किए जा सकते हैं:
    • एचटीटीपी अनुरोध स्वीकार करना
    • डेटाबेस से कनेक्ट करना
    • डेटाबेस में एचटीटीपी अनुरोध का समय सेव करना
    • पिछले पांच अनुरोधों का समय दिखाता है
    Cloud Shell में यह कमांड चलाएं:
    cat > index.mjs << "EOF"
    import express from 'express';
    import pg from 'pg';
    const { Pool } = pg;
    import {GoogleAuth} from 'google-auth-library';
    
    const auth = new GoogleAuth({
      scopes: ['https://www.googleapis.com/auth/alloydb.login'],
    });
    
    const pool = new Pool({
      host: process.env.DB_HOST,
      user: process.env.DB_USER,
      password: async () => {
        return await auth.getAccessToken();
      },
      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 के तौर पर सबसे हाल की पांच विज़िट दिखेंगी.

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

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

10. बधाई हो

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

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

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

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

gcloud projects delete ${GOOGLE_CLOUD_PROJECT}