PostgreSQL এর জন্য ক্লাউড এসকিউএল এর সাথে ক্লাউড রানে একটি জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন স্থাপন করুন

1. ওভারভিউ

ক্লাউড রান হল একটি সম্পূর্ণরূপে পরিচালিত সার্ভারহীন প্ল্যাটফর্ম যা আপনাকে HTTP অনুরোধের মাধ্যমে আবেদনযোগ্য স্টেটলেস কন্টেনার চালাতে সক্ষম করে। এই কোডল্যাব প্রদর্শন করবে কিভাবে ক্লাউড রানে একটি Node.js অ্যাপ্লিকেশনকে PostgreSQL ডাটাবেসের জন্য একটি ক্লাউড SQL এর সাথে সংযুক্ত করতে হয়।

যা শিখবেন

এই ল্যাবে, আপনি শিখবেন কিভাবে:

  • PostgreSQL উদাহরণের জন্য একটি ক্লাউড SQL তৈরি করুন ( ব্যক্তিগত পরিষেবা সংযোগ ব্যবহার করার জন্য কনফিগার করা হয়েছে)
  • ক্লাউড রানে একটি অ্যাপ্লিকেশন স্থাপন করুন যা আপনার ক্লাউড SQL ডাটাবেসের সাথে সংযোগ করে
  • আপনার অ্যাপ্লিকেশনে কার্যকারিতা যোগ করতে জেমিনি কোড সহায়তা ব্যবহার করুন

যা শিখবেন

  • PostgreSQL উদাহরণের জন্য একটি ক্লাউড SQL তৈরি করুন ( ব্যক্তিগত পরিষেবা সংযোগ ব্যবহার করার জন্য কনফিগার করা হয়েছে)
  • ক্লাউড রানে একটি অ্যাপ্লিকেশন স্থাপন করুন যা আপনার ক্লাউড SQL ডাটাবেসের সাথে সংযোগ করে
  • আপনার অ্যাপ্লিকেশনে কার্যকারিতা যোগ করতে জেমিনি কোড সহায়তা ব্যবহার করুন

2. পূর্বশর্ত

  1. আপনার যদি ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে তবে আপনাকে অবশ্যই একটি Google অ্যাকাউন্ট তৈরি করতে হবে।
    • কাজের বা স্কুল অ্যাকাউন্টের পরিবর্তে একটি ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন। কর্মক্ষেত্র এবং স্কুল অ্যাকাউন্টগুলিতে বিধিনিষেধ থাকতে পারে যা আপনাকে এই ল্যাবের জন্য প্রয়োজনীয় APIগুলি সক্ষম করতে বাধা দেয়৷

3. প্রকল্প সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন।
  2. ক্লাউড কনসোলে বিলিং সক্ষম করুন
    • এই ল্যাবটি সম্পূর্ণ করতে ক্লাউড সংস্থানগুলিতে $1 USD-এর কম খরচ হওয়া উচিত৷
    • আপনি আরও চার্জ এড়াতে সংস্থানগুলি মুছতে এই ল্যাবের শেষে পদক্ষেপগুলি অনুসরণ করতে পারেন৷
    • নতুন ব্যবহারকারীরা $300 USD ফ্রি ট্রায়ালের জন্য যোগ্য৷
  3. একটি নতুন প্রকল্প তৈরি করুন বা একটি বিদ্যমান প্রকল্প পুনরায় ব্যবহার করতে বেছে নিন।

4. ক্লাউড শেল এডিটর খুলুন

  1. ক্লাউড শেল এডিটরে নেভিগেট করুন
  2. যদি টার্মিনালটি স্ক্রিনের নীচে প্রদর্শিত না হয় তবে এটি খুলুন:
    • হ্যামবার্গার মেনুতে ক্লিক করুন হ্যামবার্গার মেনু আইকন
    • টার্মিনাল ক্লিক করুন
    • নতুন টার্মিনালে ক্লিক করুন ক্লাউড শেল এডিটরে নতুন টার্মিনাল খুলুন
  3. টার্মিনালে, এই কমান্ড দিয়ে আপনার প্রকল্প সেট করুন:
    • বিন্যাস:
      gcloud config set project [PROJECT_ID]
      
    • উদাহরণ:
      gcloud config set project lab-project-id-example
      
    • আপনি যদি আপনার প্রকল্প আইডি মনে করতে না পারেন:
      • আপনি আপনার সমস্ত প্রকল্প আইডি এর সাথে তালিকাভুক্ত করতে পারেন:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      ক্লাউড শেল এডিটর টার্মিনালে প্রজেক্ট আইডি সেট করুন
  4. অনুমোদন করার জন্য অনুরোধ করা হলে, চালিয়ে যেতে অনুমোদন ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন
  5. আপনার এই বার্তাটি দেখতে হবে:
    Updated property [core/project].
    
    যদি আপনি একটি WARNING দেখতে পান এবং জিজ্ঞাসা করা হয় Do you want to continue (Y/N)? , তাহলে আপনি সম্ভবত প্রজেক্ট আইডি ভুলভাবে প্রবেশ করেছেন। N টিপুন, Enter টিপুন এবং আবার gcloud config set project কমান্ড চালানোর চেষ্টা করুন।

5. API সক্রিয় করুন

টার্মিনালে, APIs সক্ষম করুন:

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

