במדריך הזה נסביר איך ליצור תהליך עבודה לתרגום שממתין לקלט שלכם – האדם שבתהליך – ומקשר בין מסד נתונים של Firestore, שתי פונקציות של Cloud Run, Cloud Translation API ודף אינטרנט שמשתמש ב-Firebase SDK כדי להתעדכן בזמן אמת.
באמצעות Workflows, אפשר לתמוך בנקודת קצה של קריאה חוזרת (או webhook) שממתינה לבקשות HTTP שיגיעו לנקודת הקצה הזו, וממשיכה את הביצוע של תהליך העבודה בשלב מאוחר יותר. במקרה הזה, תהליך העבודה ממתין לקלט שלכם כדי לדחות או לאמת את התרגום של טקסט מסוים, אבל הוא יכול גם להמתין לתהליך חיצוני. מידע נוסף מופיע בקטע המתנה באמצעות קריאות חוזרות (callback).
ארכיטקטורה
במדריך הזה ניצור אפליקציית אינטרנט שתאפשר לכם:
- בדף האינטרנט של התרגום, מזינים את הטקסט שרוצים לתרגם מאנגלית לצרפתית. לוחצים על תרגום.
- מדף האינטרנט, מתבצעת קריאה לפונקציית Cloud Run שמתחילה את ההרצה של תהליך העבודה. הטקסט שצריך לתרגם מועבר כפרמטר גם לפונקציה וגם לתהליך העבודה.
- הטקסט נשמר במסד נתונים של Cloud Firestore. מתבצעת קריאה ל-Cloud Translation API. התרגום שמתקבל נשמר במסד הנתונים. אפליקציית האינטרנט נפרסת באמצעות אירוח ב-Firebase ומתעדכנת בזמן אמת כדי להציג את הטקסט המתורגם.
- בשלב
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, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים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, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים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ומחליפים את ה-placeholdersUPDATE_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, לוחצים על יצירת פרויקט, ואז בוחרים את הפרויקט הקיים בתפריט הנפתח כדי להוסיף לו משאבי Firebase. Google Cloud
-
לוחצים על המשך עד שמופיעה האפשרות להוסיף את Firebase.
-
מדלגים על ההגדרה של Google Analytics בפרויקט.
-
לוחצים על הוספת Firebase.
מערכת Firebase מקצה באופן אוטומטי משאבים לפרויקט Firebase. בסיום התהליך, תועברו לדף הסקירה הכללית של הפרויקט במסוף Firebase.
רישום האפליקציה ב-Firebase
אחרי שיש לכם פרויקט Firebase, אתם יכולים להוסיף אליו את אפליקציית האינטרנט.
במרכז דף סקירת הפרויקט, לוחצים על סמל האינטרנט (</>) כדי להפעיל את תהליך ההגדרה.
מזינים כינוי לאפליקציה.
הנתונים האלה גלויים רק לכם במסוף Firebase.
מדלגים על הגדרת אירוח ב-Firebase בשלב הזה.
לוחצים על Register app (רישום האפליקציה) וממשיכים אל המסוף.
הפעלת Cloud Firestore
אפליקציית האינטרנט משתמשת ב-Cloud Firestore כדי לקבל ולשמור נתונים. צריך להפעיל את Cloud Firestore.
בקטע Build (פיתוח) במסוף Firebase, לוחצים על Firestore Database (מסד נתונים של Firestore).
(יכול להיות שתצטרכו להרחיב קודם את חלונית הניווט הימנית כדי לראות את הקטע יצירה).
בחלונית 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 SDKs לאפליקציית האינטרנט.
- כדי להפעיל את Firebase באפליקציה, צריך לספק את הגדרות הפרויקט של Firebase
באפליקציה.
- במסוף Firebase, עוברים אל Project settings (הגדרות הפרויקט) .
- בחלונית האפליקציות שלך, בוחרים את האפליקציה.
- בחלונית SDK setup and configuration (הגדרה והגדרה של SDK), כדי לטעון ספריות של Firebase SDK מ-CDN, בוחרים באפשרות CDN.
- מעתיקים את קטע הקוד לקובץ
index.htmlבתחתית התג<body>, ומחליפים את ערכי ה-placeholderXXXX.
מתקינים את Firebase JavaScript SDK.
אם עדיין אין לכם קובץ
package.json, יוצרים אותו על ידי הרצת הפקודה הבאה מהספרייהcallback-translation:npm initמריצים את הפקודה הבאה כדי להתקין את חבילת
firebasenpm ולשמור אותה בקובץ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 .