۱. مرور کلی
رابط Cloud SQL Node.js سادهترین راه برای اتصال ایمن برنامه Node.js شما به پایگاه داده Cloud SQL است. Cloud Run یک پلتفرم کاملاً مدیریتشده بدون سرور است که به شما امکان میدهد کانتینرهای بدون وضعیت را که از طریق درخواستهای HTTP قابل فراخوانی هستند، اجرا کنید. این Codelab نحوه اتصال ایمن یک برنامه Node.js در Cloud Run به یک پایگاه داده Cloud SQL برای PostgreSQL را با یک حساب کاربری سرویس با استفاده از احراز هویت IAM نشان میدهد.
آنچه یاد خواهید گرفت
در این آزمایشگاه، شما یاد خواهید گرفت که چگونه موارد زیر را انجام دهید:
- ایجاد یک نمونه Cloud SQL برای پایگاه داده PostgreSQL
- یک برنامه Node.js را روی Cloud Run مستقر کنید
- برنامه خود را با استفاده از کتابخانه Cloud SQL Node.js Connector به پایگاه داده خود متصل کنید
پیشنیازها
- این آزمایشگاه آشنایی با محیطهای Cloud Console و Cloud Shell را پیشفرض قرار میدهد.
۲. قبل از شروع
راهاندازی پروژه ابری
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب گوگل ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان
PROJECT_IDشناخته میشود). اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند. - برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، میتوانید منابعی را که ایجاد کردهاید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
تنظیمات محیط
با کلیک روی آیکون سمت راست نوار جستجو، Cloud Shell را فعال کنید.

از Cloud Shell، 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.
۳. یک حساب کاربری سرویس راهاندازی کنید
یک حساب کاربری سرویس Google Cloud ایجاد و پیکربندی کنید تا توسط Cloud Run مورد استفاده قرار گیرد تا مجوزهای صحیح برای اتصال به Cloud SQL را داشته باشد.
- برای ایجاد یک حساب سرویس جدید، دستور
gcloud iam service-accounts createرا به صورت زیر اجرا کنید:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account" - دستور add-iam-policy-binding پروژههای gcloud را به صورت زیر اجرا کنید تا نقش Cloud SQL Client را به حساب سرویس Google Cloud که اخیراً ایجاد کردهاید اضافه کنید. در 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" - دستور gcloud projects add-iam-policy-binding را به صورت زیر اجرا کنید تا نقش Cloud SQL Instance User به حساب سرویس Google Cloud که اخیراً ایجاد کردهاید اضافه شود.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.instanceUser" - دستور gcloud projects add-iam-policy-binding را به صورت زیر اجرا کنید تا نقش Log Writer به حساب سرویس Google Cloud که اخیراً ایجاد کردهاید اضافه شود.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
۴. تنظیم SQL ابری
دستور gcloud sql instances create اجرا کنید تا یک نمونه Cloud SQL ایجاد شود.
-
--database-version: نوع و نسخه موتور پایگاه داده. در صورت عدم تعیین، از پیشفرض API استفاده میشود. برای مشاهده نسخههای موجود فعلی، به مستندات نسخههای پایگاه داده gcloud مراجعه کنید. -
--cpu: تعداد هستههای مورد نظر در دستگاه. -
--memory: مقدار عددی صحیح که نشان میدهد چه مقدار حافظه در دستگاه مورد نیاز است. واحد اندازه باید ارائه شود (برای مثال، 3072 مگابایت یا 9 گیگابایت). اگر هیچ واحدی مشخص نشود، GB در نظر گرفته میشود. -
--region: موقعیت منطقهای نمونه (برای مثال: us-central1، asia-east1، us-east1). -
--database-flags: امکان تنظیم پرچمها را فراهم میکند. در این حالت، ماcloudsql.iam_authenticationفعال میکنیم تا Cloud Run بتواند با استفاده از حساب سرویسی که قبلاً ایجاد کردهایم، به Cloud SQL متصل شود.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
اجرای این دستور ممکن است چند دقیقه طول بکشد.
دستور gcloud sql databases create را اجرا کنید تا یک پایگاه داده Cloud SQL در quickstart-instance ایجاد شود.
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 پاسخ دهد.
- در Cloud Shell یک دایرکتوری جدید به نام
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 ورودی، express را نصب کنید.
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 گوش میدهد. اکنون برنامه آمادهی استقرار است.
۶. اجرای برنامه ابری را مستقر کنید
دستور زیر را برای استقرار برنامه خود در Cloud Run اجرا کنید:
-
--region: موقعیت منطقهای نمونه (برای مثال: us-central1، asia-east1، us-east1). -
--source: کد منبعی که قرار است مستقر شود. در این مورد،.به کد منبع موجود در پوشه فعلیhelloworldاشاره دارد. -
--set-env-vars: متغیرهای محیطی مورد استفاده برنامه را برای هدایت برنامه به پایگاه داده Cloud SQL تنظیم میکند. -
--service-account: استقرار Cloud Run را به حساب سرویس با مجوزهای اتصال به پایگاه داده Cloud SQL ایجاد شده در ابتدای این Codelab مرتبط میکند. -
--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 برای بازدید شما ارائه دهد.
برای مشاهدهی عملکرد برنامه، به آدرس اینترنتی (URL) بروید. هر بار که از آدرس اینترنتی (URL) بازدید میکنید یا صفحه را رفرش میکنید، پنج بازدید اخیر را که به صورت JSON برگردانده شدهاند، مشاهده خواهید کرد.
۷. تبریک
شما یک برنامه Node.js را روی Cloud Run مستقر کردهاید که قادر به اتصال به پایگاه داده PostgreSQL است که روی Cloud SQL اجرا میشود.
آنچه ما پوشش دادهایم:
- ایجاد یک Cloud SQL برای پایگاه داده PostgreSQL
- استقرار یک برنامه Node.js در Cloud Run
- اتصال برنامه شما به Cloud SQL با استفاده از رابط Cloud SQL Node.js
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژهای که شامل منابع است را حذف کنید، یا پروژه را نگه دارید و منابع تکی را حذف کنید. اگر میخواهید کل پروژه را حذف کنید، میتوانید دستور زیر را اجرا کنید:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}