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

১. সংক্ষিপ্ত বিবরণ

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

আপনি যা শিখবেন

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

  • একটি AlloyDB ইনস্ট্যান্স তৈরি করুন (যা প্রাইভেট সার্ভিস কানেক্ট ব্যবহার করার জন্য কনফিগার করা থাকবে)।
  • ক্লাউড রান-এ এমন একটি অ্যাপ্লিকেশন ডেপ্লয় করুন যা আপনার AlloyDB ইনস্ট্যান্সের সাথে সংযুক্ত হয়।

২. পূর্বশর্তসমূহ

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

৩. প্রজেক্ট সেটআপ

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

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

  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. অনুমোদন করতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন
  5. আপনি এই বার্তাটি দেখতে পাবেন:
    Updated property [core/project].
    
    যদি আপনি একটি WARNING দেখতে পান এবং আপনাকে Do you want to continue (Y/N)? জিজ্ঞাসা করা হয়, তাহলে সম্ভবত আপনি প্রজেক্ট আইডি ভুলভাবে প্রবেশ করিয়েছেন। N চাপুন, Enter চাপুন এবং gcloud config set project কমান্ডটি আবার চালানোর চেষ্টা করুন।

৫. এপিআই সক্রিয় করুন

টার্মিনালে, এপিআইগুলো সক্রিয় করুন:

gcloud services enable \
  compute.googleapis.com \
  alloydb.googleapis.com \
  run.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  cloudaicompanion.googleapis.com

অনুমোদন করতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন

এই কমান্ডটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে, কিন্তু অবশেষে এটি এইটির মতো একটি সফলতার বার্তা দেবে:

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

৬. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

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 পরিষেবা অ্যাকাউন্টে Service Usage Consumer রোলটি যোগ করতে, নিচের মতো করে 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"
    

৭. AlloyDB ডেটাবেস তৈরি করুন

  1. একটি ক্লাউড 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. একটি ক্লাউড 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. PSC সার্ভিস অ্যাটাচমেন্ট লিঙ্কটি পেতে এবং সেটিকে একটি ভেরিয়েবলে এক্সপোর্ট করতে 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

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

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

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

  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 প্রদান করবে।

আপনার অ্যাপ্লিকেশনটি কার্যকরভাবে দেখতে ইউআরএল-টিতে যান। প্রতিবার যখন আপনি ইউআরএল-টি ভিজিট করবেন বা পেজটি রিফ্রেশ করবেন, তখন আপনি সর্বশেষ পাঁচটি ভিজিটের তথ্য JSON ফরম্যাটে দেখতে পাবেন।

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

আপনার অ্যাপ্লিকেশনটি কার্যকরভাবে দেখতে ইউআরএল-টিতে যান। প্রতিবার যখন আপনি ইউআরএল-টি ভিজিট করবেন বা পেজটি রিফ্রেশ করবেন, তখন আপনি সর্বশেষ পাঁচটি ভিজিটের তথ্য JSON ফরম্যাটে দেখতে পাবেন।

১০. অভিনন্দন

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

  • একটি AlloyDB ইনস্ট্যান্স তৈরি করুন (যা প্রাইভেট সার্ভিস কানেক্ট ব্যবহার করার জন্য কনফিগার করা থাকবে)।
  • ক্লাউড রান-এ এমন একটি অ্যাপ্লিকেশন ডেপ্লয় করুন যা আপনার AlloyDB ইনস্ট্যান্সের সাথে সংযুক্ত হয়।

পরিষ্কার করা

ক্লাউড এসকিউএল-এর কোনো ফ্রি টিয়ার নেই এবং এটি ব্যবহার করতে থাকলে আপনাকে চার্জ করা হবে। অতিরিক্ত চার্জ এড়ানোর জন্য আপনি আপনার ক্লাউড প্রজেক্টটি ডিলিট করে দিতে পারেন।

পরিষেবাটি ব্যবহার না করা হলে ক্লাউড রান কোনো চার্জ না করলেও, আর্টিফ্যাক্ট রেজিস্ট্রি-তে কন্টেইনার ইমেজ সংরক্ষণের জন্য আপনাকে চার্জ করা হতে পারে। আপনার ক্লাউড প্রজেক্টটি ডিলিট করে দিলে সেই প্রজেক্টের মধ্যে ব্যবহৃত সমস্ত রিসোর্সের বিলিং বন্ধ হয়ে যায়।

আপনি চাইলে প্রজেক্টটি মুছে ফেলতে পারেন:

gcloud projects delete $GOOGLE_CLOUD_PROJECT

আপনি আপনার ক্লাউডশেল ডিস্ক থেকে অপ্রয়োজনীয় রিসোর্সগুলো মুছে ফেলতে চাইতে পারেন। আপনি যা করতে পারেন:

  1. কোডল্যাব প্রজেক্ট ডিরেক্টরিটি মুছে ফেলুন:
    rm -rf ~/task-app
    
  2. সতর্কীকরণ! এই পরবর্তী কাজটি পূর্বাবস্থায় ফেরানো যাবে না! জায়গা খালি করার জন্য আপনি যদি আপনার ক্লাউড শেলের সবকিছু মুছে ফেলতে চান, তাহলে আপনি আপনার সম্পূর্ণ হোম ডিরেক্টরিটি ডিলিট করে দিতে পারেন। খেয়াল রাখবেন, আপনি যা কিছু রাখতে চান তা যেন অন্য কোথাও সেভ করা থাকে।
    sudo rm -rf $HOME
    

শিখতে থাকুন