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

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

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

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

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

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

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

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

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

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

4. Cloud Shell Editor खोलें

  1. Cloud Shell Editor पर जाएं
  2. अगर टर्मिनल स्क्रीन पर सबसे नीचे नहीं दिखता है, तो इसे खोलें:
    • हैमबर्गर मेन्यू हैमबर्गर मेन्यू का आइकॉन पर क्लिक करें
    • टर्मिनल पर क्लिक करें
    • नया टर्मिनलCloud Shell Editor में नया टर्मिनल खोलना पर क्लिक करें
  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 सेवा खाते में Log Writer की भूमिका जोड़ने के लिए, 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. आने वाले एचटीटीपी अनुरोधों को स्वीकार करने के लिए, Express इंस्टॉल करें.
    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 पर डिप्लॉय करने के लिए, यहां दी गई कमांड चलाएं:
    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 इंस्टेंस से कनेक्ट हो

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

Cloud SQL का कोई मुफ़्त टियर नहीं है. इसका इस्तेमाल जारी रखने पर, आपसे शुल्क लिया जाएगा. अतिरिक्त शुल्क से बचने के लिए, अपना Cloud प्रोजेक्ट मिटाया जा सकता है.

Cloud Run, सेवा का इस्तेमाल न किए जाने पर कोई शुल्क नहीं लेता. हालांकि, Artifact Registry में कंटेनर इमेज सेव करने के लिए आपसे शुल्क लिया जा सकता है. Cloud प्रोजेक्ट मिटाने पर, उस प्रोजेक्ट में इस्तेमाल किए गए सभी संसाधनों के लिए बिलिंग बंद हो जाती है.

अगर आपको प्रोजेक्ट मिटाना है, तो यह तरीका अपनाएं:

gcloud projects delete $GOOGLE_CLOUD_PROJECT

आपके पास, Cloud Shell डिस्क से ग़ैर-ज़रूरी संसाधन मिटाने का विकल्प भी होता है. आप:

  1. कोड लैब प्रोजेक्ट की डायरेक्ट्री मिटाएं:
    rm -rf ~/task-app
    
  2. चेतावनी! इस कार्रवाई को पहले जैसा नहीं किया जा सकता! अगर आपको Cloud Shell पर मौजूद सभी फ़ाइलें मिटाकर जगह खाली करनी है, तो अपनी पूरी होम डायरेक्ट्री मिटाएं. ध्यान रखें कि आपको जो भी डेटा रखना है वह किसी दूसरी जगह पर सेव हो.
    sudo rm -rf $HOME
    

सीखते रहें