1. סקירה כללית
סדרת ה-codelabs הזו (מדריכים מעשיים וברמה עצמאית) נועדה לעזור למפתחים להבין את האפשרויות השונות שעומדות לרשותם בפריסה של האפליקציות שלהם. ב-codelab הזה תלמדו איך להשתמש ב-Google Cloud Translation API עם Python ולהריץ אותו באופן מקומי או לפרוס אותו בפלטפורמת מחשוב ללא שרת ב-Cloud (App Engine, Cloud Functions או Cloud Run). אפשר לפרוס את אפליקציית הדוגמה שנמצאת במאגר של המדריך הזה (לפחות) בשמונה דרכים שונות, עם שינויים קלים בלבד בהגדרות:
- שרת Flask מקומי (Python 2)
- שרת Flask מקומי (Python 3)
- App Engine (Python 2)
- App Engine (Python 3)
- Cloud Functions (Python 3)
- Cloud Run (Python 2 דרך Docker)
- Cloud Run (Python 3 דרך Docker)
- Cloud Run (Python 3 דרך Cloud Buildpacks)
בקודלאב הזה נסביר איך לפרוס את האפליקציה הזו בפלטפורמות מודגשות שצוינו למעלה.
כאן מוסבר איך
- שימוש בממשקי API של Google Cloud, במיוחד ב-Cloud Translation API (מתקדם/v3)
- להריץ אפליקציית אינטרנט בסיסית באופן מקומי או לפרוס אותה בפלטפורמת מחשוב ללא שרת ב-Cloud
מה צריך להכין
- פרויקט ב-Google Cloud עם חשבון פעיל לחיוב ב-Cloud
- Flask מותקן להרצה מקומית, או פלטפורמת מחשוב ללא שרת ב-Cloud שמופעלת לפריסות מבוססות-ענן
- מיומנויות בסיסיות ב-Python
- ידע מעשי בפקודות בסיסיות של מערכת ההפעלה
סקר
איך תוכלו להשתמש במדריך הזה?
איזה דירוג מגיע לדעתך לחוויה שלך עם Python?
מהו הדירוג שלך לגבי חוויית השימוש בשירותי Google Cloud?
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- שם הפרויקט הוא השם המוצג של המשתתפים בפרויקט. זוהי מחרוזת תווים שלא משמשת את Google APIs, ואפשר לעדכן אותה בכל שלב.
- מזהה הפרויקט צריך להיות ייחודי בכל הפרויקטים ב-Google Cloud, והוא לא ניתן לשינוי (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי. בדרך כלל לא משנה מה המחרוזת הזו. ברוב סדנאות ה-Codelab, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מזוהה בתור
PROJECT_ID
), כך שאם המזהה לא מוצא חן בעיניכם, תוכלו ליצור מזהה אקראי אחר או לנסות ליצור מזהה משלכם ולבדוק אם הוא זמין. לאחר מכן, הוא 'מקפיא' אחרי יצירת הפרויקט. - יש ערך שלישי, מספר פרויקט, שמשתמשים בו בממשקי API מסוימים. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי העזרה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או ב-API של Cloud. השלמת הקודלאב הזה לא אמורה לעלות הרבה, אם בכלל. כדי להשבית את המשאבים כדי שלא תחויבו אחרי סיום המדריך, פועלים לפי ההוראות ל'ניקוי' שמופיעות בסוף הקודלאב. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בסך 300$.
3. הפעלת Translation API
באפליקציית הדוגמה שלנו, צריך להפעיל במקום זאת את Cloud Translation API ואת השירות App Engine, לפי ההוראות שדומות לאלה שמפורטות בהמשך.
הפעלת Cloud APIs
מבוא
לא משנה באיזה ממשק Google API אתם רוצים להשתמש באפליקציה, צריך להפעיל אותו. בדוגמה הבאה מוצגות שתי דרכים להפעלת Cloud Vision API. אחרי שתראו איך מפעילים ממשק Cloud API אחד, תוכלו להפעיל ממשקי API אחרים כי התהליך דומה.
אפשרות 1: מ-Cloud Shell או מממשק שורת הפקודה
הפעלת ממשקי API ממסוף Cloud היא דרך נפוצה, אבל חלק מהמפתחים מעדיפים לעשות הכל דרך שורת הפקודה. כדי לעשות זאת, צריך לחפש את 'שם השירות' של ה-API. היא נראית כמו כתובת URL: SERVICE_NAME
.googleapis.com
. אפשר למצוא אותם בטבלה של המוצרים הנתמכים, או לשלוח שאילתות פרוגרמטיות לגביהם באמצעות Google Discovery API.
בעזרת המידע הזה, אפשר להשתמש ב-Cloud Shell (או בסביבת הפיתוח המקומית עם כלי שורת הפקודה gcloud
) כדי להפעיל ממשק API באופן הבא:
gcloud services enable SERVICE_NAME.googleapis.com
לדוגמה, הפקודה הבאה מפעילה את Cloud Vision API:
gcloud services enable vision.googleapis.com
הפקודה הזו מפעילה את App Engine:
gcloud services enable appengine.googleapis.com
אפשר גם להפעיל כמה ממשקי API בבקשה אחת. לדוגמה, שורת הפקודה הזו מפעילה את Cloud Run, Cloud Artifact Registry ו-Cloud Translation API:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
אפשרות 2: דרך מסוף Cloud
אפשר גם להפעיל את Vision API במנהל ה-API. במסוף Cloud, עוברים אל API Manager ובוחרים באפשרות Library.
אם רוצים להפעיל את Cloud Vision API, מתחילים להזין 'vision' בסרגל החיפוש, וכל מה שתזינו עד עכשיו יופיע:
בוחרים את ה-API שרוצים להפעיל ולוחצים על Enable:
עלות
אפשר להשתמש בממשקי Google API רבים ללא תשלום, אבל השימוש במוצרים ובממשקי ה-API של Google Cloud לא בחינם. כשמפעילים את Cloud APIs, יכול להיות שתתבקשו להזין חשבון פעיל לחיוב. עם זאת, חשוב לציין שלמוצרים מסוימים ב-Google Cloud יש תוכנית 'תמיד בחינם' (יומית או חודשית), שצריך לחרוג ממנה כדי שנחייב אתכם. אחרת, כרטיס האשראי (או אמצעי החיוב שציינתם) לא יחויב.
לפני שמפעילים ממשק API, חשוב לעיין במידע על התמחור שלו, במיוחד כדי לבדוק אם יש לו שכבה ללא תשלום, ואם כן, מה היא. אם מפעילים את Cloud Vision API, צריך לעיין בדף מידע על התמחור שלו. ל-Cloud Vision יש מכסה בחינם, וכל עוד לא חורגים מהמגבלות הכוללות (בכל חודש), לא אמורים להיות חיובים.
התמחור והרמות החינמיות משתנים בין ממשקי Google API. דוגמאות:
- Google Cloud/GCP – כל מוצר מחויב באופן שונה, ובדרך כלל משלמים לפי מחזור של vCPU, צרכן אחסון, שימוש בזיכרון או תשלום לפי שימוש. אפשר לעיין במידע על הרמה החינמית שלמעלה.
- מפות Google – כוללת חבילת ממשקי API ומציעה למשתמשים זיכוי חודשי בחינם בסך 200$.
- ממשקי ה-API של Google Workspace (לשעבר G Suite) – השימוש בהם בחינם (עד למגבלות מסוימות) מכוסה על ידי תשלום חודשי על המינוי ל-Workspace, כך שאין חיוב ישיר על השימוש בממשקי ה-API של Gmail, Google Drive, יומן, Docs, Sheets ו-Slides.
יש הבדלים בחיוב של מוצרים שונים של Google, לכן חשוב לעיין במסמכי התיעוד של ה-API כדי לקבל מידע נוסף.
סיכום
עכשיו, אחרי שלמדתם איך מפעילים את Google APIs באופן כללי, עליכם לעבור אל API Manager ולהפעיל גם את Cloud Translation API וגם את שירות App Engine (אם עדיין לא עשיתם זאת). צריך להפעיל את Cloud Translation API כי האפליקציה שלנו תשתמש בו, ואת App Engine כי אתם פורסים אפליקציה של App Engine. אם אתם מעדיפים לעשות זאת משורת הפקודה, אפשר להשתמש במקום זאת בפקודה הבאה:
gcloud services enable appengine.googleapis.com translate.googleapis.com
המכסה החודשית לא מופיעה בדף הסיכום הכללי של רמת Always Free, אבל בדף התמחור של Translation API מצוין שכל המשתמשים מקבלים כמות קבועה של תווים מתורגמים מדי חודש. אם תשתמשו ב-API בלי לחרוג מהסף הזה, לא תחויבו. אם יש חיובים אחרים שקשורים ל-Google Cloud, הם ידונו בסוף המאמר בקטע 'ניקוי'.
4. קבלת הקוד של האפליקציה לדוגמה
משכפלים את הקוד במאגר באופן מקומי או ב-Cloud Shell (באמצעות הפקודה git clone
), או מורידים את קובץ ה-ZIP מהלחצן הירוק Code (קוד) כפי שמוצג בצילום המסך הבא:
עכשיו, אחרי שכל מה שצריך מוכן, כדאי ליצור עותק מלא של התיקייה כדי לבצע את המדריך הזה, כי סביר להניח שהוא יכלול מחיקה או שינוי של הקבצים. אם רוצים לבצע פריסה אחרת, אפשר להתחיל מחדש על ידי העתקת המקור כדי שלא תצטרכו לשכפל או להוריד אותו שוב.
5. סיור באפליקציה לדוגמה
האפליקציה לדוגמה היא נגזרת פשוטה של Google Translate שמבקשת מהמשתמשים להזין טקסט באנגלית ולקבל את התרגום המקביל של הטקסט הזה בספרדית. עכשיו פותחים את הקובץ main.py
כדי שנוכל לראות איך הוא עובד. אם משמיטים את השורות עם ההערות לגבי הרישוי, הקטע נראה כך בחלק העליון ובחלק התחתון:
from flask import Flask, render_template, request
import google.auth
from google.cloud import translate
app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')
# . . . [translate() function definition] . . .
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
- היבוא כולל את הפונקציונליות של Flask, את המודול
google.auth
ואת ספריית הלקוח של Cloud Translation API. - המשתנים הגלובליים מייצגים את אפליקציית Flask, את מזהה הפרויקט ב-Cloud, את הלקוח של Translation API, את 'נתיב המיקום' של ההורה לקריאות ל-Translation API ואת שפות המקור והיעד. במקרה הזה, אלה אנגלית (
en
) וספרדית (es
), אבל אתם יכולים לשנות את הערכים האלה לקודי שפות אחרים שתומכים ב-Cloud Translation API. - הבלוק הגדול
if
בתחתית המסך משמש במדריך להפעלת האפליקציה באופן מקומי – הוא משתמש בשרת הפיתוח של Flask כדי להציג את האפליקציה. הקטע הזה מופיע גם במדריכים לפריסה ב-Cloud Run, למקרה ששרת האינטרנט לא נכלל בחבילה של הקונטיינר. תתבקשו להפעיל את הקיפול של השרת בקונטיינר, אבל אם תתעלמו מכך, קוד האפליקציה יחזור להשתמש בשרת הפיתוח של Flask. (זו לא בעיה ב-App Engine או ב-Cloud Functions כי אלה פלטפורמות שמבוססות על מקורות, כלומר Google Cloud מספק ומפעיל שרת אינטרנט שמוגדר כברירת מחדל).
לבסוף, באמצע main.py
נמצא ליבה של האפליקציה, הפונקציה translate()
:
@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
"""
main handler - show form and possibly previous translation
"""
# Flask Request object passed in for Cloud Functions
# (use gcf_request for GCF but flask.request otherwise)
local_request = gcf_request if gcf_request else request
# reset all variables (GET)
text = translated = None
# if there is data to process (POST)
if local_request.method == 'POST':
text = local_request.form['text']
data = {
'contents': [text],
'parent': PARENT,
'target_language_code': TARGET[0],
}
# handle older call for backwards-compatibility
try:
rsp = TRANSLATE.translate_text(request=data)
except TypeError:
rsp = TRANSLATE.translate_text(**data)
translated = rsp.translations[0].translated_text
# create context & render template
context = {
'orig': {'text': text, 'lc': SOURCE},
'trans': {'text': translated, 'lc': TARGET},
}
return render_template('index.html', **context)
הפונקציה הראשית מקבלת את הקלט מהמשתמש ומפעילה את Translation API כדי לבצע את העבודה הקשה. בואו נסביר:
- בודקים אם הבקשות מגיעות מ-Cloud Functions באמצעות המשתנה
local_request
. Cloud Functions שולח אובייקט בקשה של Flask משלו, ואילו כל שאר הפלטפורמות (שפועלות באופן מקומי או שנפרסות ב-App Engine או ב-Cloud Run) יקבלו את אובייקט הבקשה ישירות מ-Flask. - איפוס המשתנים הבסיסיים של הטופס. האפשרות הזו מיועדת בעיקר לבקשות GET, כי לבקשות POST יהיו נתונים שיחליפו את הפרמטרים האלה.
- אם מדובר בבקשת POST, צריך לבחור את הטקסט לתרגום וליצור מבנה JSON שמייצג את דרישת המטא-נתונים של ה-API. לאחר מכן, קוראים ל-API ומעבירים אותו לגרסה קודמת של ה-API אם המשתמש משתמש בספרייה ישנה יותר.
- בכל מקרה, צריך לעצב את התוצאות בפועל (POST) או ללא נתונים (GET) בהקשר של התבנית ולבצע עיבוד.
החלק החזותי של האפליקציה נמצא בקובץ התבנית index.html
. מוצגות בו תוצאות שכבר תורגמו (אם לא, הוא יהיה ריק), ואחריו הטופס שבו מבקשים לכתוב משהו לתרגום:
<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<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>
6. התקנה של חבילות/יחסי תלות מקומיים (בספרייה)
כפי שצוין קודם, באפליקציית הדוגמה נעשה שימוש במסגרת האינטרנט המינימלית Flask ובספריית הלקוח של Google Cloud Translation API ל-Python. כדי להתקין ולעדכן את pip
ואת שתי החבילות האלה, מריצים את הפקודה pip
(או pip3
):
pip install -t lib -r requirements.txt
אחרי שמריצים את ההערה שלמעלה, יוצג פלט ההתקנה. הוא עשוי להיראות כך:
$ pip install -t lib -r requirements.txt DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality. Collecting flask>=1.1.2 Using cached Flask-1.1.4-py2.py3-none-any.whl (94 kB) Collecting google-cloud-translate>=2.0.1 Using cached google_cloud_translate-2.0.2-py2.py3-none-any.whl (91 kB) Collecting click<8.0,>=5.1 Using cached click-7.1.2-py2.py3-none-any.whl (82 kB) Collecting Jinja2<3.0,>=2.10.1 Using cached Jinja2-2.11.3-py2.py3-none-any.whl (125 kB) Collecting Werkzeug<2.0,>=0.15 Using cached Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB) Collecting itsdangerous<2.0,>=0.24 Using cached itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB) Collecting google-api-core[grpc]<2.0.0dev,>=1.15.0 Downloading google_api_core-1.29.0-py2.py3-none-any.whl (93 kB) |████████████████████████████████| 93 kB 2.1 MB/s Collecting google-cloud-core<2.0dev,>=1.1.0 Using cached google_cloud_core-1.6.0-py2.py3-none-any.whl (28 kB) Collecting MarkupSafe>=0.23 Using cached MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl (17 kB) Collecting protobuf>=3.12.0 Downloading protobuf-3.17.2-cp27-cp27m-macosx_10_9_x86_64.whl (958 kB) |████████████████████████████████| 958 kB 21.6 MB/s Collecting futures>=3.2.0; python_version < "3.2" Using cached futures-3.3.0-py2-none-any.whl (16 kB) Collecting six>=1.13.0 Using cached six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting packaging>=14.3 Using cached packaging-20.9-py2.py3-none-any.whl (40 kB) Collecting googleapis-common-protos<2.0dev,>=1.6.0 Using cached googleapis_common_protos-1.52.0-py2.py3-none-any.whl (100 kB) Collecting requests<3.0.0dev,>=2.18.0 Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB) Collecting google-auth<2.0dev,>=1.25.0 Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB) Collecting pytz Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB) Collecting setuptools>=40.3.0 Using cached setuptools-44.1.1-py2.py3-none-any.whl (583 kB) Collecting grpcio<2.0dev,>=1.29.0; extra == "grpc" Using cached grpcio-1.38.0-cp27-cp27m-macosx_10_10_x86_64.whl (3.8 MB) Collecting pyparsing>=2.0.2 Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB) Collecting chardet<5,>=3.0.2 Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB) Collecting urllib3<1.27,>=1.21.1 Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB) Collecting idna<3,>=2.5 Using cached idna-2.10-py2.py3-none-any.whl (58 kB) Collecting certifi>=2017.4.17 Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB) |████████████████████████████████| 145 kB 61.1 MB/s Collecting pyasn1-modules>=0.2.1 Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB) Collecting rsa<4.6; python_version < "3.6" Using cached rsa-4.5-py2.py3-none-any.whl (36 kB) Collecting cachetools<5.0,>=2.0.0 Using cached cachetools-3.1.1-py2.py3-none-any.whl (11 kB) Collecting enum34>=1.0.4; python_version < "3.4" Using cached enum34-1.1.10-py2-none-any.whl (11 kB) Collecting pyasn1<0.5.0,>=0.4.6 Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB) Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask, six, protobuf, futures, pyparsing, packaging, googleapis-common-protos, chardet, urllib3, idna, certifi, requests, pyasn1, pyasn1-modules, rsa, cachetools, setuptools, google-auth, pytz, enum34, grpcio, google-api-core, google-cloud-core, google-cloud-translate ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts. matplotlib 1.3.1 requires nose, which is not installed. matplotlib 1.3.1 requires tornado, which is not installed. Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 cachetools-3.1.1 certifi-2021.5.30 chardet-4.0.0 click-7.1.2 enum34-1.1.10 flask-1.1.4 futures-3.3.0 google-api-core-1.29.0 google-auth-1.30.1 google-cloud-core-1.6.0 google-cloud-translate-2.0.2 googleapis-common-protos-1.52.0 grpcio-1.38.0 idna-2.10 itsdangerous-1.1.0 packaging-20.9 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 pytz-2021.1 requests-2.25.1 rsa-4.5 setuptools-44.1.1 six-1.16.0 urllib3-1.26.5
7. פריסת השירות
כדי לפרוס את שירות התרגום ב-Python 2 App Engine, מריצים את הפקודה הבאה:
gcloud app deploy
הפלט אמור להיראות כך, ולכלול הנחיות לשלבים הבאים:
$ gcloud app deploy Services to deploy: descriptor: [/private/tmp/nebulous-serverless-python/app.yaml] source: [/private/tmp/nebulous-serverless-python] target project: [PROJECT_ID] target service: [default] target version: [20210422t161025] target url: [https://PROJECT_ID.appspot.com] Do you want to continue (Y/n)? Beginning deployment of service [default]... ╔════════════════════════════════════════════════════════════╗ ╠═ Uploading 1290 files to Google Cloud Storage ═╣ ╚════════════════════════════════════════════════════════════╝ File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.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
עכשיו, כשהאפליקציה זמינה ברחבי העולם, אמורה להיות לכם אפשרות לגשת אליה בכתובת ה-URL (שמכילה את מזהה הפרויקט) שצוינה בפלט הפריסה:
מתרגמים משהו כדי לראות איך זה עובד.
8. סיכום
מעולה! למדתם איך להפעיל את Cloud Translation API, לקבל את פרטי הכניסה הנדרשים ולפרוס אפליקציית אינטרנט פשוטה ב-Python 2 App Engine. מידע נוסף על הפריסה הזו זמין בטבלה הזו במאגר.
הסרת המשאבים
Cloud Translation API מאפשר לכם לבצע מספר קבוע של תווים מתורגמים בחודש בחינם. ל-App Engine יש גם מכסה בחינם, ואותו הדבר נכון לגבי Cloud Functions ו-Cloud Run. אם תחרגו מאחד מהם, תחויבו. אם אתם מתכננים להמשיך לקודלאב הבא, אין צורך לכבות את האפליקציה.
עם זאת, אם אתם עדיין לא מוכנים להמשיך למדריך הבא או שאתם חוששים שהאינטרנט יגלה את האפליקציה שפרסמתם, השביתו את האפליקציה ב-App Engine, מחקו את Cloud Function או השביתו את שירות Cloud Run כדי להימנע מחיובים. כשתהיו מוכנים לעבור לסדנת הקוד הבאה, תוכלו להפעיל אותו מחדש. לעומת זאת, אם אתם לא מתכוונים להמשיך עם האפליקציה הזו או עם Codelabs אחרים ואתם רוצים למחוק את הכל לגמרי, אתם יכולים לסגור את הפרויקט.
בנוסף, פריסה בפלטפורמת מחשוב ללא שרת (serverless) ב-Google Cloud כרוכה בעלות קטנה על פיתוח ואחסון. ל-Cloud Build יש מכסה בחינם משלו, כמו גם ל-Cloud Storage. כדי לשפר את השקיפות, Cloud Build יוצר את קובץ האימג' של האפליקציה, שמאוחסן לאחר מכן ב-Cloud Container Registry או ב-Artifact Registry, הממשיך שלו. אחסון התמונה הזו צורך חלק מהמכסה הזו, וכך גם תעבורת הנתונים היוצאת מהרשת במהלך העברת התמונה לשירות. עם זאת, יכול להיות שאתם גרים באזור שבו אין שכבה חינמית כזו, לכן חשוב לשים לב לשימוש שלכם בנפח האחסון כדי למזער את העלויות האפשריות.
9. מקורות מידע נוספים
בקטעים הבאים מפורטים חומרי קריאה נוספים ותרגילים מומלצים שיעזרו לכם להרחיב את הידע שצברתם במדריך הזה.
מחקר נוסף
עכשיו, אחרי שצברתם קצת ניסיון ב-Translation API, נבצע כמה תרגילים נוספים כדי לשפר את הכישורים שלכם. כדי להמשיך בנתיב הלמידה, עליכם לשנות את אפליקציית הדוגמה שלנו כדי לבצע את הפעולות הבאות:
- מומלץ להשלים את כל המהדורות האחרות של codelab הזה כדי להריץ את הקוד באופן מקומי או לפרוס אותו בפלטפורמות מחשוב ללא שרת של Google Cloud (ראו README של המאגר).
- איך משלימים את המדריך הזה בשפת תכנות אחרת.
- לשנות את האפליקציה הזו כך שתתמוך בשפות מקור או יעד שונות.
- שדרוג האפליקציה הזו כדי שתוכלו לתרגם טקסט ליותר משפה אחת. שינוי קובץ התבנית כך שיכלול תפריט נפתח של שפות היעד הנתמכות.
מידע נוסף
Google App Engine
- דף הבית של App Engine
- מסמכי העזרה של App Engine
- מדריך למתחילים ב-Python 3 ל-App Engine
- חשבונות שירות שמוגדרים כברירת מחדל ב-App Engine
- זמן ריצה של Python 2 App Engine (Standard)
- זמן ריצה של Python 3 App Engine (Standard)
- הבדלים בין סביבת זמן הריצה של Python 2 לבין סביבת זמן הריצה של Python 3 ב-App Engine (Standard)
- מדריך להעברה מ-Python 2 ל-Python 3 ב-App Engine (Standard)
Google Cloud Functions
- דף הבית של Cloud Functions
- מסמכי העזרה של Cloud Functions
- מדריך למתחילים ב-Python Cloud Functions
- חשבונות שירות שמוגדרים כברירת מחדל ב-Cloud Functions
Google Cloud Run
- דף הבית של Cloud Run
- מסמכי העזרה של Cloud Run
- מדריך למתחילים ב-Python Cloud Run
- חשבונות שירות שמוגדרים כברירת מחדל ב-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 Translation ו-Google ML Kit
- דף הבית של Cloud Translation
- מסמכי העזרה של Cloud Translation
- דף התמחור של Translation API
- כל ממשקי ה-API של Cloud AI/ML ל'אבני בניין'
- Google ML Kit (קבוצת משנה של Cloud AI/ML APIs לנייד)
- Google ML Kit Translation API
דפים או מוצרים אחרים של Google Cloud
- תמיכה ב-Python ב-Google Cloud
- ספריות לקוח של Google Cloud
- התוכנית 'תמיד בחינם' ב-Google Cloud
- כל משאבי העזרה של Google Cloud
Python ו-Flask
רישיון
המדריך הזה זמין ברישיון Creative Commons Attribution 2.0 Generic, ואילו קוד המקור במאגר זמין ברישיון Apache 2.