1. ওভারভিউ
Cloud SQL Node.js সংযোগকারী হল আপনার ক্লাউড SQL ডাটাবেসের সাথে আপনার Node.js অ্যাপ্লিকেশনটিকে নিরাপদে সংযুক্ত করার সবচেয়ে সহজ উপায়। ক্লাউড রান হল একটি সম্পূর্ণরূপে পরিচালিত সার্ভারহীন প্ল্যাটফর্ম যা আপনাকে HTTP অনুরোধের মাধ্যমে আবেদনযোগ্য স্টেটলেস কন্টেনার চালাতে সক্ষম করে। IAM প্রমাণীকরণ ব্যবহার করে একটি পরিষেবা অ্যাকাউন্টের সাথে PostgreSQL ডাটাবেসের জন্য একটি ক্লাউড এসকিউএল-এর জন্য ক্লাউড রানে একটি Node.js অ্যাপ্লিকেশন কীভাবে সংযুক্ত করা যায় তা এই কোডল্যাব প্রদর্শন করবে।
যা শিখবেন
এই ল্যাবে, আপনি নিম্নলিখিতগুলি কীভাবে করবেন তা শিখবেন:
- PostgreSQL ডাটাবেসের জন্য একটি ক্লাউড SQL উদাহরণ তৈরি করুন
- ক্লাউড রানে একটি Node.js অ্যাপ্লিকেশন স্থাপন করুন
- Cloud SQL Node.js সংযোগকারী লাইব্রেরি ব্যবহার করে আপনার অ্যাপ্লিকেশনটিকে আপনার ডাটাবেসের সাথে সংযুক্ত করুন৷
পূর্বশর্ত
- এই ল্যাবটি ক্লাউড কনসোল এবং ক্লাউড শেল পরিবেশের সাথে পরিচিতি অনুমান করে।
2. আপনি শুরু করার আগে
ক্লাউড প্রজেক্ট সেটআপ
- Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে৷
- প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
- প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত
PROJECT_ID
হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে। - আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
এনভায়রনমেন্ট সেটআপ
অনুসন্ধান বারের ডানদিকে আইকনে ক্লিক করে ক্লাউড শেল সক্রিয় করুন।
ক্লাউড শেল থেকে, API গুলি সক্ষম করুন:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.googleapis.com
অনুমোদনের জন্য অনুরোধ করা হলে, চালিয়ে যেতে "অনুমোদিত করুন" এ ক্লিক করুন।
এই কমান্ডটি সম্পূর্ণ হতে কয়েক মিনিট সময় নিতে পারে, তবে এটি শেষ পর্যন্ত এটির মতো একটি সফল বার্তা তৈরি করবে:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
3. একটি পরিষেবা অ্যাকাউন্ট সেট আপ করুন৷
ক্লাউড রান দ্বারা ব্যবহার করার জন্য একটি Google ক্লাউড পরিষেবা অ্যাকাউন্ট তৈরি এবং কনফিগার করুন যাতে এটি ক্লাউড SQL এর সাথে সংযোগ করার জন্য সঠিক অনুমতি পায়৷
- একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরি করতে নিম্নরূপ
gcloud iam service-accounts create
কমান্ড চালান:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account"
- আপনি এইমাত্র তৈরি করা Google ক্লাউড পরিষেবা অ্যাকাউন্টে ক্লাউড SQL ক্লায়েন্ট ভূমিকা যোগ করতে নিম্নোক্তভাবে gcloud প্রকল্পের add-iam-policy-binding কমান্ডটি চালান। ক্লাউড শেলে, অভিব্যক্তি
${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 ক্লাউড পরিষেবা অ্যাকাউন্টে ক্লাউড এসকিউএল ইন্সট্যান্স ব্যবহারকারীর ভূমিকা যোগ করতে নিচের মতো 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/cloudsql.instanceUser"
- আপনি এইমাত্র তৈরি করা 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"
4. ক্লাউড এসকিউএল সেট আপ করুন
একটি ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করতে gcloud sql instances create
কমান্ডটি চালান।
- -ডাটাবেস-সংস্করণ : ডাটাবেস ইঞ্জিনের ধরন এবং সংস্করণ। অনির্দিষ্ট থাকলে, API ডিফল্ট ব্যবহার করা হয়। বর্তমান উপলব্ধ সংস্করণগুলি দেখতে gcloud ডাটাবেস সংস্করণ ডকুমেন্টেশন দেখুন।
- -cpu : মেশিনে কাঙ্খিত কোরের সংখ্যা।
- -মেমরি : মেশিনে কত মেমরি কাঙ্ক্ষিত তা নির্দেশ করে পুরো সংখ্যার মান। একটি আকারের ইউনিট প্রদান করা উচিত (উদাহরণস্বরূপ, 3072MB বা 9GB)। যদি কোনো ইউনিট নির্দিষ্ট করা না থাকে, তাহলে GB ধরে নেওয়া হয়।
- -অঞ্চল : উদাহরণের আঞ্চলিক অবস্থান (উদাহরণস্বরূপ: us-central1, asia-east1, us-east1)।
- -ডেটাবেস-পতাকা : পতাকা সেট করার অনুমতি দেয়। এই ক্ষেত্রে, আমরা আগে তৈরি করা পরিষেবা অ্যাকাউন্ট ব্যবহার করে ক্লাউড এসকিউএল-এর সাথে সংযোগ করতে ক্লাউড রানকে সক্ষম করতে
cloudsql.iam_authentication
চালু করছি।gcloud sql instances create quickstart-instance \ --database-version=POSTGRES_14 \ --cpu=1 \ --memory=4GB \ --region=us-central1 \ --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
5. আবেদন প্রস্তুত করুন
একটি 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"
- Cloud SQL Node.js সংযোগকারী নির্ভরতা ইনস্টল করুন।
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
এই কোডটি একটি মৌলিক ওয়েব সার্ভার তৈরি করে যা পোর্ট পরিবেশ পরিবর্তনশীল দ্বারা সংজ্ঞায়িত পোর্টে শোনে। অ্যাপ্লিকেশন এখন স্থাপন করার জন্য প্রস্তুত.
6. ক্লাউড রান অ্যাপ্লিকেশন স্থাপন করুন
ক্লাউড রানে আপনার অ্যাপ্লিকেশন স্থাপন করতে নীচের কমান্ডটি চালান:
- -অঞ্চল : উদাহরণের আঞ্চলিক অবস্থান (উদাহরণস্বরূপ: us-central1, asia-east1, us-east1)।
- -উৎস : সোর্স কোড স্থাপন করা হবে। এই ক্ষেত্রে,
.
বর্তমান ফোল্ডারে সোর্স কোড বোঝায়helloworld
. - –set-env-vars : ক্লাউড এসকিউএল ডাটাবেসে অ্যাপ্লিকেশনটিকে নির্দেশ করতে অ্যাপ্লিকেশন দ্বারা ব্যবহৃত পরিবেশের ভেরিয়েবল সেট করে।
- -সার্ভিস-অ্যাকাউন্ট : এই কোডল্যাবের শুরুতে তৈরি করা ক্লাউড এসকিউএল ডাটাবেসের সাথে সংযোগ করার অনুমতি সহ ক্লাউড রান ডিপ্লোয়মেন্টকে পরিষেবা অ্যাকাউন্টের সাথে সংযুক্ত করে।
- -অনুমোদিত-অপ্রমাণিত : অননুমোদিত অনুরোধগুলিকে অনুমতি দেয় যাতে অ্যাপ্লিকেশনটি ইন্টারনেট থেকে অ্যাক্সেসযোগ্য হয়।
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 প্রদান করবে।
আপনার অ্যাপ্লিকেশানটি কার্যকর দেখতে URL এ নেভিগেট করুন৷ প্রতিবার আপনি URL-এ যান বা পৃষ্ঠা রিফ্রেশ করেন, আপনি JSON হিসাবে পাঁচটি সাম্প্রতিক ভিজিট দেখতে পাবেন।
7. অভিনন্দন
আপনি ক্লাউড রানে একটি Node.js অ্যাপ্লিকেশন স্থাপন করেছেন যা ক্লাউড SQL এ চলমান একটি PostgreSQL ডাটাবেসের সাথে সংযোগ করতে সক্ষম।
আমরা যা কভার করেছি:
- PostgreSQL ডাটাবেসের জন্য একটি ক্লাউড SQL তৈরি করা
- ক্লাউড রানে একটি Node.js অ্যাপ্লিকেশন স্থাপন করা হচ্ছে
- Cloud SQL Node.js সংযোগকারী ব্যবহার করে আপনার অ্যাপ্লিকেশনটিকে ক্লাউড SQL-এ সংযুক্ত করা হচ্ছে
পরিষ্কার করুন
এই টিউটোরিয়ালে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, হয় সংস্থানগুলি রয়েছে এমন প্রকল্পটি মুছুন, অথবা প্রকল্পটি রাখুন এবং পৃথক সংস্থানগুলি মুছুন৷ আপনি যদি পুরো প্রকল্পটি মুছতে চান, আপনি চালাতে পারেন:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}