অনুমোদন করার জন্য অনুরোধ করা হলে, চালিয়ে যেতে অনুমোদন ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন

এই কমান্ডটি সম্পূর্ণ হতে কয়েক মিনিট সময় নিতে পারে, তবে এটি শেষ পর্যন্ত এটির মতো একটি সফল বার্তা তৈরি করবে:

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

6. একটি পরিষেবা অ্যাকাউন্ট সেট আপ করুন৷

ক্লাউড রান দ্বারা ব্যবহার করার জন্য একটি Google ক্লাউড পরিষেবা অ্যাকাউন্ট তৈরি এবং কনফিগার করুন যাতে এটি ক্লাউড SQL এর সাথে সংযোগ করার জন্য সঠিক অনুমতি পায়৷

  1. একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরি করতে নিম্নরূপ gcloud iam service-accounts create কমান্ড চালান:
    gcloud iam service-accounts create quickstart-service-account \
      --display-name="Quickstart Service Account"
    
  2. আপনি এইমাত্র তৈরি করা Google ক্লাউড পরিষেবা অ্যাকাউন্টে লগ রাইটার ভূমিকা যোগ করতে নিম্নরূপ gcloud প্রজেক্ট অ্যাড-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. ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করুন

  1. প্রাইভেট সার্ভিস কানেক্টের মাধ্যমে ক্লাউড রান থেকে ক্লাউড এসকিউএল-এ নেটওয়ার্ক সংযোগের অনুমতি দিতে একটি পরিষেবা সংযোগ নীতি তৈরি করুন
    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. একটি ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করতে 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 মধ্যে একটি ক্লাউড এসকিউএল ডাটাবেস তৈরি করতে gcloud sql databases create কমান্ডটি চালান।
    gcloud sql databases create quickstart_db \
      --instance=quickstart-instance
    

8. আবেদন প্রস্তুত করুন

একটি Node.js অ্যাপ্লিকেশন প্রস্তুত করুন যা HTTP অনুরোধে সাড়া দেয়।

  1. ক্লাউড শেলে 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. ইনকামিং HTTP অনুরোধগুলি গ্রহণ করতে এক্সপ্রেস ইনস্টল করুন।
    npm install express
    
  5. অ্যাপ্লিকেশন কোড সহ একটি index.mjs ফাইল তৈরি করুন। এই কোড করতে সক্ষম:
    • HTTP অনুরোধ গ্রহণ করুন
    • ডাটাবেসের সাথে সংযোগ করুন
    • ডাটাবেসে HTTP অনুরোধের সময় সংরক্ষণ করুন
    • শেষ পাঁচটি অনুরোধের সময় ফেরত দিন
    ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
    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
    

এই কোডটি একটি মৌলিক ওয়েব সার্ভার তৈরি করে যা পোর্ট পরিবেশ পরিবর্তনশীল দ্বারা সংজ্ঞায়িত পোর্টে শোনে। অ্যাপ্লিকেশন এখন স্থাপন করার জন্য প্রস্তুত.

9. ক্লাউড রানে অ্যাপ্লিকেশনটি স্থাপন করুন

  1. আপনি যে ক্লাউড রান পরিষেবাটি তৈরি করতে চলেছেন তার জন্য ক্লাউড রান পরিষেবা অ্যাকাউন্টে নেটওয়ার্ক ব্যবহারকারীর ভূমিকা যুক্ত করতে নিম্নরূপ gcloud প্রকল্পের 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. ক্লাউড রানে আপনার অ্যাপ্লিকেশন স্থাপন করতে নীচের কমান্ডটি চালান:
    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
    

কয়েক মিনিট পরে, অ্যাপ্লিকেশনটি আপনাকে দেখার জন্য একটি URL প্রদান করবে।

আপনার অ্যাপ্লিকেশানটি কার্যকর দেখতে URL এ নেভিগেট করুন৷ প্রতিবার আপনি URL-এ যান বা পৃষ্ঠা রিফ্রেশ করেন, আপনি JSON হিসাবে পাঁচটি সাম্প্রতিক ভিজিট দেখতে পাবেন।

10. অভিনন্দন

এই ল্যাবে, আপনি নিম্নলিখিতগুলি কীভাবে করতে হয় তা শিখেছেন:

  • PostgreSQL উদাহরণের জন্য একটি ক্লাউড SQL তৈরি করুন ( ব্যক্তিগত পরিষেবা সংযোগ ব্যবহার করার জন্য কনফিগার করা হয়েছে)
  • ক্লাউড রানে একটি অ্যাপ্লিকেশন স্থাপন করুন যা আপনার ক্লাউড SQL ডাটাবেসের সাথে সংযোগ করে
  • আপনার অ্যাপ্লিকেশনে কার্যকারিতা যোগ করতে জেমিনি কোড সহায়তা ব্যবহার করুন

পরিষ্কার করুন

এই টিউটোরিয়ালে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, হয় সংস্থানগুলি রয়েছে এমন প্রকল্পটি মুছুন, অথবা প্রকল্পটি রাখুন এবং পৃথক সংস্থানগুলি মুছুন৷ আপনি যদি পুরো প্রকল্পটি মুছতে চান, আপনি চালাতে পারেন:

gcloud projects delete ${GOOGLE_CLOUD_PROJECT}