במדריך הזה נסביר איך ליצור תהליך עבודה לתרגום שמחכה לקלט שלכם – האדם שבתהליך – ואיך לחבר מסד נתונים של Firestore, שתי פונקציות של Cloud Run, את Cloud Translation API ודף אינטרנט שמשתמש ב-Firebase SDK כדי להתעדכן בזמן אמת.
בעזרת Workflows, אתם יכולים לתמוך בנקודת קצה (endpoint) של קריאה חוזרת (callback) (או לפעולת webhook) שממתינה לבקשות HTTP שיגיעו לנקודת הקצה הזו, וממשיכה את הפעלת תהליך העבודה במועד מאוחר יותר. במקרה הזה, תהליך העבודה ממתין לקלט שלכם כדי לדחות או לאמת את התרגום של טקסט מסוים, אבל הוא יכול גם להמתין לתהליך חיצוני. מידע נוסף מופיע בקטע המתנה באמצעות קריאות חוזרות (callback).
ארכיטקטורה
במדריך הזה ניצור אפליקציית אינטרנט שתאפשר לכם:
- בדף האינטרנט של התרגום, מזינים את הטקסט שרוצים לתרגם מאנגלית לצרפתית. לוחצים על תרגום.
- מדף האינטרנט, מתבצעת קריאה לפונקציית Cloud Run שמתחילה את הביצוע של תהליך העבודה. הטקסט שצריך לתרגם מועבר כפרמטר גם לפונקציה וגם לתהליך העבודה.
- הטקסט נשמר במסד נתונים של Cloud Firestore. Cloud Translation API. התרגום שמתקבל נשמר במסד הנתונים. אפליקציית האינטרנט נפרסת באמצעות Firebase Hosting והעדכונים מתבצעים בזמן אמת כדי להציג את הטקסט המתורגם.
- השלב
create_callbackבתהליך העבודה יוצר כתובת URL של נקודת קצה (endpoint) לקריאה חוזרת (callback), שנשמרת גם במסד הנתונים של Firestore. בדף האינטרנט מוצגים עכשיו גם הלחצן אימות וגם הלחצן דחייה. - תהליך העבודה מושהה עכשיו וממתין לבקשת 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, 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, 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, לוחצים על Create a project ובוחרים את הפרויקט הקיים ב- 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, לוחצים על יצירת מסד נתונים.
בוחרים באפשרות Start in test mode, ומשתמשים בכלל אבטחה כמו זה:
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?, מקלידים No.עוברים לספרייה
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, בהתאם לשאלה אם אישרתם או דחיתם את התרגום.
כל הכבוד! יצרתם תהליך עבודה לתרגום עם האדם שבתהליך, שמשתמש בקריאות חוזרות (callbacks) של 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 .