במדריך הזה נסביר איך ליצור תהליך עבודה לתרגום שמחכה לקלט שלכם – האדם שבתהליך – ואיך לחבר מסד נתונים של Firestore, שתי פונקציות של Cloud Run, את Cloud Translation API ודף אינטרנט שמשתמש ב-Firebase SDK כדי להתעדכן בזמן אמת.
באמצעות Workflows, אפשר לתמוך בנקודת קצה של קריאה חוזרת (או webhook) שממתינה לבקשות HTTP שיגיעו לנקודת הקצה הזו, וממשיכה את הביצוע של זרימת העבודה בשלב מאוחר יותר. במקרה כזה, תהליך העבודה ממתין לקלט שלכם כדי לדחות או לאמת את התרגום של טקסט מסוים, אבל הוא יכול גם להמתין לתהליך חיצוני. מידע נוסף מופיע בקטע המתנה באמצעות קריאות חוזרות (callback).
ארכיטקטורה
במדריך הזה ניצור אפליקציית אינטרנט שתאפשר לכם:
- בדף האינטרנט של התרגום, מזינים את הטקסט שרוצים לתרגם מאנגלית לצרפתית. לוחצים על תרגום.
- מדף האינטרנט, מתבצעת קריאה לפונקציית Cloud Run שמתחילה את ההרצה של תהליך העבודה. הטקסט שצריך לתרגם מועבר כפרמטר גם לפונקציה וגם לתהליך העבודה.
- הטקסט נשמר במסד נתונים של Cloud Firestore. מתבצעת קריאה ל-Cloud Translation API. התרגום שמתקבל נשמר במסד הנתונים. אפליקציית האינטרנט נפרסת באמצעות Firebase Hosting והעדכונים מתבצעים בזמן אמת כדי להציג את הטקסט המתורגם.
- בשלב
create_callbackבתהליך העבודה נוצרת כתובת URL של נקודת קצה לקריאה חוזרת, שנשמרת גם במסד הנתונים של Firestore. בדף האינטרנט מוצגים עכשיו גם הלחצן אימות וגם הלחצן דחייה. - תהליך העבודה מושהה עכשיו וממתין לבקשת HTTP POST מפורשת לכתובת ה-URL של נקודת הקצה של הקריאה החוזרת.
- אתם יכולים להחליט אם לאשר או לדחות את התרגום. לחיצה על לחצן מפעילה פונקציית Cloud Run שנייה, שבתורה מפעילה את נקודת הקצה של הקריאה החוזרת שנוצרה על ידי זרימת העבודה, ומעבירה את סטטוס האישור.
התהליך ימשיך לפעול וישמור את סטטוס האישור
trueאוfalseבמסד הנתונים של Firestore.
בתרשים הבא מוצגת סקירה כללית של התהליך:
מטרות
- פריסת אפליקציית אינטרנט.
- יוצרים מסד נתונים של Firestore לאחסון בקשות התרגום.
- פורסים פונקציות Cloud Run כדי להריץ את תהליך העבודה.
- פורסים ומריצים תהליך עבודה כדי לתזמר את התהליך כולו.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
לפני שמתחילים
יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה Google Cloud מוגבלת.
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של App Engine, Cloud Build, Cloud Run functions, Firestore, Translation ו-Workflows, אם חלק מהם עדיין לא מופעלים:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של App Engine, Cloud Build, Cloud Run functions, Firestore, Translation ו-Workflows, אם חלק מהם עדיין לא מופעלים:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com - מעדכנים את הרכיבים של Google Cloud CLI:
gcloud components update
- נכנסים באמצעות החשבון:
gcloud auth login
- מגדירים את מזהה הפרויקט ואת מיקום ברירת המחדל שמשמשים במדריך הזה:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID export REGION=REGION gcloud config set workflows/location ${REGION}
מחליפים את מה שכתוב בשדות הבאים:
פריסת הפונקציה הראשונה של Cloud Run
פונקציית Cloud Run הזו מפעילה את תהליך העבודה. הטקסט שצריך לתרגם מועבר כפרמטר גם לפונקציה וגם לתהליך העבודה.
יוצרים ספרייה בשם
callback-translationעם ספריות משנה בשמותinvokeTranslationWorkflow,translationCallbackCallו-public:mkdir -p ~/callback-translation/{invokeTranslationWorkflow,translationCallbackCall,public}
עוברים לספרייה
invokeTranslationWorkflow:cd ~/callback-translation/invokeTranslationWorkflow
יוצרים קובץ טקסט עם שם הקובץ
index.jsשמכיל את קוד Node.js הבא:יוצרים קובץ טקסט בשם
package.jsonשמכיל את המטא-נתונים הבאים שלnpm:פורסים את הפונקציה עם טריגר HTTP ומאפשרים גישה לא מאומתת:
gcloud functions deploy invokeTranslationWorkflow \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=invokeTranslationWorkflow \ --set-env-vars PROJECT_ID=${GOOGLE_CLOUD_PROJECT},CLOUD_REGION=${REGION},WORKFLOW_NAME=translation_validation \ --trigger-http \ --allow-unauthenticated
יכול להיות שיחלפו כמה דקות עד שהפונקציה תופעל. לחלופין, אפשר להשתמש בממשק של Cloud Run functions במסוף Google Cloud כדי לפרוס את הפונקציה.
אחרי הפריסה של הפונקציה, אפשר לאשר את המאפיין
httpsTrigger.url:gcloud functions describe invokeTranslationWorkflow
חשוב לשים לב לכתובת ה-URL שמוחזרת כדי שתוכלו להשתמש בה בשלב מאוחר יותר.
פריסת הפונקציה השנייה של Cloud Run
הפונקציה הזו של Cloud Run שולחת בקשת HTTP POST לנקודת הקצה של הקריאה החוזרת שנוצרה על ידי תהליך העבודה, ומעבירה סטטוס אישור שמשקף אם התרגום אומת או נדחה.
עוברים לספרייה
translationCallbackCall:cd ../translationCallbackCall
יוצרים קובץ טקסט עם שם הקובץ
index.jsשמכיל את קוד Node.js הבא:יוצרים קובץ טקסט בשם
package.jsonשמכיל את המטא-נתונים הבאים שלnpm:פורסים את הפונקציה עם טריגר HTTP ומאפשרים גישה לא מאומתת:
gcloud functions deploy translationCallbackCall \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=translationCallbackCall \ --trigger-http \ --allow-unauthenticated
יכול להיות שיחלפו כמה דקות עד שהפונקציה תופעל. לחלופין, אפשר להשתמש בממשק של Cloud Run functions במסוף Google Cloud כדי לפרוס את הפונקציה.
אחרי הפריסה של הפונקציה, אפשר לאשר את המאפיין
httpsTrigger.url:gcloud functions describe translationCallbackCall
חשוב לשים לב לכתובת ה-URL שמוחזרת כדי שתוכלו להשתמש בה בשלב מאוחר יותר.
פריסת תהליך העבודה
תהליך עבודה מורכב מסדרה של שלבים שמתוארים באמצעות התחביר של Workflows, שאפשר לכתוב בפורמט YAML או JSON. זו ההגדרה של תהליך העבודה. אחרי שיוצרים תהליך עבודה, פורסים אותו כדי שיהיה זמין להרצה.
עוברים לספרייה
callback-translation:cd ..
יוצרים קובץ טקסט בשם
translation-validation.yamlעם התוכן הבא:אחרי שיוצרים את תהליך העבודה, אפשר לפרוס אותו, אבל לא להריץ אותו:
gcloud workflows deploy translation_validation --source=translation-validation.yaml
יצירת אפליקציית אינטרנט
יוצרים אפליקציית אינטרנט שקוראת לפונקציית Cloud Functions שמפעילה את זרימת העבודה. דף האינטרנט מתעדכן בזמן אמת כדי להציג את התוצאה של בקשת התרגום.
עוברים לספרייה
public:cd public
יוצרים קובץ טקסט עם שם הקובץ
index.htmlשמכיל את תגי ה-HTML הבאים. (בשלב מאוחר יותר, תשנו את הקובץindex.htmlותוסיפו את הסקריפטים של Firebase SDK).יוצרים קובץ טקסט בשם
script.jsשמכיל את קוד ה-JavaScript הבא:עורכים את הקובץ
script.jsומחליפים את ה-placeholders UPDATE_MEבכתובות ה-URL של פונקציות Cloud Run שרשמתם קודם.בשיטה
translateBtn.addEventListener, מחליפים אתconst fnUrl = UPDATE_ME;בערך הבא:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/invokeTranslationWorkflow";
בפונקציה
callCallbackUrl, מחליפים אתconst fnUrl = UPDATE_ME;ב:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/translationCallbackCall";
יוצרים קובץ טקסט בשם
style.cssשמכיל את סגנונות העיצוב הבאים:
הוספת Firebase לאפליקציית אינטרנט
במדריך הזה, דף ה-HTML, סקריפט ה-JavaScript וגיליון הסגנונות של ה-CSS נפרסים כנכסים סטטיים באמצעות אירוח ב-Firebase, אבל אפשר לארח אותם בכל מקום ולהפעיל אותם באופן מקומי במחשב שלכם למטרות בדיקה.
יצירת פרויקט Firebase
לפני שמוסיפים את Firebase לאפליקציה, צריך ליצור פרויקט Firebase כדי לקשר אותו לאפליקציה.
-
במסוף Firebase, לוחצים על יצירת פרויקט, ואז בוחרים את הפרויקט הקיים Google Cloud בתפריט הנפתח כדי להוסיף לו משאבי Firebase.
-
לוחצים על המשך עד שמופיעה האפשרות להוסיף את Firebase.
-
מדלגים על ההגדרה של Google Analytics בפרויקט.
-
לוחצים על הוספת Firebase.
מערכת Firebase מקצה באופן אוטומטי משאבים לפרויקט Firebase. בסיום התהליך, תועברו לדף הסקירה הכללית של הפרויקט במסוף Firebase.
רישום האפליקציה ב-Firebase
אחרי שיש לכם פרויקט Firebase, אתם יכולים להוסיף אליו את אפליקציית האינטרנט.
במרכז הדף של סקירת הפרויקט, לוחצים על סמל האינטרנט (</>) כדי להפעיל את תהליך ההגדרה.
מזינים כינוי לאפליקציה.
הנתונים האלה גלויים רק לכם במסוף Firebase.
מדלגים על ההגדרה של אירוח ב-Firebase בשלב הזה.
לוחצים על Register app וממשיכים אל המסוף.
הפעלת Cloud Firestore
אפליקציית האינטרנט משתמשת ב-Cloud Firestore כדי לקבל ולשמור נתונים. צריך להפעיל את Cloud Firestore.
בקטע Build (פיתוח) במסוף Firebase, לוחצים על Firestore Database (מסד נתונים של Firestore).
(יכול להיות שתצטרכו להרחיב קודם את חלונית הניווט הימנית כדי לראות את הקטע Build).
בחלונית Cloud Firestore, לוחצים על יצירת מסד נתונים.
בוחרים באפשרות הפעלה במצב בדיקה, באמצעות כלל אבטחה כמו זה שמופיע בהמשך:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write; } } }
אחרי שקוראים את כתב הויתור לגבי כללי האבטחה, לוחצים על הבא.
הגדרת המיקום שבו מאוחסנים הנתונים ב-Cloud Firestore. אפשר לאשר את ברירת המחדל או לבחור אזור שקרוב אליכם.
לוחצים על הפעלה כדי להקצות את Firestore.
מוסיפים את Firebase SDK ומפעילים את Firebase
ב-Firebase יש ספריות JavaScript לרוב מוצרי Firebase. לפני שמשתמשים באירוח ב-Firebase, צריך להוסיף את Firebase SDK לאפליקציית האינטרנט.
- כדי לאתחל את Firebase באפליקציה, צריך לספק את הגדרות הפרויקט של האפליקציה ב-Firebase.
- במסוף Firebase, עוברים אל Project settings (הגדרות הפרויקט) .
- בחלונית האפליקציות שלך, בוחרים את האפליקציה הרצויה.
- בחלונית SDK setup and configuration (הגדרה וקביעת הגדרות של SDK), כדי לטעון ספריות של Firebase SDK מ-CDN, בוחרים באפשרות CDN.
- מעתיקים את קטע הקוד לקובץ
index.htmlבתחתית התג<body>, ומחליפים את הערכים הזמניים לשמירת מקוםXXXX.
מתקינים את Firebase JavaScript SDK.
אם עדיין אין לכם קובץ
package.json, יוצרים אותו על ידי הפעלת הפקודה הבאה מהספרייהcallback-translation:npm initמריצים את הפקודה הבאה כדי להתקין את חבילת ה-npm
firebaseולשמור אותה בקובץpackage.json:npm install firebase
אתחול ופריסה של הפרויקט
כדי לקשר את קובצי הפרויקט המקומיים לפרויקט Firebase, צריך לאתחל את הפרויקט. אחרי זה תוכלו לפרוס את אפליקציית האינטרנט.
מהספרייה
callback-translation, מריצים את הפקודה הבאה:firebase initבוחרים באפשרות
Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys.בוחרים להשתמש בפרויקט קיים ומזינים את מזהה הפרויקט.
מאשרים את
publicכספריית הבסיס הציבורית שמוגדרת כברירת מחדל.בוחרים להגדיר אפליקציה של דף יחיד.
דילוג על הגדרת גרסאות build ופריסות אוטומטיות באמצעות GitHub.
בהודעה
File public/index.html already exists. Overwrite?, מקלידים לא.עוברים לספרייה
public:cd public
מהספרייה
public, מריצים את הפקודה הבאה כדי לפרוס את הפרויקט באתר:firebase deploy --only hosting
בדיקה מקומית של אפליקציית האינטרנט
אירוח ב-Firebase מאפשר לכם לראות ולבדוק שינויים באופן מקומי ולקיים אינטראקציה עם משאבי פרויקט של בק-אנד שעברו אמולציה. כשמשתמשים ב-firebase serve, האפליקציה מקיימת אינטראקציה עם קצה עורפי מדומה בשביל תוכן האירוח וההגדרה, אבל עם הקצה העורפי האמיתי בשביל כל שאר משאבי הפרויקט. במדריך הזה אפשר להשתמש ב-firebase serve, אבל לא מומלץ להשתמש בו כשמבצעים בדיקות נרחבות יותר.
מהספרייה
public, מריצים את הפקודה הבאה:firebase serveפותחים את אפליקציית האינטרנט בכתובת ה-URL המקומית שמוחזרת (בדרך כלל
http://localhost:5000).מזינים טקסט באנגלית ולוחצים על תרגום.
תרגום של הטקסט לצרפתית אמור להופיע.
עכשיו אפשר ללחוץ על אימות או על דחייה.
במסד הנתונים של Firestore, אפשר לאמת את התוכן. הוא אמור להיראות כך:
approved: true callback: "https://workflowexecutions.googleapis.com/v1/projects/26811016474/locations/us-central1/workflows/translation_validation/executions/68bfce75-5f62-445f-9cd5-eda23e6fa693/callbacks/72851c97-6bb2-45e3-9816-1e3dcc610662_1a16697f-6d90-478d-9736-33190bbe222b" text: "The quick brown fox jumps over the lazy dog." translation: "Le renard brun rapide saute par-dessus le chien paresseux."הסטטוס
approvedהואtrueאוfalse, בהתאם לאישור או לדחייה של התרגום.
כל הכבוד! יצרתם תהליך עבודה לתרגום עם מעורבות אנושית שמשתמש בקריאות חוזרות (callback) של Workflows.
הסרת המשאבים
אם יצרתם פרויקט חדש בשביל המדריך הזה, תמחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שנוספו במדריך הזה, תצטרכו למחוק את המשאבים שנוצרו לצורך המדריך.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבים של מדריך
מסירים את הגדרת ברירת המחדל של ה-CLI של gcloud שהוספתם במהלך ההגדרה של המדריך:
gcloud config unset workflows/location
מחיקת תהליך העבודה שנוצר במדריך הזה:
gcloud workflows delete WORKFLOW_NAME
מוחקים את הפונקציות של Cloud Run שיצרתם במדריך הזה:
gcloud functions delete FUNCTION_NAME
אפשר גם למחוק פונקציות Cloud Run מGoogle Cloud המסוף.