הרבה אפליקציות צריכות לבצע עיבוד ברקע מחוץ להקשר של בקשה לאחזור מהרשת. במדריך הזה ניצור אפליקציית אינטרנט שמאפשרת למשתמשים להזין טקסט לתרגום, ואז מציגה רשימה של תרגומים קודמים. התרגום מתבצע בתהליך ברקע כדי למנוע חסימה של בקשת המשתמש.
התרשים הבא מדגים את תהליך בקשת התרגום.
כך פועלת אפליקציית המדריך:
- עוברים לדף האינטרנט כדי לראות רשימה של תרגומים קודמים, שמאוחסנים ב-Firestore.
- שליחת בקשה לתרגום טקסט באמצעות הזנת טופס HTML.
- בקשת התרגום מתפרסמת ב-Pub/Sub.
- מופעלת פונקציית Cloud Run שרשומה לנושא Pub/Sub.
- הפונקציה של Cloud Run משתמשת ב-Cloud Translation כדי לתרגם את הטקסט.
- פונקציית Cloud Run מאחסנת את התוצאה ב-Firestore.
המדריך הזה מיועד לכל מי שרוצה ללמוד על עיבוד ברקע באמצעות Google Cloud. אין צורך בניסיון קודם עם Pub/Sub, Firestore, App Engine או פונקציות של Cloud Run. עם זאת, כדי להבין את כל הקוד, כדאי שתהיה לכם קצת ניסיון ב-Python, ב-JavaScript וב-HTML.
מטרות
- להבין ולפרוס פונקציית Cloud Run.
- הבנה ופריסה של אפליקציית App Engine.
- כדאי לנסות את האפליקציה.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Cloud Run functions, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Cloud Run functions, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
במסוף Google Cloud , פותחים את האפליקציה ב-Cloud Shell.
Cloud Shell נותנת גישה למשאבים בענן בממשק שורת פקודה ישירות מהדפדפן. פותחים את Cloud Shell בדפדפן ולוחצים על Proceed כדי להוריד את קוד הדוגמה ולעבור לספריית האפליקציה.
-
ב-Cloud Shell, מגדירים את הכלי
gcloudכך שישתמש בפרויקט Google Cloud :# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
הסבר על פונקציית Cloud Run
- הפונקציה מתחילה בייבוא של כמה תלויות כמו Firestore ו-Translation.
- הלקוחות הגלובליים של Firestore ושל Translation עוברים אתחול כדי שאפשר יהיה להשתמש בהם מחדש בין קריאות לפונקציות. כך לא צריך לאתחל לקוחות חדשים לכל הפעלה של פונקציה, מה שיאט את הביצוע.
- Translation API מתרגם את המחרוזת לשפה שבחרתם.
-
פונקציית Cloud Run מתחילה בניתוח של הודעת Pub/Sub כדי לקבל את הטקסט לתרגום ואת שפת היעד הרצויה.
לאחר מכן, פונקציית Cloud Run מתרגמת את הטקסט ומאחסנת אותו ב-Firestore באמצעות טרנזקציה, כדי לוודא שאין תרגומים כפולים.
פריסת הפונקציה של Cloud Run
ב-Cloud Shell, בספרייה
function, פורסים את הפונקציה ב-Cloud Run עם טריגר Pub/Sub:gcloud functions deploy Translate --runtime=python37 \ --entry-point=translate_message --trigger-topic=translate \ --set-env-vars GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_CLOUD_PROJECT
כאשר
YOUR_GOOGLE_CLOUD_PROJECTהוא מזהה הפרויקט. Google Cloud
הסבר על האפליקציה
יש שני רכיבים עיקריים לאפליקציית האינטרנט:
-
שרת HTTP של Python לטיפול בבקשות לאחזור מהרשת. לשרת יש את שתי נקודות הקצה הבאות:
-
/: מציג רשימה של כל התרגומים הקיימים וטופס שמשתמשים יכולים לשלוח כדי לבקש תרגומים חדשים. -
/request-translation: שליחות של טפסים נשלחות לנקודת הקצה הזו, שמפרסמת את הבקשה ב-Pub/Sub כדי לתרגם אותה באופן אסינכרוני.
-
- תבנית HTML שממולאת בתרגומים הקיימים על ידי שרת Python.
שרת ה-HTTP
בספרייה
app, מתבצע ייבוא של תלות, נוצרת אפליקציית Flask, מתבצעת אתחול של לקוחות Firestore ו-Translation, ומוגדרת רשימה של שפות נתמכות:main.pyהפונקציה לטיפול באינדקס (
/) מקבלת את כל התרגומים הקיימים מ-Firestore וממלאת תבנית HTML ברשימה:כדי לבקש תרגומים חדשים, צריך לשלוח טופס HTML. ה-handler של תרגום הבקשה, שרשום ב-
/request-translation, מנתח את הטופס שנשלח, מאמת את הבקשה ומפרסם הודעה ב-Pub/Sub:
תבנית ה-HTML
תבנית ה-HTML היא הבסיס לדף ה-HTML שמוצג למשתמש, כדי שיוכל לראות תרגומים קודמים ולבקש תרגומים חדשים. התבנית מאוכלסת על ידי שרת ה-HTTP עם רשימת התרגומים הקיימים.
-
האלמנט
<head>בתבנית ה-HTML כולל מטא-נתונים, גיליונות סגנונות ו-JavaScript לדף:הדף מאחזר נכסי CSS ו-JavaScript של Material Design Lite (MDL). MDL מאפשר לכם להוסיף לאתרים שלכם מראה ותחושה של Material Design.
הדף משתמש ב-JQuery כדי להמתין לסיום הטעינה של המסמך ולהגדיר handler לשליחת טופס. בכל פעם ששולחים את טופס בקשת התרגום, הדף מבצע אימות מינימלי של הטופס כדי לוודא שהערך לא ריק, ואז שולח בקשה אסינכרונית לנקודת הקצה
/request-translation.לבסוף, מופיע סרגל אינטראקטיבי של MDL כדי לציין אם הבקשה הצליחה או אם נתקלה בשגיאה.
- הגוף של דף ה-HTML משתמש בפריסת MDL ובכמה רכיבי MDL כדי להציג רשימה של תרגומים וטופס לבקשת תרגומים נוספים:
פריסת אפליקציית האינטרנט
אתם יכולים להשתמש בסביבה רגילה של App Engine כדי ליצור ולפרוס אפליקציה שפועלת בצורה מהימנה בעומס כבד ועם כמויות גדולות של נתונים.
במדריך הזה משתמשים בסביבה הרגילה של App Engine כדי לפרוס את חזית ה-HTTP.
app.yaml מגדיר את אפליקציית App Engine:
-
באותה ספרייה שבה נמצא הקובץ
app.yaml, פורסים את האפליקציה בסביבה הרגילה של App Engine:gcloud app deploy
בדיקת האפליקציה
אחרי שפורסים את פונקציית Cloud Run ואת אפליקציית App Engine, מנסים לשלוח בקשה לתרגום.
-
כדי להציג את האפליקציה בדפדפן,מזינים את כתובת ה-URL הבאה:
https://PROJECT_ID.REGION_ID.r.appspot.comמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
REGION_ID: קוד ש-App Engine מקצה לאפליקציה
מוצג דף עם רשימה ריקה של תרגומים וטופס לבקשת תרגומים חדשים.
-
-
בשדה Text to translate (טקסט לתרגום), מזינים טקסט לתרגום, לדוגמה,
Hello, World. - בוחרים שפה מהרשימה הנפתחת שאליה רוצים לתרגם את הטקסט.
- לוחצים על שליחה.
- כדי לרענן את הדף, לוחצים על רענון refresh. נוספה שורה חדשה לרשימת התרגומים. אם לא רואים תרגום, מחכים עוד כמה שניות ומנסים שוב. אם עדיין לא מופיע תרגום, אפשר לעבור לקטע הבא בנושא ניפוי באגים באפליקציה.
ניפוי באגים באפליקציה
אם אתם לא מצליחים להתחבר לאפליקציית App Engine או לא רואים תרגומים חדשים, כדאי לבדוק את הדברים הבאים:
-
בודקים שהפקודות
gclouddeploy הושלמו בהצלחה ולא הוחזרו שגיאות. אם היו שגיאות, צריך לתקן אותן ולנסות שוב לפרוס את הפונקציה של Cloud Run ואת האפליקציה של App Engine. -
נכנסים לדף Logs Viewer במסוף Google Cloud .
כניסה לדף Logs Viewer- ברשימה הנפתחת Recently selected resources (משאבים שנבחרו לאחרונה), לוחצים על GAE Application (אפליקציית GAE) ואז על All module_id (כל מזהי המודולים). מוצגת רשימה של בקשות מהביקור שלכם באפליקציה. אם לא מוצגת רשימה של בקשות, מוודאים שבחרתם באפשרות All module_id מהרשימה הנפתחת. אם הודעות השגיאה מודפסות ב Google Cloud מסוף, צריך לוודא שקוד האפליקציה זהה לקוד שמופיע בקטע על הבנת האפליקציה.
-
ברשימה הנפתחת Recently selected resources, לוחצים על Cloud Function ואז על All function name. תופיע פונקציה לכל תרגום שביקשתם. אם לא, בודקים שפונקציית Cloud Run ואפליקציית App Engine משתמשות באותו נושא Pub/Sub:
- בקובץ
background/main.py, מוודאים שהערך שלtopic_nameהוא"translate". - כשפורסים את פונקציית Cloud Run, חשוב לכלול את הדגל
--trigger-topic=translate.
- בקובץ
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט Google Cloud
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת מכונת App Engine
- במסוף Google Cloud , נכנסים לדף Versions של App Engine.
- מסמנים את התיבה שלצד גרסת האפליקציה שלא מוגדרת כברירת מחדל ושרוצים למחוק.
- כדי למחוק את גרסת האפליקציה, לוחצים על Delete.
מחיקת פונקציית Cloud Run
-
מוחקים את הפונקציה של Cloud Run שיצרתם במדריך הזה:
gcloud functions delete Translate
המאמרים הבאים
- אפשר לנסות מדריכים נוספים לפונקציות Cloud Run.
- מידע נוסף על App Engine
- כדאי לנסות את Cloud Run, שמאפשר להריץ קונטיינרים ללא שמירת מצב בסביבה מנוהלת או באשכול Google Kubernetes Engine משלכם.