סביבת זמן הריצה של Python היא חבילת התוכנה שאחראית להתקנת הקוד של שירות האינטרנט והתלות שלו, ולהפעלת שירות App Engine.
זמן הריצה של Python ב-App Engine בסביבה הרגילה מוצהר בקובץ app.yaml:
runtime: pythonVERSION
VERSION הוא מספר הגרסה של Python MAJOR ו-MINOR. לדוגמה, כדי להשתמש בגרסת Python העדכנית ביותר, Python 3.14, מציינים 314.
גרסאות נתמכות אחרות של Python וגרסאות Ubuntu תואמות לגרסת Python שלכם מפורטות בלוח הזמנים של תמיכה בזמן ריצה.
גרסאות Python 3
הגרסה העדכנית ביותר של Python שנתמכת היא 3.14. סביבת זמן הריצה של Python משתמשת בגרסה היציבה העדכנית ביותר שמופיעה בקובץ app.yaml. מערכת App Engine מעדכנת אוטומטית לגרסאות תיקון חדשות, אבל לא מעדכנת אוטומטית את גרסת המשנה.
לדוגמה, יכול להיות שהאפליקציה שלכם נפרסה ב-Python 3.7.0 ומעלה, והיא תעודכן אוטומטית ל-Python 3.7.1, אבל היא לא תעודכן אוטומטית לגרסה המשנית הבאה, Python 3.8.0.
נסו בעצמכם
אנחנו ממליצים למשתמשים חדשים ב-Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של App Engine בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300 $להרצה, לבדיקה ולפריסה של עומסי העבודה.
אני רוצה לנסות את App Engine בחינםאפליקציות Python פועלות ב-App Engine במאגר מאובטח על ידי gVisor בהפצת Ubuntu Linux עדכנית.
תלויות
במהלך הפריסה, App Engine משתמש במנהל החבילות של Python pip כדי להתקין יחסי תלות שמוגדרים בקובץ המטא-נתונים requirements.txt שנמצא בספריית הבסיס של הפרויקט. אין צורך להעלות יחסי תלות כי App Engine מבצע התקנה חדשה.
בשלב הזה אין תמיכה בהגדרת תלות באמצעות התקן Pipfile/Pipfile.lock, ולכן הפרויקט לא יכול להכיל קבצים כאלה.
הפעלת האפליקציה
סביבת זמן הריצה מפעילה את האפליקציה על ידי הרצת הפקודה שציינתם בשדה entrypoint בקובץ app.yaml. אם הגדרתם נקודת כניסה לשרת אינטרנט של Gunicorn בקובץ app.yaml, אתם צריכים להוסיף גם את gunicorn לקובץ requirements.txt.
נקודת הכניסה צריכה להפעיל שרת אינטרנט שמקשיב ליציאה שצוינה על ידי משתנה הסביבה PORT. לדוגמה:
entrypoint: gunicorn -b :$PORT main:app
מסגרת האינטרנט שבה האפליקציה משתמשת אחראית לניתוב בקשות למטפלים המתאימים באפליקציה.
אם האפליקציה שלכם עומדת בדרישות הבאות, מערכת App Engine תפעיל את האפליקציה באמצעות שרת האינטרנט gunicorn אם לא תציינו את השדה entrypoint:
תיקיית השורש של האפליקציה מכילה קובץ
main.pyעם אובייקט שמתאים ל-WSGI בשםapp.האפליקציה שלך לא מכילה קובצי
PipfileאוPipfile.lock.
אם לא מציינים נקודת כניסה לסביבת זמן הריצה של Python 3, App Engine מגדיר ומפעיל את שרת האינטרנט של Gunicorn שמוגדר כברירת מחדל.
שיטות מומלצות לנקודות כניסה
מוודאים שמודול Python שנדרש להפעלת נקודת הכניסה שצוינה ב-
app.yamlנמצא בקובץrequirements.txt. מוסיפים אתgunicornלקובץrequirements.txtרק אם נקודת קצה שלgunicornמצוינת באופן מפורש בקובץapp.yaml.כדי ליהנות מהביצועים הכי טובים, נקודת הכניסה צריכה להיות קלה כי היא מופעלת בכל פעם שנוצר מופע חדש של האפליקציה.
אתם יכולים להשתמש בשדה של נקודת הכניסה כדי לשפר את הביצועים של האפליקציה. לדוגמה, אם אתם משתמשים ב-
gunicornכשרת האינטרנט שלכם, אתם יכולים להשתמש בדגל--workersבשדה של נקודת הכניסה כדי להגדיר את מספר העובדים שמשרתים את האפליקציה.מספר העובדים שאתם מציינים צריך להיות זהה לסוג המופע של אפליקציית App Engine:
סוג המכונה עובדים F1 2 F2 4 F4 8 F4_1G 8 B1 2 B2 4 B4 8 B4_1G 8 B8 8 ההנחיות האלה הן נקודת התחלה לבחירת מספר העובדים. יכול להיות שתצטרכו להשתמש במספר שונה של עובדים, בהתאם למאפייני הביצועים של האפליקציה. בדוגמה הבאה מוצג פריסה של App Engine שמשתמשת בשני תהליכי עבודה מסוג
gunicornלהצגת אפליקציות:entrypoint: gunicorn -b :$PORT -w 2 main:appמומלץ להגדיר את שרת האינטרנט להאזין לבקשות HTTP ולהגיב להן ביציאה שצוינה ב
$PORTמשתנה הסביבה. שימוש ביציאה שמוגדרת כברירת מחדל8080מונע מ-App Engine להשתמש בשכבת NGINX שלו כדי לדחוס תגובות HTTP. שימו לב שאם אתם משתמשים ביציאה8080, אזהרות לגבי יציאה8080ו-NGINX יוצגו בקובצי היומן של האפליקציה.
מסגרות אינטרנט אחרות
בנוסף ל-Django ול-Flask, אפשר להשתמש ב-frameworks אחרים לאינטרנט עם App Engine, כמו uwsgi ו-Tornado. בדוגמה הבאה אפשר לראות איך משתמשים ב-uwsgi עם App Engine:
משתני סביבה
משתני הסביבה הבאים מוגדרים על ידי זמן הריצה:
| משתנה הסביבה | תיאור |
|---|---|
GAE_APPLICATION
|
המזהה של אפליקציית App Engine. המזהה הזה מתחיל בקידומת region code~, למשל e~ לאפליקציות שמוצבות באירופה. |
GAE_DEPLOYMENT_ID |
המזהה של הפריסה הנוכחית. |
GAE_ENV |
סביבת App Engine. ההגדרה היא standard. |
GAE_INSTANCE |
המזהה של המופע שבו השירות שלכם פועל כרגע. |
GAE_MEMORY_MB |
נפח הזיכרון שזמין לתהליך האפליקציה, ב-MB. |
GAE_RUNTIME |
סביבת זמן הריצה שצוינה בקובץ app.yaml. |
GAE_SERVICE |
שם השירות שצוין בקובץ app.yaml. אם לא מציינים שם שירות, ברירת המחדל היא default. |
GAE_VERSION |
תווית הגרסה הנוכחית של השירות. |
GOOGLE_CLOUD_PROJECT |
מזהה הפרויקט ב- Google Cloud שמשויך לאפליקציה. |
PORT |
היציאה שמקבלת בקשות HTTP. |
NODE_ENV (זמין רק בסביבת זמן ריצה של Node.js) |
מגדירים את הערך production כשהשירות נפרס. |
אפשר להגדיר משתני סביבה נוספים בקובץ app.yaml, אבל אי אפשר לשנות את הערכים שלמעלה, למעט NODE_ENV.
פרוטוקול HTTPS ושרתי proxy להעברה
App Engine מסיימת חיבורי HTTPS במאזן העומסים ומעבירה בקשות לאפליקציה. יש אפליקציות שצריכות לקבוע את כתובת ה-IP והפרוטוקול של הבקשה המקורית. כתובת ה-IP של המשתמש זמינה בכותרת הרגילה X-Forwarded-For. אפליקציות שזקוקות למידע הזה צריכות להגדיר את תוכנת ה-framework שלהן כך שתיתן אמון בשרת ה-proxy.
מערכת קבצים
סביבת זמן הריצה כוללת מערכת קבצים מלאה. מערכת הקבצים היא לקריאה בלבד, למעט המיקום /tmp, שהוא דיסק וירטואלי שמאחסן נתונים בזיכרון ה-RAM של מופע App Engine.
שרת מטא-נתונים
כל מופע של האפליקציה יכול להשתמש בשרת המטא-נתונים של App Engine כדי לשלוח שאילתות לגבי המופע והפרויקט.
אפשר לגשת לשרת המטא-נתונים דרך נקודות הקצה הבאות:
http://metadatahttp://metadata.google.internal
בקשות שנשלחות לשרת המטא-נתונים צריכות לכלול את כותרת הבקשה Metadata-Flavor: Google. הכותרת הזו מציינת שהבקשה נשלחה בכוונה מפורשת לאחזר ערכי מטא-נתונים.
בטבלה הבאה מפורטות נקודות הקצה שאליהן אפשר לשלוח בקשות HTTP למטא-נתונים ספציפיים:
| נקודת קצה של מטא-נתונים | תיאור |
|---|---|
/computeMetadata/v1/project/numeric-project-id |
מספר הפרויקט שהוקצה לפרויקט שלכם. |
/computeMetadata/v1/project/project-id |
מזהה הפרויקט שהוקצה לפרויקט שלכם. |
/computeMetadata/v1/instance/region |
האזור שבו המופע פועל. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
כתובת האימייל בחשבון השירות שמוגדר כברירת מחדל ומוקצה לפרויקט. |
/computeMetadata/v1/instance/service-accounts/default/ |
מציגה את כל חשבונות השירות שמוגדרים כברירת מחדל בפרויקט. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
רשימה של כל ההיקפים הנתמכים בחשבונות שירות שמוגדרים כברירת מחדל. |
/computeMetadata/v1/instance/service-accounts/default/token |
מחזירה את אסימון האימות שאפשר להשתמש בו כדי לאמת את האפליקציה שלכם ב-Google Cloud APIs אחרים. |
לדוגמה, כדי לאחזר את מזהה הפרויקט, שולחים בקשה אל http://metadata.google.internal/computeMetadata/v1/project/project-id.