תחילת העבודה עם App Engine (Python 3)

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

befa7a877ccdd35d.png

קל ליצור את היישומים של Google App Engine, לתחזק אותם ולהתאים אותם בקלות לעומס, כאשר צרכי התנועה ואחסון הנתונים שלך משתנים. באמצעות App Engine אין שרתים לתחזק. פשוט מעלים את האפליקציה והיא מוכנה לשליחה.

ב-Codelab הזה תלמדו איך לפרוס אפליקציית אינטרנט פשוטה של Python שנכתבה באמצעות ה-framework של 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. הגדרה ודרישות

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט שלכם (בדרך כלל מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניכם, אתם יכולים ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלך ולראות אם הוא זמין. לא ניתן לשנות אותו אחרי השלב הזה, והוא נשאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי, Project Number, שבו משתמשים בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא יעלה הרבה כסף, אם בכלל. כדי להשבית משאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על Activate Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.

9f0e51b578fecce5.png

במכונה הווירטואלית הזו נמצאים כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. אם לא את כולן, ניתן לבצע חלק גדול מהעבודה ב-Codelab הזה באמצעות דפדפן.

אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שהפרויקט מאומת ושהפרויקט מוגדר לפי מזהה הפרויקט שלכם.

  1. מריצים את הפקודה הבאה ב-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`
  1. מריצים את הפקודה הבאה ב-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:

10af7b1a6240e9f4.gif

כדי לערוך את הקובץ ישירות באמצעות 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)")

אפשר לבדוק את אפליקציית האינטרנט באמצעות בקשת HTTP GET פשוטה:

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!

מידע נוסף

רישיון

היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.