1. סקירה כללית
מחבר Cloud SQL Node.js הוא הדרך הקלה ביותר לחבר באופן מאובטח את אפליקציית Node.js למסד הנתונים שלכם ב-Cloud SQL. Cloud Run היא פלטפורמה מנוהלת ללא שרת (serverless), שמאפשרת להריץ קונטיינרים ללא שמירת מצב, שלא ניתנים להפעלה באמצעות בקשות HTTP. ה-Codelab הזה ידגים איך לחבר אפליקציית Node.js ב-Cloud Run למסד נתונים של Cloud SQL ל-PostgreSQL בצורה מאובטחת עם חשבון שירות באמצעות אימות ב-IAM.
מה תלמדו
בשיעור Lab זה תלמדו איך:
- יצירת מכונה של Cloud SQL למסד נתונים של PostgreSQL
- פריסת אפליקציית Node.js ב-Cloud Run
- מחברים את האפליקציה למסד הנתונים באמצעות הספרייה Cloud SQL Node.js Connector
דרישות מוקדמות
- שיעור ה-Lab הזה מבוסס על היכרות עם הסביבות של Cloud Console ו-Cloud Shell.
2. לפני שמתחילים
הגדרת פרויקט ב-Cloud
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם עדיין אין לכם חשבון Google, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט. - לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הגדרת סביבה
לוחצים על הסמל שמופיע מימין לסרגל החיפוש כדי להפעיל את 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.
3. הגדרה של חשבון שירות
יצירה והגדרה של חשבון שירות של 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 לחשבון השירות ב-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"
- מריצים את הפקודה add-iam-policy-binding לפרויקטים של gcloud כדי להוסיף את התפקיד 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"
- מריצים את הפקודה add-iam-policy-binding לפרויקטים של gcloud כדי להוסיף את התפקיד 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"
4. הגדרת Cloud SQL
כדי ליצור מכונה של Cloud SQL, מריצים את הפקודה gcloud sql instances create
.
- –database-version: הסוג והגרסה של המנוע של מסד הנתונים. אם לא צוין ערך, ייעשה שימוש בברירת המחדל של ה-API. במסמכי התיעוד בנושא גרסאות של מסד הנתונים של gcloud אפשר לראות את הגרסאות הקיימות של מסד הנתונים.
- –cpu: מספר הליבות שרוצים במכונה.
- –זיכרון: מספר שלם שמציין כמה זיכרון רוצים לקבל במכונה. צריך לספק יחידת גודל (לדוגמה, 3072MB או 9GB). אם לא צוינו יחידות, ההנחה היא 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_14 \ --cpu=1 \ --memory=4GB \ --region=us-central1 \ --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
5. הכנת הבקשה
הכינו אפליקציית 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
- יש להתקין Express כדי לקבל בקשות 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. האפליקציה מוכנה עכשיו לפריסה.
6. פריסת אפליקציית Cloud Run
מריצים את הפקודה הבאה כדי לפרוס את האפליקציה ב-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.
7. מזל טוב
פרסתם אפליקציית Node.js ב-Cloud Run שיכולה להתחבר למסד נתונים של PostgreSQL על Cloud SQL.
נושאים שטיפלנו בהם:
- יצירת מסד נתונים של Cloud SQL ל-PostgreSQL
- פריסת אפליקציית Node.js ב-Cloud Run
- חיבור האפליקציה ל-Cloud SQL באמצעות Cloud SQL Node.js Connector
הסרת המשאבים
כדי להימנע מצבירת חיובים בחשבון Google Cloud על המשאבים שנעשה בהם שימוש במדריך הזה, צריך למחוק את הפרויקט שמכיל את המשאבים או לשמור את הפרויקט ולמחוק את המשאבים הספציפיים. כדי למחוק את הפרויקט כולו, אפשר להריץ את הפקודה:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}