1. סקירה כללית

קל ליצור אפליקציות של Google App Engine, קל לתחזק אותן וקל להרחיב אותן ככל שהתנועה וצרכי אחסון הנתונים משתנים. ב-App Engine אין שרתים לתחזוקה. פשוט מעלים את האפליקציה והיא מוכנה לשימוש.
ב-Codelab הזה תלמדו איך לפרוס אפליקציית אינטרנט פשוטה של Python שנכתבה באמצעות מסגרת האינטרנט Flask. בדוגמה הזו נעשה שימוש ב-Flask, אבל אפשר להשתמש גם ב-frameworks אחרים לאינטרנט, כולל Django, Pyramid, Bottle ו-web.py.
המדריך הזה מבוסס על המדריך https://cloud.google.com/appengine/docs/standard/python3/quickstart
מה תלמדו
- איך ליצור שרת פשוט ב-Python ב-Google App Engine.
- איך מעדכנים את הקוד בלי להשבית את השרת.
הדרישות
- היכרות עם השימוש ב-Python
- היכרות עם כלים לעריכת טקסט של Linux, כמו vim, emacs או nano
סקר
איך תשתמשו במדריך הזה?
איך היית מדרג את חוויית השימוש שלך ב-Python?
איזה דירוג מתאים לדעתך לחוויית השימוש שלך בשירותי Google Cloud?
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת בענן.
הפעלת Cloud Shell
- ב-Cloud Console, לוחצים על Activate Cloud Shell
.

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים עם תיאור של השירות. אם הוצג לכם מסך ביניים, לחצו על המשך.

הקצאת המשאבים והחיבור ל-Cloud Shell נמשכים רק כמה רגעים.

המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את רוב העבודה ב-codelab הזה, אם לא את כולה, באמצעות דפדפן.
אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות ושהפרויקט מוגדר לפי מזהה הפרויקט.
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שעברתם אימות:
gcloud auth list
פלט הפקודה
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט:
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם לא, אפשר להגדיר אותו באמצעות הפקודה הבאה:
gcloud config set project <PROJECT_ID>
פלט הפקודה
Updated property [core/project].
3. כתיבת אפליקציית האינטרנט
אחרי ההפעלה של Cloud Shell, אפשר להשתמש בשורת הפקודה כדי להפעיל את הפקודה gcloud של Cloud SDK או כלים אחרים שזמינים במכונה הווירטואלית. אתם יכולים להשתמש בספרייה $HOME באחסון בדיסק אחסון מתמיד (persistent disk) כדי לאחסן קבצים בפרויקטים שונים ובין סשנים שונים של Cloud Shell. ספריית $HOME היא פרטית ורק אתם יכולים לגשת אליה.
כדי להתחיל, יוצרים תיקייה חדשה בספרייה $HOME של האפליקציה:
mkdir ~/helloworld cd ~/helloworld
יוצרים קובץ בשם main.py:
touch main.py
עורכים את הקובץ באמצעות עורך שורת הפקודה המועדף (nano, vim או emacs) או באמצעות לחיצה על הלחצן Cloud Shell Editor:

כדי לערוך את הקובץ ישירות באמצעות Cloud Shell Editor, משתמשים בפקודה הזו:
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
return "Hello World!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
4. הגדרת יחסי התלות
כדי לציין את יחסי התלות של אפליקציית האינטרנט, חוזרים לטרמינל ויוצרים קובץ requirements.txt בתיקיית השורש של הפרויקט, עם הגרסה המדויקת של Flask שבה רוצים להשתמש:
touch requirements.txt
כדי לערוך את הקובץ באמצעות Cloud Shell Editor, משתמשים בפקודה הבאה:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/Flask
Flask==3.0.2
5. הגדרת הפריסה
כדי לפרוס את אפליקציית האינטרנט ב-App Engine, צריך קובץ app.yaml. קובץ התצורה הזה מגדיר את ההגדרות של אפליקציית האינטרנט ב-App Engine.
בטרמינל, יוצרים ועורכים את הקובץ app.yaml בספריית השורש של הפרויקט:
touch app.yaml
כדי לערוך את הקובץ באמצעות Cloud Shell Editor, משתמשים בפקודה הבאה:
cloudshell edit app.yaml
app.yaml
runtime: python312
6. פריסת אפליקציית האינטרנט
מהטרמינל, בודקים את התוכן של הספרייה:
ls
אמורים להיות לכם 3 קבצים:
app.yaml main.py requirements.txt
מפעילים את אפליקציית האינטרנט באמצעות הפקודה הבאה:
gcloud app deploy
בפעם הראשונה, צריך לבחור אזור פריסה:
Please choose the region where you want your App Engine application located: [1] asia-east2 ... [7] australia-southeast1 [8] europe-west [9] europe-west2 ... [12] northamerica-northeast1 [13] southamerica-east1 ... [19] us-west4 ... Please enter your numeric choice:
מאשרים את הפריסה:
Creating App Engine application in project [PROJECT_ID] and region [REGION]....done. Services to deploy: descriptor: [~/helloworld/app.yaml] source: [~/helloworld] target project: [PROJECT_ID] target service: [default] target version: [YYYYMMDDtHHMMSS] target url: [https://PROJECT_ID.REGION_ID.r.appspot.com] Do you want to continue (Y/n)?
האפליקציה נפרסת:
Beginning deployment of service [default]... Created .gcloudignore file. See `gcloud topic gcloudignore` for details. Uploading 3 files to Google Cloud Storage 100% File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
אפליקציית האינטרנט שלכם מוכנה עכשיו להגיב לבקשות HTTP בכתובת https://PROJECT_ID.REGION_ID.r.appspot.com.
7. בדיקת אפליקציית האינטרנט
אפליקציית האינטרנט שלך מוכנה להגיב לבקשות HTTP בכתובת https://PROJECT_ID.REGION_ID.r.appspot.com.
קודם כל, מאחזרים את שם המארח של אפליקציית האינטרנט באמצעות הפקודה gcloud app describe:
APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")
כדי לבדוק את אפליקציית האינטרנט, אפשר להשתמש בבקשת GET פשוטה מסוג HTTP:
curl https://$APPENGINE_HOSTNAME
אמורה להתקבל התשובה הבאה:
Hello World!
סיכום
בשלבים הקודמים הגדרתם אפליקציית אינטרנט פשוטה של Python, הפעלתם את האפליקציה ופרסתם אותה ב-App Engine.
8. עדכון אפליקציית האינטרנט
משנים את אפליקציית האינטרנט על ידי שינוי גוף הפונקציה hello() בקובץ main.py.
כדי לערוך את הקובץ באמצעות Cloud Shell Editor, משתמשים בפקודה הבאה:
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
# return "Hello World!\n" # ← Replace this line
who = flask.request.args.get("who", "World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
בטרמינל, פורסים מחדש כדי לעדכן את אפליקציית האינטרנט:
gcloud app deploy --quiet
הגרסה החדשה של האפליקציה נפרסת:
Beginning deployment of service [default]... Uploading 1 file to Google Cloud Storage ... Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
בודקים את הגרסה החדשה של אפליקציית האינטרנט בדיוק כמו שעשיתם קודם:
curl https://$APPENGINE_HOSTNAME
אמורה להתקבל אותה תשובה:
Hello World!
אפשר לבדוק את זה באמצעות הפרמטר האופציונלי:
curl https://$APPENGINE_HOSTNAME?who=Universe
אמורה להתקבל התשובה הבאה:
Hello Universe!
סיכום
בשלב הזה, עדכנתם ופרסתם מחדש את אפליקציית האינטרנט בלי שהשירות הופסק.
9. מעולה!
למדתם לכתוב את אפליקציית האינטרנט הראשונה שלכם ב-App Engine ב-Python.
מידע נוסף
- מסמכי התיעוד של App Engine: https://cloud.google.com/appengine
- במדריך הזה מוסבר איך לכתוב אפליקציית Python מלאה ב-App Engine: https://cloud.google.com/appengine/docs/standard/python3/building-app
רישיון
עבודה זו מורשית תחת רישיון Creative Commons שמותנה בייחוס 2.0 כללי.