1. סקירה כללית
סדרת המדריכים הזו (מדריכים מעשיים בקצב אישי) נועדה לעזור למפתחים להבין את האפשרויות השונות שעומדות לרשותם במהלך פריסת האפליקציות שלהם. תלמדו איך להשתמש ב-Google Cloud Translation API באפליקציית אינטרנט פשוטה. אפשר להפעיל את האפליקציה באופן מקומי או לפרוס אותה בפלטפורמת מחשוב ללא שרת (Cloud Run) (App Engine, Cloud Functions או Cloud Run).
אתם תעשו את מדריך ה-JavaScript הזה באמצעות Node.js באמצעות מסגרת האינטרנט Express.js. תלמדו גם איך לגשת אל ממשקי ה-API של Google Cloud מפלטפורמות ללא שרת (serverless). כל הגרסאות של האפליקציה הזו מגיעות מ-"nebulous serverless" מאגר בקוד פתוח, שכולל גרסת Python של האפליקציה הזו ו-Codelabs עצמאיים. המאגר מארח גם אפליקציות דומות שמדגימות למפתחים איך לגשת לממשקי Google API שאינם של Cloud מפלטפורמות ללא שרת (serverless).
ה-Codelab הזה מתמקד בפריסת האפליקציה בפלטפורמות המודגשות שמפורטות למעלה.
כאן מוסבר איך
- שימוש ב-Google Cloud APIs, ובמיוחד ב-Cloud Translation API (מתקדם או גרסה 3)
- הפעלה של אפליקציית אינטרנט בסיסית באופן מקומי או פריסה בפלטפורמת מחשוב ללא הפרעות ב-Cloud
מה צריך להכין
- פרויקט ב-Google Cloud עם חשבון פעיל לחיוב ב-Cloud
- מסגרת אינטרנט שמותקנת להפעלה מקומית ( Flask למדריך Python או Express למדריך JavaScript/Node.js)
- לפחות פלטפורמת מחשוב אחת ללא שרת (sserverless) שמופעלת לפריסות של Google Cloud
- כישורי תכנות בסיסיים (Python או JavaScript/Node.js)
- ידע בעבודה עם פקודות בסיסיות במערכת הפעלה
סקר
איך תשתמשו במדריך הזה?
מה דעתך על חוויית הפיתוח ב-Python או ב-Node.js?
איזה דירוג מגיע לדעתך לחוויית השימוש שלך בשירותי Google Cloud?
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא נעשה בה שימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
- Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-
PROJECT_ID
), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט. - יש ערך שלישי, Project Number, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, פועלים לפי ההנחיות למחיקת המשאבים. בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
3. הפעלת Translation API
בקטע הזה נסביר איך להפעיל את Google APIs באופן כללי. עבור האפליקציה לדוגמה שלנו, תפעיל את Cloud Translation API. צריך גם להפעיל את App Engine, Cloud Functions ו/או Cloud Run (וגם Cloud Artifact Registry), בהתאם לפלטפורמה שבה רוצים לפרוס את האפליקציה לדוגמה.
הפעלת Google APIs
מבוא
ללא קשר ל-Google API שבו אתם רוצים להשתמש באפליקציה, עליכם להפעיל אותם. את ממשקי ה-API אפשר להפעיל משורת הפקודה או ממסוף Cloud. תהליך ההפעלה של ממשקי API זהה, לכן לאחר שמפעילים ממשק API אחד, ניתן לבצע שינוי אחר באותו אופן.
אפשרות 1: gcloud
ממשק שורת הפקודה (Cloud Shell או הסביבה המקומית)
אומנם התהליך של הפעלת ממשקי API ממסוף Cloud הוא נפוץ יותר, אבל יש מפתחים שמעדיפים לעשות הכול משורת הפקודה. לשם כך, צריך לחפש את 'שם השירות' של API. נראה שכתובת ה-URL היא: SERVICE_NAME
.googleapis.com
. תוכלו למצוא את המוצרים האלה בתרשים המוצרים הנתמכים או לשלוח שאילתה עליהם באופן פרוגרמטי באמצעות Google Discovery API.
כשכוללים את המידע הזה באמצעות Cloud Shell (או סביבת הפיתוח המקומית שבה מותקן כלי שורת הפקודה gcloud
), אפשר להפעיל API באופן הבא:
gcloud services enable SERVICE_NAME.googleapis.com
דוגמה 1: הפעלה של Cloud Vision API
gcloud services enable vision.googleapis.com
דוגמה 2: הפעלת Google App Engine
gcloud services enable appengine.googleapis.com
דוגמה 3: הפעלה של מספר ממשקי API בבקשה אחת. לדוגמה, אם ב-Codelab הזה יש צופים שפורסים אפליקציה באמצעות Cloud Translation API ל-App Engine, Cloud Functions ו-Cloud Run, שורת הפקודה תהיה:
gcloud services enable appengine.googleapis.com cloudfunctions.googleapis.com artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
הפקודה הזו מפעילה את App Engine, Cloud Functions, Cloud Run ואת Cloud Translation API. בנוסף, היא מפעילה את Cloud Artifact Registry כי מערכת Cloud Build צריכה לרשום קובצי אימג' של קונטיינרים כדי לפרוס אותם ב-Cloud Run.
אפשרות 2: מסוף Cloud
אפשר להפעיל את Google APIs גם דרך מנהל ה-API. במסוף Cloud, נכנסים אל API Manager ובוחרים באפשרות Library.
כדי לראות את התוצאות התואמות, מתחילים להזין שם של API בסרגל החיפוש:
בוחרים את ממשק ה-API שרוצים להפעיל ולוחצים על הלחצן Enable (הפעלה):
תהליך ההפעלה של כל ממשקי ה-API דומה, בלי קשר ל-Google API שבו רוצים להשתמש.
עלות
אפשר להשתמש בהרבה ממשקי API של Google ללא עמלות, אבל השימוש ברוב המוצרים וממשקי ה-API של Google Cloud כרוך בעלויות. כשמפעילים את Cloud APIs, יכול להיות שתתבקשו ליצור חשבון פעיל לחיוב. עם זאת, בחלק ממוצרי Google Cloud יש התכונה "חינם תמיד" [tier], שעליכם לחרוג ממנה כדי לצבור חיובי חיוב.
משתמשי GCP חדשים זכאים לתקופת ניסיון בחינם, נכון לעכשיו בשווי 300 $למשך 90 הימים הראשונים. בדרך כלל, Codelabs לא כרוך בחיובים רבים או בחיובים כלשהם, ולכן אנו ממליצים להמתין את תקופת הניסיון בחינם עד שתהיה מוכנים באמת להתנסות, במיוחד מפני שמדובר במבצע חד-פעמי. המכסות של תוכנית ללא תשלום לא פג תוקף והן חלות גם אם לא משתמשים בתקופת הניסיון בחינם.
המשתמשים צריכים לעיין במידע על התמחור של כל API לפני שהם מפעילים אותו (לדוגמה: דף תמחור של Cloud Vision API ), ובמיוחד לציין אם יש לו תוכנית ללא תשלום, ואם כן, מה שלה. כל עוד לא תצברו חיובים במסגרת המגבלות היומיות או החודשיות שצוינו, לא תצברו חיובים. יש הבדלים בתמחור ובתוכניות ללא תשלום בין ממשקי ה-API של קבוצות המוצרים ב-Google. דוגמאות:
- Google Cloud/GCP – החיוב על כל מוצר מתבצע באופן שונה ובדרך כלל התשלום לפי שימוש. אפשר לעיין למעלה במידע על התוכנית ללא תשלום.
- מפות Google — כולל חבילה של ממשקי API ומציע למשתמשים קרדיט בסך 200 דולר ארה"ב בחודש בחינם.
- ממשקי ה-API של Google Workspace (לשעבר G Suite) – ממשקי ה-API של השימוש (עד מגבלות מסוימות) מכוסה בדמי מינוי חודשיים ל-Workspace, כך שאין חיוב ישיר על השימוש בממשקי API של אפליקציות כמו Gmail , Google Drive, יומן, Docs , Sheets או Slides.
מוצרים שונים של Google מחויבים בצורה שונה, לכן חשוב לעיין בתיעוד המתאים למידע הזה.
לוודא שהשירותים הרצויים מופעלים
מוודאים ש-Cloud Translation API ב-API Manager כפי שמוסבר למעלה. אם לא הפעלתם את הפלטפורמות ללא שרת (serverless) משורת הפקודה, אפשר לעשות זאת מכל מרכז בקרה במסוף Cloud: App Engine, Cloud Functions, Cloud Run.
אומנם מוצג מידע חזותי להפעלת ממשקי API ממסוף Cloud, אבל מהר יותר אפשר להשתמש בכלי gcloud
, שלוקח שניות להפעיל את כל השירותים:
$ gcloud services enable appengine.googleapis.com \ cloudfunctions.googleapis.com artifactregistry.googleapis.com \ run.googleapis.com translate.googleapis.com Operation "operations/acf.p2-xxxxxx035451-704918f2-5470-4436-9bdd-c3b204yyyyyy" finished successfully.
מידע נוסף על עלויות
הקטע שלמעלה בנושא עלויות כללי בכל ממשקי ה-API של Google. נרחיב על המדריך הזה. למרות שהמכסה החודשית שלה לא מופיעה ברמה הכוללת של "חינם תמיד" דף סיכום הרמה, בדף התמחור של Translate API, שבו מצוין שכל המשתמשים מקבלים מדי חודש כמות קבועה של תווים מתורגמים. אם היתרה נמוכה מהסף הזה, לא יצטברו חיובים מה-API. מידע נוסף על עלויות השימוש בפלטפורמות ללא שרת (serverless) של Google Cloud זמין בקטע 'עלויות' במאגר. פעולת הניקוי בסוף נסביר איך להפסיק את צבירת החיוב אחרי הסיום של ה-Codelab הזה.
4. קבלת קוד האפליקציה לדוגמה
הורדת קובץ ZIP או מאגר שכפול
- מורידים את קובץ ה-ZIP או משכפלים את המאגר עם
git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git
- אם אין סביבת פיתוח מקומית ואתם רוצים לעשות את המדריך הזה ב-Cloud Shell, אפשר לשכפל את המאגר באמצעות אותה פקודת
git clone
. - אפשר לגשת לקובץ ה-ZIP גם דרך לחצן הקוד הירוק שלו, כפי שמוצג בצילום המסך הבא:
עכשיו, אחרי שיש לכם את הכול, כדאי ליצור עותק מלא של התיקייה כדי לבצע את המדריך הספציפי הזה, כי סביר להניח שיהיה צורך למחוק או לשנות את הקבצים. אם רוצים לבצע פריסה אחרת, אפשר להתחיל מחדש על ידי העתקה של הפריסה המקורית, כדי שלא תצטרכו לשכפל או להוריד אותה שוב.
5. אישור סביבת Node.js
כדי להגדיר את סביבת Node.js:
- יש לוודא שמותקנות הגרסאות העכשוויות של Node (>=10) ו-NPM (>=6)
- עוברים למקום שבו שכפולם את המאגר (או חילצתם את קובץ ה-ZIP) ואז עוברים לתיקייה
cloud/nodejs
- אישור שהנוכחות של
package.json
קיימת ואז הרצה שלnpm install
עבור אפשרות 1 שלמעלה, אתם יכולים לבדוק אילו גרסאות יש לכם בשורת הפקודה:
$ node -v v17.0.1 $ npm -v 8.1.0
6. סיור באפליקציה לדוגמה
האפליקציה לדוגמה היא נגזרת פשוטה של Google Translate שמבקשת מהמשתמשים להזין טקסט באנגלית ולקבל תרגום מקביל של הטקסט הזה בספרדית.
קובץ התצורה package.json
מציין אילו חבילות של צד שלישי נדרשות לאפליקציה (שימו לב שגרסאות של חבילות עשויות להתעדכן מעבר למפורט כאן):
{
"name": "cloud-nebulous-serverless-nodejs",
"version": "0.0.1",
"description": "Nebulous Serverless sample app",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "mocha test/test_neb.js"
},
"author": "Google LLC",
"license": "Apache-2.0",
"dependencies": {
"@google-cloud/translate": "^6.3.1",
"express": "^4.17.1",
"nunjucks": "^3.2.3"
},
"devDependencies": {
"mocha": "^9.1.3",
"supertest": "^6.1.6"
}
}
עכשיו צריך לפתוח את הקובץ index.js
כדי שנוכל לראות איך זה עובד. אם משמיטים את השורות של הערות לגבי רישוי, נראה כך בחלק העליון והתחתון:
const express = require('express');
const nunjucks = require('nunjucks');
const {TranslationServiceClient} = require('@google-cloud/translate');
const app = express();
app.use(express.urlencoded({extended: true}));
nunjucks.configure('templates', {autoescape: true, express: app});
const TRANSLATE = new TranslationServiceClient();
const PORT = process.env.PORT || 8080;
const SOURCE = ['en', 'English'];
const TARGET = ['es', 'Spanish'];
let parent;
TRANSLATE.getProjectId().then(result => {
parent = `projects/${result}`;
});
if (!process.env.FUNCTION_TARGET) {
app.listen(PORT, () =>
console.log(`Listening on port ${PORT}`)
);
}
# . . . [translate() function definition] . . .
app.all('/', translate);
module.exports = {
app
};
- ממשקי ה-
require
כוללים פונקציונליות של framework ויצירת תבניות, ואת ספריית הלקוח של Cloud Translation API. - המשתנים הגלובליים מייצגים את אפליקציית האינטרנט, את מזהה הפרויקט ב-Cloud, את לקוח ה-Translation API ואת 'נתיב המיקום' ההורה. לקריאות ל-Translate API ול
SOURCE
ולTARGET
. במקרה הזה השפה היא אנגלית (en
) וספרדית (es
), אבל אפשר לשנות את הערכים האלה לקודים של שפות אחרות שנתמכות על ידי Cloud Translation API. - הרכיב הראשון בכל צמד (
SOURCE
ו-TARGET
) הוא קוד השפה, והשני הוא שם השפה (והוא משמש למטרות תצוגה בלבד כי הוא לא רלוונטי ל-API). - השורות כמה בחלק התחתון הן לשלוח את כל בקשות ה-HTTP אל
translate()
ולאחר מכן לייצא את אובייקט האפליקציהapp
.
לבסוף, באמצע index.js
נמצאת הלב של האפליקציה, הפונקציה translate()
:
async function translate(req, rsp) {
let text = null;
let translated = null;
if (req.method === 'POST') {
text = req.body.text.trim();
if (text) {
const data = {
contents: [text],
parent: parent,
targetLanguageCode: TARGET[0]
};
const [response] = await TRANSLATE.translateText(data);
translated = response.translations[0].translatedText;
}
}
const context = {
orig: {text: text, lc: SOURCE},
trans: {text: translated, lc: TARGET}
};
rsp.render('index.html', context);
}
הפונקציה הראשית מבצעת את העבודה הקשה על קלט של משתמשים, וקריאה ל-Translation API כדי לבצע את העבודה הקשה. נסביר קצת:
- מאפסים את המשתנים הבסיסיים של הטופס. מדובר בעיקר בבקשות GET כי בבקשות POST יהיו נתונים שיחליפו אותן.
- אם מדובר ב-POST, יש לשלוף את הטקסט לתרגום, ואם הוא לא ריק, צריך ליצור מבנה JSON שמייצג את דרישת המטא-נתונים של ה-API. לאחר מכן קוראים ל-API לקבלת שירות.
- לא עברנו ב-
SOURCE[0]
ל-API למקור ספציפי באנגלית. אם לא כוללים את שפת המקור, מבקשים מה-API לזהות אוטומטית את שפת המקור (ראוsourceLanguageCode
במסמכים). - בכל מקרה, צריך לעצב את התוצאות בפועל (POST) או ללא נתונים (GET) בהקשר של התבנית ולעיבוד שלה.
החלק החזותי של האפליקציה נמצא בקובץ התבנית index.html
. מוצגות כל התוצאות שתורגמו בעבר (אם זה ריק) ואחריו הטופס שמבקש לתרגום:
<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<style>
body {
font-family: Verdana, Helvetica, sans-serif;
background-color: #DDDDDD;
}
</style>
<h2>My Google Translate (1990s edition)</h2>
{% if trans['text'] %}
<h4>Previous translation</h4>
<li><b>Original</b>: {{ orig['text'] }} (<i>{{ orig['lc'][0] }}</i>)</li>
<li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}
<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>
עד סוף המדריך, תוכלו לבחור אחת מארבע האפשרויות לפריסה ולהפעלה של האפליקציה הזו. כל הפריסות הן אופציונליות, כלומר אפשר לבצע חלק מהן או את כולן.
- הפעלה מקומית של השירות
- פריסה ל-App Engine (סביבה סטנדרטית)
- פריסה ב-Cloud Functions
- פריסה ב-Cloud Run
7. אפשרות 1: הפעלה מקומית של השירות
החלק הזה ב-Codelab מיועד להרצה מקומית בלבד. אם אתם פורסים רק בענן, עברו לקטע הבא.
כדי להריץ את האפליקציה לדוגמה באופן מקומי, יש שלושה שלבים ייחודיים:
- יצירה של חשבון שירות
- יצירת זוג מפתחות ציבורי/פרטי של חשבון שירות
- הורדת קובץ פרטי כניסה וחבילה עם קוד האפליקציה
- הפעלת השירות
הסבר על חשבונות שירות
חשבונות שירות הם מנגנון האבטחה שמאפשר גישה ל-Google APIs לאפליקציות מבוססות-ענן בזמן גישה לנתונים שלא שייכים למשתמשים אנושיים. במהלך הפריסה ב-Cloud, כדי לקצר את זמן ההרצה של משתמשים חדשים לענן, כל פלטפורמות המחשוב של Google Cloud (ללא שרת או אחרות) מספקות חשבונות שירות שמוגדרים כברירת מחדל.
חשבונות שירות שמוגדרים כברירת מחדל כוללים קבוצה רחבה של הרשאות ל"ביצוע קלפים", אבל כשמתכוננים להשקה של שירות ייצור, מומלץ מאוד שהמשתמשים יפעלו בהתאם לשיטה המומלצת של 'הרשאות מינימליות', אלא ליצור חשבונות שירות בניהול המשתמשים עם מספיק הרשאות כדי שהאפליקציה תפעל כראוי. בכל מקרה, אין חשבונות שירות שמוגדרים כברירת מחדל לפריסות מקומיות. לכן צריך ליצור חשבון שירות ומפתח של חשבון שירות (למעשה, זוג מפתחות ציבורי/פרטי) ולהגדיר את פרטי הכניסה האלה לזמינים לקוד של האפליקציה.
יצירת התאמת מפתחות של חשבונות שירות והורדה של קובץ פרטי כניסה
פועלים לפי ההוראות שמופיעות בדף הזה כדי ליצור חשבון שירות וזוג מפתחות ציבורי/פרטי להרצה מקומית. כשיוצרים את המפתח לחשבון השירות, מוצגת בקשה לתת את ההרשאות הרצויות. כדי שתהיה לך גישה ל-API, צריך לבחור באפשרות roles/cloudtranslate.user
.
אחרי שתיצרו את זוג המפתחות, תוצג בקשה להוריד את קובץ המפתח של חשבונות השירות. קוראים לו credentials.json
ומעבירים אותו לתיקייה ברמה העליונה של האפליקציה. עכשיו צריך להנחות את Cloud SDK להשתמש בפרטי הכניסה האלה: מגדירים את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS
כך שיצביע על הקובץ הזה. מידע נוסף על התהליך הזה זמין גם בדף הזה, שעוסק בשימוש בחשבונות שירות.
הפעלת השירות
כשתהיו מוכנים להתקדם, הפעילו את שרת Express באופן מקומי באמצעות הפקודה הבאה:
$ npm start > cloud-nebulous-serverless-nodejs@0.0.1 start > node index.js Listening on port 8080
נכנסים לדפדפן האינטרנט כדי להתחבר אליו בכתובת localhost:8080. אתם אמורים לראות משהו כזה:
כדאי לתרגם משהו כדי לראות שהוא עובד!
כשתהיו מרוצים ממנו, תוכלו לצאת מהשרת באמצעות ^C (control-C) ולצאת ממנו. הפעלת פריסה מקומית. יש גם חדשות טובות: הרבה יותר קל לפרוס בענן.
פתרון בעיות
האם מופיעה הודעת שגיאה כזו כשמבקשים תרגום?
node:fs:2486 handleErrorFromBinding(ctx); ^ Error: The file at credentials.json does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/tmp/nodejs/credentials.json' . . .
פתרון: השגיאה הזו מופיעה אם לא השלמתם את היצירה של חשבון שירות והורדתם את הקובץ של זוג המפתחות הציבורי/הפרטי credentials.json
. צריך לחזור אל " אפשרות 1: הפעלת השירות באופן מקומי" ולהשלים את התהליך הזה, מתקינים cred בתיקייה הראשית לפני שממשיכים.
8. אפשרות 2: פריסה ב-App Engine (סביבה סטנדרטית)
הקטע הזה ב-Codelab מיועד רק לפריסה ב-Node App Engine. אם זה לא מעניין אתכם, תעברו לקטע הבא.
הפריסה הזו משתמשת בקובץ התצורה app.yaml
שמציין ל-App Engine באיזה זמן ריצה להשתמש עם שורה אחת:
runtime: nodejs16
הקובץ app.yaml
לא נמצא בשימוש של Cloud Functions ולא של Cloud Run. אם אתם לא מתכוונים להשתמש ב-App Engine, יכול להיות שהקובץ הזה יימחק בבטחה. כשתהיו מוכנים לפרוס את App Engine, מריצים את הפקודה הבאה:
$ gcloud app deploy
אחרי שבוחרים אזור, הפלט של gcloud app deploy
יהיה הרבה פחות מפורט והוא אמור להיראות כך:
Services to deploy: descriptor: [/private/tmp/nodejs/app.yaml] source: [/private/tmp/nodejs] target project: [PROJECT_ID] target service: [default] target version: [2021...] target url: [https://PROJECT_ID.REG_ABBR.appspot.com] target service account: [App Engine default service account] Do you want to continue (Y/n)? Beginning deployment of service [default]... ╔════════════════════════════════════════════════════════════╗ ╠═ Uploading 2 files to Google Cloud Storage ═╣ ╚════════════════════════════════════════════════════════════╝ File upload done. Updating service [default]...⠏WARNING: *** Improve build performance by generating and committing package-lock.json. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.REG_ABBR.appspot.com] You can stream logs from the command line by running: $ gcloud app logs tail -s default To view your application in the web browser run: $ gcloud app browse To take a quick anonymous survey, run: $ gcloud survey
עכשיו, אחרי שהאפליקציה זמינה ברחבי העולם, אתם אמורים להיות מסוגלים להגיע אליה בכתובת ה-URL שמכילה את מזהה הפרויקט. בנוסף, הפלט אמור להיראות כך שדומה לגרסת Express המקומית, אבל חשוב לדעת שהיא פועלת בענן וזמינה בכל העולם:
אם תשלחו בקשה, תראו שהיא פועלת באותו אופן כמו כל הפריסות האחרות.
9. אפשרות 3: פריסה ב-Cloud Functions
החלק הזה ב-Codelab מיועד רק לפריסה ב-Node Cloud Functions. אם זה לא מעניין אתכם, תעברו לקטע הבא.
אין קובצי תצורה עם Cloud Functions, ולכן כשתהיו מוכנים לפרוס את Cloud Functions, מריצים את הפקודה הבאה:
$ gcloud functions deploy translate \ --runtime nodejs16 \ --entry-point app \ --trigger-http \ --region REGION \ --allow-unauthenticated
לפרויקט GCP יכול להיות REGION
ברירת מחדל, אבל אפשר להשתמש בדגל --region
כדי לפרוס את הפונקציה באזור ספציפי. שירות Cloud Functions לא מציג לכם הצעות למוצרים אחרים של Cloud. ללא קשר לאזור שבוחרים, הפלט של gcloud functions deploy
אמור להיראות כך:
Deploying function (may take a while - up to 2 minutes)...⠛ For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/15ac7fc1-731d-4f3b-bc15-8f2614xxxxxx?project=062269xxxxxx Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx buildName: projects/062269xxxxxx/locations/REGION/builds/aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx entryPoint: app httpsTrigger: securityLevel: SECURE_OPTIONAL url: https://REGION-PROJECT_ID.cloudfunctions.net/translate ingressSettings: ALLOW_ALL labels: deployment-tool: cli-gcloud name: projects/PROJECT_ID/locations/REGION/functions/translate runtime: nodejs16 serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-01de94c2-6eb4-4c49-aaff-09276cdb7ae9/a1db9f2d-3511-414b-aeeb-de6042xxxxxx.zip status: ACTIVE timeout: 60s updateTime: '2021...' versionId: '...'
עכשיו, שהאפליקציה שלך זמינה ברחבי העולם, אמורה להיות לך אפשרות להגיע אליה בכתובת ה-URL שמכילה את מזהה הפרויקט, כפי שמוצג בפלט הפריסה (מתחת ל-"httpsTrigger/url
"). כתובת ה-URL אמורה להיראות בערך כך: https://
REGION
-
PROJECT_ID
.cloudfunctions.net/translate
, שמשתנה בהתאם לאזור שבחרתם ובהתאם למזהה הפרויקט ב-Cloud.
10. אפשרות 4: פריסה ב-Cloud Run
הקטע הזה ב-Codelab מיועד רק לפריסה ב-Cloud Run. אם זה לא מעניין אתכם, תעברו לקטע הבא.
אין קובצי תצורה ב-Cloud Run, כך שכאשר תהיו מוכנים לפרוס ב-Cloud Run, פעלו לפי ההוראות הבאות.
עכשיו אתם מוכנים לפרוס את שירות התרגום ב-Cloud Run על ידי הרצת הפקודה הבאה:
$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed
הפלט אמור להיראות כך, ויש בו כמה הנחיות לשלבים הבאים:
Please specify a region: [1] asia-east1 [2] asia-east2 . . . (other regions) . . . [28] us-west4 [29] cancel Please enter your numeric choice: REGION_CHOICE To make this the default region, run `gcloud config set run/region REGION`. Deploying from source requires an Artifact Registry repository to store build artifacts. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)? This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]" Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION] ✓ Building and deploying... Done. ✓ Creating Container Repository... ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b 9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER]. ✓ Creating Revision... ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic. Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app
Cloud Buildpacks את האפליקציות שלכם ל-Cloud Run בדומה לאופן שבו אתם מריצים את האפליקציה באופן מקומי. למשתמשי Node.js, הוא מריץ את npm install
ואת npm start
. ב-Python, היא מריצה pip install -r requirements.txt
ומפעילה את האפליקציה לפי ההוראות בProcfile
. (הדרישה הזו חלה גם על כל שאר השפות שנתמכות ב-Cloud Buildpacks). האפליקציה תהיה מוכנה להפעלה אחרי שתהליך ה-build יסתיים.
בשלב הבא האפליקציה נפרסת באופן אזורי, אבל היא זמינה בכל העולם, וניתן להגיע אליה בכתובת ה-URL שמכילה את מזהה הפרויקט, כפי שמוצג בפלט הפריסה (בקטע 'Service URL
:')
כדאי לתרגם משהו כדי לראות שהוא עובד!
11. סיכום
מעולה! למדתם איך להפעיל את Cloud Translation API ולהשתמש בו, לקבל את פרטי הכניסה הנדרשים ולפרוס אפליקציית אינטרנט פשוטה ל-Express באופן מקומי, ל-App Engine, ל-Cloud Functions ו/או ל-Cloud Run. אתם יכולים לעיין בתיקיית המאגר כדי לקבל מידע נוסף או לגשת לגרסאות אחרות של האפליקציה הזו וגם ל-Codelabs אחרים.
הסרת המשאבים
Cloud Translation API מאפשר לכם לבצע כמות קבועה של תווים מתורגמים בכל חודש בחינם. ב-App Engine יש גם מכסה בחינם, וכך גם ב-Cloud Functions וב-Cloud Run. במקרה של חריגה מהתנאים האלה, תצברו חיובים. אם אתם מתכננים להמשיך ל-Codelab הבא, אין צורך להשבית את האפליקציה.
עם זאת, אם אתם עדיין לא מוכנים לעבור למדריך הבא או שאתם חוששים שהאינטרנט מגלה את האפליקציה שפרסתם עכשיו, השביתו את אפליקציית App Engine, מחקו את הפונקציה של Cloud Functions או השביתו את שירות Cloud Run כדי למנוע חיובים. כשתהיו מוכנים לעבור ל-Codelab הבא, תוכלו להפעיל אותו מחדש. מצד שני, אם אתם לא מתכוונים להמשיך עם האפליקציה הזו או עם Codelabs אחרים ואתם רוצים למחוק את הכול לגמרי, תוכלו להשבית את הפרויקט.
בנוסף, פריסה בפלטפורמת מחשוב ללא שרת (serverless) של Google Cloud כרוכה בעלויות קטנות של פיתוח ואחסון. ל-Cloud Build יש מכסה משלה בחינם, כמו גם ל-Cloud Storage. כדי לספק שקיפות רבה יותר, Cloud Build יוצר את קובץ האימג' של האפליקציה שנשמר ב-Cloud Container Registry או ב-Artifact Registry – היורש. נפח האחסון של התמונה הזו מנצל חלק מהמכסה הזו, כמו גם תעבורת נתונים יוצאת (egress) ברשת כשמעבירים את התמונה לשירות. עם זאת, ייתכן שאתם גרים באזור שאין בו תוכנית ללא תשלום כזה, לכן כדאי שתהיו מודעים לשימוש שלכם בנפח האחסון כדי למזער את העלויות הפוטנציאליות.
12. מקורות מידע נוספים
בסעיפים הבאים אפשר למצוא חומרי קריאה נוספים ותרגילים מומלצים להעשרת הידע שצברתם מהשלמת המדריך הזה.
מחקר נוסף
כבר יש לכם ניסיון בשימוש ב-Translation API, כדאי לכם לבצע עוד כמה תרגילים כדי לשפר את המיומנויות שלכם. כדי להמשיך את תוכנית הלימודים, צריך לשנות את האפליקציה לדוגמה כך:
- צריך להשלים את כל המהדורות האחרות של ה-Codelab הזה להרצה באופן מקומי או לפריסה בפלטפורמות מחשוב ללא שרת (serverless) של Google Cloud (אפשר לעיין במאגר README).
- צריך להשלים את המדריך הזה בשפת תכנות אחרת.
- צריך לשנות את האפליקציה כך שתתמוך בשפות מקור או בשפות יעד שונות.
- כדי שתהיה לך אפשרות לתרגם טקסט ליותר משפה אחת, צריך לשדרג את האפליקציה הזו. לשנות את קובץ התבנית כך שיכלול תפריט נפתח של שפות יעד נתמכות.
מידע נוסף
Google App Engine
פונקציות Google Cloud
- דף הבית של Cloud Functions
- מאמרי העזרה של Cloud Functions
- חשבונות שירות שמוגדרים כברירת מחדל ל-Cloud Functions
Google Cloud Run
Google Cloud Buildpacks, Container Registry, Artifact Registry
- הודעה על Cloud Buildpacks
- מאגר ב-Cloud Buildpacks
- דף הבית של Cloud Artifact Registry
- מסמכי תיעוד של Cloud Artifact Registry
- דף הבית של Cloud Container Registry
- מסמכי תיעוד של Cloud Container Registry
תרגום של Google Cloud וערכת למידת מכונה של Google
- דף הבית של תרגום בענן
- מאמרי העזרה של Cloud Translation
- ספריות הלקוח של Cloud Translation API (כל שפות הפיתוח)
- שפות נתמכות ב-Cloud Translation API (בשפה המדוברת או בכתיבה)
- דף התמחור של Translate API
- כל 'אבני הבניין' של Cloud AI/ML ממשקי API
- Google ML Kit (קבוצת משנה של ממשקי API של Cloud AI/ML לנייד)
- ממשק ה-API של Google ML Kit Translation API
מוצרים או דפים אחרים של Google Cloud
קישורים ב-Python
- המדריך למתחילים של Python 3 App Engine
- זמן ריצה של Python 2 App Engine (רגיל)
- זמן ריצה של Python 3 App Engine (רגיל)
- ההבדלים בין Python 2 לבין Python 3 זמני ריצה (רגילים) ב-App Engine
- מדריך להעברת נתונים מ-Python 2-3 ל-App Engine (רגיל)
- המדריך למתחילים של Python Cloud Functions
- המדריך למתחילים של Python Cloud Run
- תמיכה ב-Google Cloud Python
- Flask
קישורים ל-Node.js
- המדריך למתחילים של Node.js App Engine
- זמן ריצה של App Engine (רגיל) ב-Node.js
- המדריך למתחילים של Cloud Functions ב-Node.js
- המדריך למתחילים של Cloud Run ל-Node.js
- תמיכה ב-Google Cloud Node.js
- אקספרס
רישיון
המדריך הזה מורשה במסגרת רישיון כללי של Creative Commons Attribution 2.0, בעוד שקוד המקור במאגר הוא ברישיון Apache 2.