בעזרת פונקציות Cloud Run אפשר ליצור שירותים ללא שרת שמבצעים שאילתות על נתונים ב-Spanner ומציגים אותם באמצעות HTTP. במדריך הזה תכתבו ותפרסו פונקציה שמופעלת באמצעות HTTP ומאחזרת רשומות ממסד נתונים של 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
Python
אפשר לעיין במדריך להגדרת Python.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לפריסת שירותי Cloud Run מקוד מקור, אתם צריכים לבקש מהאדמין לתת לכם את התפקידים הבאים ב-IAM:
- Cloud Run Source Developer (
roles/run.sourceDeveloper) on your project - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) on the Cloud Run service - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות - אדמין ב-Spanner (
roles/spanner.admin) במכונה של Spanner
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתממשק עם ממשקי API שלGoogle Cloud , כמו ספריות הלקוח ב-Cloud, עיינו במדריך להגדרת זהות השירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
תפקידים לחשבון השירות של Cloud Build
אתם או האדמין שלכם צריכים להקצות לחשבון השירות של Cloud Build את תפקיד ה-IAM הבא.
כדי לראות את התפקידים הנדרשים לחשבון השירות ב-Cloud Build, לחצו כאן
כברירת מחדל, Cloud Build משתמש באופן אוטומטי בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine כדי לבנות את קוד המקור ואת המשאב של Cloud Run, אלא אם משנים את ההתנהגות הזו. כדי ש-Cloud Build יוכל ליצור את המקורות, צריך לבקש מהאדמין להקצות את התפקיד Cloud Run Builder (roles/run.builder) לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine בפרויקט:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@ \ --role=roles/run.builder
מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud, ואת PROJECT_ID במזהה הפרויקט ב- Google Cloud. במאמר יצירה וניהול של פרויקטים מוסבר איך למצוא את מזהה הפרויקט ואת מספר הפרויקט.
הקצאת התפקיד "מפתח ב-Cloud Run" לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine מתעדכנת תוך כמה דקות.
תפקידים של הזהות בשירות
אתם צריכים להקצות את תפקיד ה-IAM הבא לזהות השירות שבה אתם משתמשים בשירות Cloud Run.
- קורא מסדי נתונים של 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