במדריך הזה מוסבר איך לכתוב פונקציית HTTP Cloud Run שמחזירה תוצאות של Spanner.
מטרות
כתיבה, פריסה והפעלה של פונקציית HTTP שמאפשרת גישה ל-Spanner.
עלויות
במסמך הזה נעשה שימוש ב-Spanner וב-Cloud Run, שהם רכיבים של Google Cloudשחלים עליהם חיובים.
מידע על העלות של שימוש ב-Spanner מופיע במאמר בנושא תמחור Spanner.
במאמר תמחור של Cloud Run מופיע מידע על עלות השימוש ב-Cloud Run, כולל הפעלות בחינם.
לפני שמתחילים
במסמך הזה אנחנו מניחים שיש לכם מופע Spanner בשם
test-instanceומסד נתונים בשםexample-dbשמשתמש בסכימה של אפליקציית המוזיקה. הוראות ליצירת מכונה ומסד נתונים עם סכימת אפליקציית המוזיקה מופיעות במאמר מדריך למתחילים לשימוש במסוף או במדריכים למתחילים בנושא Node.js או Python.מפעילים את Cloud Run API ואת Cloud Build API.
מתקינים ומפעילים את ה-CLI של gcloud.
אם כבר התקנתם את ה-CLI של gcloud, תוכלו לעדכן אותו באמצעות הפקודה הבאה:
gcloud components updateמכינים את סביבת הפיתוח:
Node.js
אפשר לעיין במדריך ההגדרה של Node.js.
Python
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לפריסת שירותי Cloud Run ממקור, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
Cloud Run Source Developer (
roles/run.sourceDeveloper) בפרויקט -
שימוש בשירות (
roles/serviceusage.serviceUsageConsumer) בשירות Cloud Run -
משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות -
Spanner Admin (
roles/spanner.admin) במכונת Spanner
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
תפקידים לחשבון השירות ב-Cloud Build
אתם או האדמין שלכם צריכים להקצות לחשבון השירות של Cloud Build את תפקיד ה-IAM הבא.
לחצו כדי לראות את התפקידים הנדרשים לחשבון השירות של Cloud Build
Cloud Build משתמש אוטומטית בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine כחשבון השירות שמוגדר כברירת מחדל ב-Cloud Build כדי לבנות את קוד המקור ואת משאב Cloud Run, אלא אם משנים את ההתנהגות הזו. כדי ש-Cloud Build יוכל לבצע build של המקורות, צריך לבקש מהאדמין להקצות את התפקיד Cloud Run Builder (roles/run.builder) לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine בפרויקט:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
מחליפים את PROJECT_NUMBER במספר הפרויקט ואת PROJECT_ID במזהה הפרויקט. Google CloudGoogle Cloudהוראות מפורטות לאיתור מזהה הפרויקט ומספר הפרויקט מופיעות במאמר יצירה וניהול של פרויקטים.
הענקת תפקיד ה-builder ב-Cloud Run לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine לוקחת כמה דקות עד שהיא מופצת.
תפקידים של הזהות בשירות
צריך להקצות לזהות השירות שמשמשת את שירות Cloud Run את תפקיד ה-IAM הבא.
- קורא מסד נתונים של Spanner (
roles/spanner.databaseReader)
מידע נוסף על הקצאת תפקידים מופיע במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים.
הכנת הבקשה
משכפלים את מאגר האפליקציה לדוגמה ומעבירים אותו למכונה המקומית:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.gitאפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.gitאפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
עוברים לספרייה שמכילה את הקוד לדוגמה של פונקציות Cloud Run לגישה ל-Spanner:
Node.js
cd nodejs-docs-samples/functions/spannerPython
cd python-docs-samples/functions/spannerכדאי לעיין בקוד לדוגמה:
Node.js
Python
הפונקציה שולחת שאילתת SQL כדי לאחזר את כל הנתונים מסוג
Albumsממסד הנתונים. הפונקציה מופעלת כששולחים בקשת HTTP לנקודת הקצה של הפונקציה.
פריסת הפונקציה
כדי לפרוס את הפונקציה עם טריגר HTTP, מריצים את הפקודה הבאה בספרייה spanner:
Node.js
gcloud run deploy nodejs-spanner-function \
--source . \
--region REGION \
--function spannerQuickstart \
--base-image RUNTIME_ID \
--log-httpPython
gcloud run deploy python-spanner-function \
--source . \
--region REGION \
--function spanner_read_data \
--base-image RUNTIME_ID \
--log-httpמחליפים את:
REGION בשם של Google Cloud האזור שבו רוצים לפרוס את הפונקציה (לדוגמה,
us-west1).RUNTIME_ID עם מזהה זמן הריצה המתאים (לדוגמה,
nodejs22). אפשר לעיין במאמר זמני ריצה ושפות נתמכות.
פריסת הפונקציה עשויה להימשך עד שתי דקות.
שימו לב לערך url שמוחזר כשהפריסה של הפונקציה מסתיימת. תשתמשו בו כשמפעילים את הפונקציה.
אפשר לראות את הפונקציות שפרסתם בדף Cloud Run במסוףGoogle Cloud . בדף הזה אפשר גם ליצור ולערוך פונקציות, ולקבל פרטים וניתוח של הפונקציות.
הפעלת הפונקציה
שליחת בקשת HTTP לפונקציה:
curl URL
מחליפים את URL בערך כתובת ה-URL שמוחזר כשהפונקציה מסיימת את הפריסה.
אמורות להופיע תוצאות שמציגות את תוצאות שאילתת ה-SQL, בהנחה שפעלתם לפי המדריך לתחילת העבודה ואכלסתם את מסד הנתונים:
SingerId: 2, AlbumId: 2, AlbumTitle: Forever Hold Your Peace
SingerId: 1, AlbumId: 2, AlbumTitle: Go, Go, Go
SingerId: 2, AlbumId: 1, AlbumTitle: Green
SingerId: 2, AlbumId: 3, AlbumTitle: Terrified
SingerId: 1, AlbumId: 1, AlbumTitle: Total Junk
אפשר גם להיכנס לכתובת ה-URL של הפונקציה בדפדפן כדי לראות את התוצאה של שאילתת ה-SQL.
הסרת המשאבים
כדי להימנע מחיובים נוספים בחשבון Google Cloud על המשאבים של פונקציות Spanner ו-Cloud Run שבהם השתמשתם במסמך הזה:
מוחקים את המכונה:
gcloud CLI instances delete test-instanceמוחקים את שירות Cloud Run שפרסתם במדריך הזה:
Node.js
gcloud run services delete nodejs-spanner-functionPython
gcloud run services delete python-spanner-function
המאמרים הבאים
- מידע נוסף על כתיבת פונקציות Cloud Run
- מידע נוסף על פריסת פונקציות Cloud Run
- מידע נוסף על הפעלת פונקציות Cloud Run