১. সংক্ষিপ্ত বিবরণ
আপনার Node.js অ্যাপ্লিকেশনকে আপনার Cloud SQL ডেটাবেসের সাথে নিরাপদে সংযুক্ত করার সবচেয়ে সহজ উপায় হলো Cloud SQL Node.js কানেক্টর । Cloud Run একটি সম্পূর্ণভাবে পরিচালিত সার্ভারলেস প্ল্যাটফর্ম যা আপনাকে স্টেটলেস কন্টেইনার চালাতে সক্ষম করে, যেগুলোকে HTTP অনুরোধের মাধ্যমে আহ্বান করা যায়। এই কোডল্যাবটি দেখাবে কিভাবে IAM অথেনটিকেশন ব্যবহার করে একটি সার্ভিস অ্যাকাউন্টের মাধ্যমে Cloud Run-এ থাকা একটি Node.js অ্যাপ্লিকেশনকে Cloud SQL for PostgreSQL ডেটাবেসের সাথে নিরাপদে সংযুক্ত করা যায়।
আপনি যা শিখবেন
এই ল্যাবে, আপনারা নিম্নলিখিত বিষয়গুলো করতে শিখবেন:
- PostgreSQL ডেটাবেসের জন্য একটি ক্লাউড SQL ইনস্ট্যান্স তৈরি করুন
- ক্লাউড রানে একটি Node.js অ্যাপ্লিকেশন ডিপ্লয় করুন
- Cloud SQL Node.js Connector লাইব্রেরি ব্যবহার করে আপনার অ্যাপ্লিকেশনকে ডাটাবেসের সাথে সংযুক্ত করুন।
পূর্বশর্ত
- এই ল্যাবটি করার জন্য ক্লাউড কনসোল এবং ক্লাউড শেল পরিবেশ সম্পর্কে পূর্বপরিচিতি আছে বলে ধরে নেওয়া হচ্ছে।
২. শুরু করার আগে
ক্লাউড প্রজেক্ট সেটআপ
- গুগল ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে কোনো গুগল অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর প্রয়োজন হয় না। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে। - আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
- এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
পরিবেশ সেটআপ
সার্চ বারের ডানদিকে থাকা আইকনটিতে ক্লিক করে ক্লাউড শেল সক্রিয় করুন।

ক্লাউড শেল থেকে, এপিআইগুলো সক্রিয় করুন:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.googleapis.com
অনুমতি দিতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন।

