1. نظرة عامة
Cloud Run هو نظام أساسي مُدار بالكامل بدون خادم يتيح لك تشغيل حاويات لا تتضمّن حالة ويمكن استدعاؤها من خلال طلبات HTTP. سيوضّح لك هذا الدرس التطبيقي حول الترميز كيفية ربط تطبيق Node.js على Cloud Run بخدمة AlloyDB بأمان باستخدام حساب خدمة من خلال المصادقة باستخدام إدارة الهوية وإمكانية الوصول (IAM).
ما ستتعرّف عليه
في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ ما يلي:
- أنشئ مثيل AlloyDB (تم ضبطه لاستخدام Private Service Connect).
- نشر تطبيق على Cloud Run يتصل بمثيل AlloyDB
- استخدام ميزة Gemini Code Assist لإضافة وظائف إلى تطبيقك
2. المتطلبات الأساسية
- إذا لم يكن لديك حساب على Google، عليك إنشاء حساب على Google.
- استخدام حساب شخصي بدلاً من حساب عمل أو حساب تديره مؤسسة تعليمية قد تفرض حسابات العمل والحسابات التي تديرها المؤسسات التعليمية قيودًا تمنعك من تفعيل واجهات برمجة التطبيقات اللازمة لهذا الدرس التطبيقي.
3- إعداد المشروع
- سجِّل الدخول إلى Google Cloud Console.
- فعِّل الفوترة في Cloud Console.
- من المفترض أن تبلغ تكلفة إكمال هذا البرنامج التدريبي أقل من دولار أمريكي واحد في موارد Cloud.
- يمكنك اتّباع الخطوات الواردة في نهاية هذا البرنامج التدريبي لحذف الموارد لتجنُّب تحصيل المزيد من الرسوم.
- يكون المستخدمون الجدد مؤهّلين للاستفادة من الفترة التجريبية المجانية التي تبلغ قيمتها 300 دولار أمريكي.
- أنشئ مشروعًا جديدًا أو اختَر إعادة استخدام مشروع حالي.
4. فتح محرِّر Cloud Shell
- انتقِل إلى محرِّر Cloud Shell.
- إذا لم تظهر المحطة الطرفية في أسفل الشاشة، افتح المحطة باتّباع الخطوات التالية:
- انقر على قائمة الخطوط الثلاثة
.
- انقر على Terminal (الوحدة الطرفية).
- انقر على وحدة تحكّم جديدة
.
- انقر على قائمة الخطوط الثلاثة
- في الوحدة الطرفية، اضبط مشروعك باستخدام الأمر التالي:
- طبيعة الحضور:
gcloud config set project [PROJECT_ID]
- مثال:
gcloud config set project lab-project-id-example
- إذا لم تتذكر رقم تعريف المشروع:
- يمكنك إدراج جميع أرقام تعريف مشاريعك باستخدام:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- يمكنك إدراج جميع أرقام تعريف مشاريعك باستخدام:
- طبيعة الحضور:
- إذا طُلب منك تفويض، انقر على تفويض للمتابعة.
- من المفترض أن تظهر لك هذه الرسالة:
إذا ظهر لك رمزUpdated property [core/project].
WARNING
وتلقّيت رسالةDo you want to continue (Y/N)?
، هذا يعني على الأرجح أنّك أدخلت رقم تعريف المشروع بشكل غير صحيح. اضغط علىN
، ثم اضغط علىEnter
، وحاول تنفيذ الأمرgcloud config set project
مرة أخرى.
5- تفعيل واجهات برمجة التطبيقات
في الوحدة الطرفية، فعِّل واجهات برمجة التطبيقات:
gcloud services enable \
compute.googleapis.com \
alloydb.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
cloudaicompanion.googleapis.com
إذا طُلب منك تفويض، انقر على تفويض للمتابعة.
قد يستغرق تنفيذ هذا الأمر بضع دقائق، ولكن من المفترض أن يؤدي في النهاية إلى ظهور رسالة ناجحة مشابهة لهذه الرسالة:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6- إعداد حساب خدمة
أنشئ حساب خدمة على Google Cloud واضبطه لاستخدامه من خلال Cloud Run حتى يحصل على الأذونات الصحيحة للاتصال بخدمة AlloyDB.
- شغِّل الأمر
gcloud iam service-accounts create
على النحو التالي لإنشاء حساب خدمة جديد:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account"
- شغِّل الأمر gcloud projects add-iam-policy-binding على النحو التالي لإضافة دور مستخدم قاعدة بيانات AlloyDB إلى حساب الخدمة على Google Cloud الذي أنشأته للتو.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/alloydb.databaseUser"
- نفِّذ الأمر gcloud projects add-iam-policy-binding على النحو التالي لإضافة دور مستخدِم استخدام الخدمة إلى حساب الخدمة على Google Cloud الذي أنشأته للتو.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/serviceusage.serviceUsageConsumer"
- شغِّل الأمر gcloud projects add-iam-policy-binding على النحو التالي لإضافة دور كاتب السجلّ إلى حساب الخدمة على 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"
7- إنشاء مثيل AlloyDB
- تنفيذ الأمر
gcloud alloydb clusters create
لإنشاء مثيل Cloud SQLgcloud 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
قد يستغرق تنفيذ هذا الأمر بضع دقائق.
- تنفيذ الأمر
gcloud alloydb instances create
لإنشاء مثيل Cloud SQLgcloud 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
- شغِّل الأمر
gcloud alloydb instances describe
للحصول على رابط مرفق خدمة PSC وتصديره إلى متغيّر.export SERVICE_ATTACHMENT=$(gcloud alloydb instances describe quickstart-instance \ --cluster=quickstart-cluster --region=us-central1 \ --format="value(pscInstanceConfig.serviceAttachmentLink)")
gcloud compute addresses create quickstart-address \ --region=us-central1 \ --subnet=default
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
8. تحضير الطلب
حضِّر تطبيق 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"
- ثبِّت مكتبة Google Cloud Auth.
npm install google-auth-library
- ثبِّت
pg
للتفاعل مع قاعدة بيانات PostgreSQL.npm install pg
- ثبِّت Express لقبول طلبات HTTP الواردة.
npm install express
- أنشئ ملف
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. أصبح التطبيق جاهزًا الآن للنشر.
9. نشر تطبيق Cloud Run
- نفِّذ الأمر gcloud projects add-iam-policy-binding على النحو التالي لإضافة دور مستخدم الشبكة إلى حساب خدمة Cloud Run لخدمة Cloud Run التي أنت على وشك إنشاؤها.
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"
- نفِّذ الأمر أدناه لنشر تطبيقك على Cloud Run:
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
- اضغط على
Y
وEnter
لتأكيد رغبتك في المتابعة إذا طُلب منك ذلك:Do you want to continue (Y/n)? Y
بعد بضع دقائق، من المفترض أن يقدّم التطبيق عنوان URL يمكنك الانتقال إليه.
انتقِل إلى عنوان URL للاطّلاع على تطبيقك أثناء تنفيذه. في كل مرة تزور فيها عنوان URL أو تُعيد تحميل الصفحة، ستظهر لك آخر خمس زيارات بتنسيق JSON.
بعد بضع دقائق، من المفترض أن يقدّم التطبيق عنوان URL يمكنك الانتقال إليه.
انتقِل إلى عنوان URL للاطّلاع على تطبيقك أثناء تنفيذه. في كل مرة تزور فيها عنوان URL أو تُعيد تحميل الصفحة، ستظهر لك آخر خمس زيارات بتنسيق JSON.
10. تهانينا
في هذه الميزة الاختبارية، تعلمت كيفية تنفيذ ما يلي:
- أنشئ مثيل AlloyDB (تم ضبطه لاستخدام Private Service Connect).
- نشر تطبيق على Cloud Run يتصل بمثيل AlloyDB
- استخدام ميزة Gemini Code Assist لإضافة وظائف إلى تطبيقك
تَنظيم
لتجنُّب تحصيل رسوم من حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدليل التعليمي، يمكنك إما حذف المشروع الذي يحتوي على الموارد أو الاحتفاظ بالمشروع وحذف الموارد الفردية. إذا أردت حذف المشروع بأكمله، يمكنك تنفيذ:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}