এই কমান্ডটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে, কিন্তু অবশেষে এটি এইটির মতো একটি সফলতার বার্তা দেবে:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
৩. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
Cloud Run ব্যবহারের জন্য একটি Google Cloud পরিষেবা অ্যাকাউন্ট তৈরি ও কনফিগার করুন, যাতে Cloud SQL-এর সাথে সংযোগ করার জন্য এটির সঠিক অনুমতি থাকে।
- একটি নতুন সার্ভিস অ্যাকাউন্ট তৈরি করতে, নিচের মতো করে
gcloud iam service-accounts createকমান্ডটি চালান:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account" - আপনার সদ্য তৈরি করা Google Cloud পরিষেবা অ্যাকাউন্টে Cloud SQL Client রোলটি যোগ করতে, নিচের মতো করে gcloud projects add-iam-policy-binding কমান্ডটি চালান। Cloud Shell-এ,
${GOOGLE_CLOUD_PROJECT}এক্সপ্রেশনটি আপনার প্রোজেক্টের নাম দিয়ে প্রতিস্থাপিত হবে। আপনি যদি এতে বেশি স্বাচ্ছন্দ্যবোধ করেন, তবে এই প্রতিস্থাপনটি ম্যানুয়ালিও করতে পারেন।gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client" - আপনার সদ্য তৈরি করা Google Cloud পরিষেবা অ্যাকাউন্টে Cloud SQL Instance User রোলটি যোগ করতে, নিম্নলিখিতভাবে 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/cloudsql.instanceUser" - আপনার সদ্য তৈরি করা 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"
৪. ক্লাউড এসকিউএল সেট আপ করুন
একটি ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করতে gcloud sql instances create কমান্ডটি চালান।
-
--database-version: ডাটাবেস ইঞ্জিনের ধরন এবং সংস্করণ। এটি নির্দিষ্ট না করা হলে, এপিআই-এর ডিফল্ট সংস্করণ ব্যবহৃত হবে। বর্তমানে উপলব্ধ সংস্করণগুলো দেখতে gcloud ডাটাবেস সংস্করণ সংক্রান্ত ডকুমেন্টেশন দেখুন। -
--cpu: মেশিনে প্রয়োজনীয় কোরের সংখ্যা। -
--memory: একটি পূর্ণসংখ্যা যা নির্দেশ করে মেশিনে কী পরিমাণ মেমরি প্রয়োজন। একটি আকারের একক প্রদান করতে হবে (উদাহরণস্বরূপ, 3072MB বা 9GB)। যদি কোনো একক নির্দিষ্ট না করা হয়, তবে GB ধরে নেওয়া হবে। -
--region: ইনস্ট্যান্সটির আঞ্চলিক অবস্থান (উদাহরণস্বরূপ: us-central1, asia-east1, us-east1)। -
--database-flags: ফ্ল্যাগ সেট করার অনুমতি দেয়। এই ক্ষেত্রে, আমরাcloudsql.iam_authenticationচালু করছি যাতে ক্লাউড রান আমাদের পূর্বে তৈরি করা সার্ভিস অ্যাকাউন্ট ব্যবহার করে ক্লাউড এসকিউএল-এর সাথে সংযোগ করতে পারে।gcloud sql instances create quickstart-instance \ --database-version=POSTGRES_18 \ --tier=db-custom-1-3840 \ --region=us-central1 \ --edition=ENTERPRISE \ --database-flags=cloudsql.iam_authentication=on
এই কমান্ডটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে।
quickstart-instance মধ্যে একটি ক্লাউড এসকিউএল ডাটাবেস তৈরি করতে gcloud sql databases create কমান্ডটি চালান।
gcloud sql databases create quickstart_db \
--instance=quickstart-instance
ডাটাবেস অ্যাক্সেস করার জন্য, আপনার পূর্বে তৈরি করা সার্ভিস অ্যাকাউন্টের জন্য একটি PostgreSQL ডাটাবেস ইউজার তৈরি করুন।
gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--instance=quickstart-instance \
--type=cloud_iam_service_account \
--database-roles=postgres
সতর্কীকরণ: প্রোডাকশন অ্যাপ্লিকেশনে --database-roles=postgres ব্যবহার করবেন না। এই ল্যাবের কোডের জন্য প্রোগ্রাম্যাটিকভাবে টেবিল তৈরি এবং ড্রপ করার প্রয়োজনীয় প্রিভিলেজ প্রদান করতে আমরা এটি ব্যবহার করি।
৫. আবেদনপত্র প্রস্তুত করুন।
একটি Node.js অ্যাপ্লিকেশন তৈরি করুন যা HTTP অনুরোধে সাড়া দেয়।
- ক্লাউড শেলে
helloworldনামে একটি নতুন ডিরেক্টরি তৈরি করুন, তারপর সেই ডিরেক্টরিতে প্রবেশ করুন:mkdir helloworld cd helloworld - একটি
package.jsonফাইলকে মডিউল হিসেবে প্রারম্ভিকীকরণ করুন।npm init -y npm pkg set type="module" npm pkg set main="index.mjs" npm pkg set scripts.start="node index.mjs" - ক্লাউড এসকিউএল নোড.জেএস কানেক্টর ডিপেন্ডেন্সিটি ইনস্টল করুন।
npm install @google-cloud/cloud-sql-connector - PostgreSQL ডাটাবেসের সাথে সংযোগ স্থাপনের জন্য
pgইনস্টল করুন।npm install pg - আগত http অনুরোধ গ্রহণ করতে এক্সপ্রেস ইনস্টল করুন।
npm install express - অ্যাপ্লিকেশন কোড দিয়ে একটি
index.mjsফাইল তৈরি করুন। এই কোডটি নিম্নলিখিত কাজগুলো করতে সক্ষম:- HTTP অনুরোধ গ্রহণ করুন
- ডাটাবেসের সাথে সংযোগ করুন
- HTTP অনুরোধের সময়টি ডাটাবেসে সংরক্ষণ করুন।
- শেষ পাঁচটি অনুরোধের সময়গুলো ফেরত দিন।
cat > index.mjs << "EOF" import express from 'express'; import pg from 'pg'; import {Connector} from '@google-cloud/cloud-sql-connector'; const {Pool} = pg; const connector = new Connector(); const clientOpts = await connector.getOptions({ instanceConnectionName: process.env.INSTANCE_CONNECTION_NAME, authType: 'IAM' }); const pool = new Pool({ ...clientOpts, user: process.env.DB_USER, database: process.env.DB_NAME }); 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 এনভায়রনমেন্ট ভেরিয়েবল দ্বারা নির্ধারিত পোর্টে লিসেন করে। অ্যাপ্লিকেশনটি এখন ডেপ্লয় করার জন্য প্রস্তুত।
৬. ক্লাউড রান অ্যাপ্লিকেশন স্থাপন করুন
আপনার অ্যাপ্লিকেশনটি ক্লাউড রান-এ ডেপ্লয় করতে নিচের কমান্ডটি চালান:
-
--region: ইনস্ট্যান্সটির আঞ্চলিক অবস্থান (উদাহরণস্বরূপ: us-central1, asia-east1, us-east1)। -
--source: যে সোর্স কোডটি ডেপ্লয় করা হবে। এক্ষেত্রে,.বলতে বর্তমানhelloworldফোল্ডারের সোর্স কোডকে বোঝানো হয়েছে। -
--set-env-vars: অ্যাপ্লিকেশনটিকে ক্লাউড এসকিউএল ডেটাবেসে নির্দেশিত করার জন্য ব্যবহৃত এনভায়রনমেন্ট ভেরিয়েবল সেট করে। -
--service-account: এই কোডল্যাবের শুরুতে তৈরি করা ক্লাউড SQL ডেটাবেসে সংযোগ করার অনুমতি থাকা সার্ভিস অ্যাকাউন্টের সাথে ক্লাউড রান ডিপ্লয়মেন্টকে সংযুক্ত করে। -
--allow-unauthenticated: প্রমাণীকরণবিহীন অনুরোধের অনুমতি দেয়, যাতে অ্যাপ্লিকেশনটি ইন্টারনেট থেকে অ্যাক্সেস করা যায়।
gcloud run deploy helloworld \
--region=us-central1 \
--source=. \
--set-env-vars INSTANCE_CONNECTION_NAME="${GOOGLE_CLOUD_PROJECT}:us-central1:quickstart-instance" \
--set-env-vars DB_NAME="quickstart_db" \
--set-env-vars DB_USER="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam" \
--service-account="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--allow-unauthenticated
অনুরোধ করা হলে, আপনি যে চালিয়ে যেতে চান তা নিশ্চিত করতে y এবং Enter চাপুন:
Do you want to continue (Y/n)? y
কয়েক মিনিট পর অ্যাপ্লিকেশনটি আপনাকে ভিজিট করার জন্য একটি URL প্রদান করবে।
আপনার অ্যাপ্লিকেশনটি কার্যকরভাবে দেখতে ইউআরএল-টিতে যান। প্রতিবার যখন আপনি ইউআরএল-টি ভিজিট করবেন বা পেজটি রিফ্রেশ করবেন, তখন আপনি সর্বশেষ পাঁচটি ভিজিটের তথ্য JSON ফরম্যাটে দেখতে পাবেন।
৭. অভিনন্দন
আপনি ক্লাউড রান-এ একটি Node.js অ্যাপ্লিকেশন স্থাপন করেছেন যা ক্লাউড এসকিউএল-এ চলমান একটি PostgreSQL ডাটাবেসের সাথে সংযোগ করতে সক্ষম।
আমরা যা আলোচনা করেছি:
- PostgreSQL ডেটাবেসের জন্য একটি ক্লাউড SQL তৈরি করা
- ক্লাউড রানে একটি Node.js অ্যাপ্লিকেশন ডেপ্লয় করা
- Cloud SQL Node.js কানেক্টর ব্যবহার করে আপনার অ্যাপ্লিকেশনকে Cloud SQL-এর সাথে সংযুক্ত করা
পরিষ্কার করা
এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলির জন্য আপনার Google Cloud অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলি থাকা প্রজেক্টটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্স ডিলিট করুন। আপনি যদি সম্পূর্ণ প্রজেক্টটি ডিলিট করতে চান, তাহলে আপনি এটি চালাতে পারেন:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}