מזהה אזור
REGION_ID הוא קוד מקוצר ש-Google מקצה על סמך האזור שבוחרים כשיוצרים את האפליקציה. הקוד לא תואם למדינה או למחוז, למרות שחלק ממזהי האזורים עשויים להיראות דומים לקודים נפוצים של מדינות ומחוזות. באפליקציות שנוצרו אחרי פברואר 2020, REGION_ID.r נכלל בכתובות URL של App Engine. באפליקציות קיימות שנוצרו לפני התאריך הזה, מזהה האזור הוא אופציונלי בכתובת ה-URL.
צריך להשתמש בקובץ appengine-web.xml כדי להגדיר את האפליקציה רק אם מעבירים אפליקציה קיימת מסביבת זמן ריצה של App Engine Java 8 לגרסה האחרונה של Java שנתמכת, ורוצים להשתמש בשירותים מדור קודם.
אם אתם משתמשים ב-appengine-web.xml בפרויקט, המערכת יוצרת בשבילכם את app.yaml באופן אוטומטי בזמן הפריסה.
אפליקציות Java ב-App Engine משתמשות בקובץ הגדרות בשם appengine-web.xml כדי לציין מידע על האפליקציה ולזהות אילו קבצים בקובץ WAR של האפליקציה הם קבצים סטטיים (כמו תמונות) ואילו הם קובצי משאבים שמשמשים את האפליקציה.
תחביר
באפליקציית Java של App Engine צריך להיות קובץ בשם appengine-web.xml ב-WAR, בספרייה WEB-INF/. זהו קובץ XML שרכיב הבסיס שלו הוא <appengine-web-app>.
אפשר למצוא את הגדרת סוג המסמך ואת מפרטי הסכימה של appengine-web.xml בספרייה docs/ של ה-SDK.
| רכיב | תיאור |
|---|---|
<application> |
לא נדרש אם פורסים את האפליקציה באמצעות כלים שמבוססים על Google Cloud SDK, כמו הפקודה |
app_engine_apis
|
זה שינוי אופציונלי. מגדירים את השדה הזה לערך מומלץ להשתמש ב- |
app_engine_bundled_services
|
זה שינוי אופציונלי. צריך להגדיר את השדה הזה כדי לאפשר גישה לשירותים ספציפיים בחבילה בסביבות זמן ריצה מהדור השני. אי אפשר להשתמש בהגדרה הזו אם מגדירים את השדה מציינים את אחד מהשירותים הנתמכים הבאים בחבילה באמצעות ההגדרה הזו:
לדוגמה: <app-engine-bundled-services> <api>datastore_v3</api> <api>memcache</api> </app-engine-bundled-services> בדוגמה הזו, האפליקציה יכולה להשתמש רק בשירותים המשולבים Datastore ו-Memcache. |
<entrypoint>
|
אופציונלי, רק לזמני ריצה מהדור השני. מבטל את נקודת הכניסה שמוגדרת כברירת מחדל, שהיא שורת הפקודה של התהליך שמפעילה את אפליקציית Java. כברירת מחדל, נקודת הכניסה שנוצרת עבור סוג מכונה F4 (הגדרות הזיכרון מחושבות מסוג המכונה) שווה להגדרה הבאה: <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <entrypoint> java -showversion -Xms32M -Xmx819M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:+PrintCommandLineFlags --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED --add-opens java.logging/java.util.logging=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED -Dclasspath.runtimebase=/base/java_runtime -Djava.class.path=/base/java_runtime/runtime-main.jar -Djava.library.path=/base/java_runtime: com/google/apphosting/runtime/JavaRuntimeMainWithDefaults --fixed_application_path=/workspace /base/java_runtime </entrypoint> </appengine-web-app>
אפשר לשנות את ההגדרה כדי להוסיף דגלים נוספים של תהליך JVM או להגדיר תהליך משלכם לאתחול.
שימו לב שהאפליקציה נפרסת בספרייה |
<async-session-persistence> |
זה שינוי אופציונלי. אפשר להקטין את זמן האחזור של הבקשה על ידי הגדרת האפליקציה כך שתכתוב נתונים של סשנים ב-HTTP ב-Datastore באופן אסינכרוני: <async-session-persistence enabled="true" /> אם מפעילים את התכונה 'שמירת נתוני סשן אסינכרונית', App Engine ישלח משימה ל-Task Queue כדי לכתוב את נתוני הסשן ל-Datastore לפני כתיבת הנתונים ל-memcache. כברירת מחדל, המשימה תוגש לתור ברירת המחדל. אם רוצים להשתמש בתור אחר, מוסיפים את המאפיין `queue-name`: <async-session-persistence enabled="true" queue-name="myqueue"/> נתוני ביקורים תמיד נכתבים באופן סינכרוני ל-memcache. אם בקשה מנסה לקרוא את נתוני הסשן כש-memcache לא זמין (או כשנתוני הסשן נמחקו), היא תעבור ל-Datastore, שבו יכול להיות שעדיין לא יהיו נתוני הסשן העדכניים ביותר. המשמעות היא ששימור סשנים אסינכרוני עלול לגרום לאפליקציה שלכם לראות נתוני סשנים לא עדכניים. עם זאת, ברוב האפליקציות היתרון של השהיה נמוכה עולה בהרבה על הסיכון. |
<auto-id-policy> |
זה שינוי אופציונלי. אם
הגדרתם מזהים של ישויות באופן אוטומטי, תוכלו לשנות את השיטה
שבה נעשה שימוש על ידי הגדרת מדיניות המזהים האוטומטיים. אלה האפשרויות התקינות:
|
<automatic-scaling> |
זה שינוי אופציונלי. הסבר מלא מופיע בקטע בנושא התאמה אוטומטית לעומס (automatic scaling). |
<basic-scaling> |
זה שינוי אופציונלי. הסבר מלא מופיע בקטע שינוי גודל בסיסי. |
<env-variables> |
זה שינוי אופציונלי.
בקובץ <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> כדי למנוע התנגשויות עם הסביבה המקומית, שרת הפיתוח לא מגדיר משתני סביבה על סמך הקובץ הזה, ונדרש שמשתנים אלה כבר יוגדרו בסביבה המקומית לערכים תואמים. export DEFAULT_ENCODING="UTF-8" dev_appserver war כשפורסים את האפליקציה ב-App Engine, הסביבה נוצרת עם המשתנים האלה שכבר מוגדרים. כדי לקבוע כמה זמן חיבור נשאר בלי פעילות בלי העברת נתונים לפני שהלקוח סוגר אותו, צריך להגדיר זמן קצוב לתפוגה למצב המתנה באמצעות התחביר הבא: <env-variables> <env-var name="APPENGINE_API_CALLS_IDLE_TIMEOUT_MS" value="TIMEOUT_IN_MS" /> </env-variables> מחליפים את כדי להתאים למועד האחרון של 60 שניות לאחזור בקשה או כתובת URL,
מגדירים את הערך ל- הגדרת הזמן הקצוב לתפוגה של חוסר פעילות לא זהה לזמן הקצוב הכולל לתפוגה של בקשה לצורך שינוי גודל, או לזמן הקצוב לתפוגה של URL Fetch API שמוגדר באמצעות |
<inbound-services> |
זה שינוי אופציונלי.
כדי שאפליקציה תוכל לקבל אימייל, צריך להגדיר אותה כך שהשירות יופעל.
כדי להפעיל את השירות לאפליקציית Java, צריך לכלול קטע השירות הנכנס הבא זמין:
|
<instance-class> |
זה שינוי אופציונלי. גודל מחלקת המופעים של המודול הזה. אלה המחלקות של המופעים שזמינות כשמציינים אפשרויות שונות של שינוי גודל:
|
<manual-scaling> |
זה שינוי אופציונלי. הסבר מלא מופיע בקטע שינוי גודל ידני. |
<precompilation-enabled> |
זה שינוי אופציונלי. App Engine משתמש בתהליך של "קומפילציה מראש" עם קוד הבייטים של Java באפליקציה כדי לשפר את הביצועים של האפליקציה בסביבת זמן הריצה של Java. קוד שעבר קומפילציה מראש פועל בדיוק כמו הבייטקוד המקורי.
אם מסיבה כלשהי אתם מעדיפים שהאפליקציה שלכם לא תשתמש בהידור מראש, אתם יכולים להשבית את האפשרות הזו על ידי הוספת השורה הבאה לקובץ <precompilation-enabled>false</precompilation-enabled> |
<module> |
הערה: השם של המודולים הוא עכשיו Services, והשירותים עדיין מוצהרים בקובצי חובה אם יוצרים שירות. אופציונלי לשירות ברירת המחדל. לכל שירות ולכל גרסה צריך להיות שם. שם יכול להכיל מספרים, אותיות ומקפים. השם לא יכול להיות ארוך מ-63 תווים, הוא לא יכול להתחיל או להסתיים במקף, והוא לא יכול להכיל את המחרוזת `-dot`. צריך לבחור שם ייחודי לכל שירות ולכל גרסה. אל תשתמשו באותם שמות בשירותים ובגרסאות שונים. אפשר לעיין גם בשירות. |
<public-root> |
זה שינוי אופציונלי.
ערך ברירת המחדל
לדוגמה, הפקודה הבאה תמפה את נתיב כתובת ה-URL
<public-root>/static</public-root> |
<resource-files> |
זה שינוי אופציונלי. אפשר לגשת לקבצים שמפורטים ברכיב
רכיב
קריאת קובצי משאבים של App Engine מתבצעת באמצעות |
<runtime> |
כדי להשתמש בגרסה העדכנית ביותר של Java שנתמכת, צריך לציין את הערך הזה עם הערך
<runtime>java25</runtime> |
<service> |
השירותים נקראו בעבר מודולים. הגדרת שירות באופן הבא:
|
<service-account> |
זה שינוי אופציונלי. רכיב <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> |
<sessions-enabled> |
זה שינוי אופציונלי. App Engine כולל הטמעה של סשנים באמצעות ממשק הסשן של servlet. ההטמעה מאחסנת את נתוני הסשן ב-Datastore לצורך שמירה, ומשתמשת גם ב-memcache כדי להגביר את המהירות. בדומה לרוב מאגרי ה-servlet האחרים, מאפייני הסשן שמוגדרים באמצעות `session.setAttribute()` במהלך הבקשה נשמרים בסוף הבקשה.
התכונה הזו מושבתת כברירת מחדל. כדי להפעיל את האפשרות, מוסיפים את השורה הבאה אל
<sessions-enabled>true</sessions-enabled>
ההטמעה יוצרת ישויות Datastore מסוג
הערה: מכיוון ש-App Engine מאחסן נתוני סשן ב-Datastore וב-memcache, כל הערכים שמאוחסנים בסשן צריכים להטמיע את הממשק
במאמר בנושא רכיב
|
<ssl-enabled> |
זה שינוי אופציונלי. כברירת מחדל, כל משתמש יכול לגשת לכל כתובת URL באמצעות HTTP או HTTPS. אפשר להגדיר אפליקציה כך שיידרש HTTPS לכתובות URL מסוימות בקובץ תיאור הפריסה. מידע נוסף
אם רוצים לאסור את השימוש ב-HTTPS באפליקציה, צריך להוסיף את השורה הבאה לקובץ <ssl-enabled>false</ssl-enabled> בסביבת זמן הריצה של Java, אין אפשרות להשבית את HTTPS עבור נתיבי כתובות URL מסוימים ולא עבור אחרים. |
<static-error-handlers> |
זה שינוי אופציונלי.
כשמתרחשות שגיאות מסוימות, App Engine מציג דף שגיאה גנרי. אתם יכולים להגדיר את האפליקציה כך שתציג קובץ סטטי מותאם אישית במקום דפי השגיאה הכלליים האלה, בתנאי שנתוני השגיאה המותאמים אישית קטנים מ-10 קילובייט. אפשר להגדיר קבצים סטטיים שונים שיוצגו לכל קוד שגיאה נתמך. כדי לעשות זאת, צריך לציין את הקבצים בקובץ <static-error-handlers> <handler file="default_error.html" /> <handler file="over_quota.html" error-code="over_quota" /> </static-error-handlers> אזהרה: חשוב לוודא שהנתיב לקובץ תגובת השגיאה לא חופף לנתיבים של קובצי handler סטטיים.
כל ערך
השדה
אפשר גם לציין |
<static-files> |
זה שינוי אופציונלי.
רכיב
רכיב
<static-files> <include path="/my_static-files" > <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> </include> </static-files> |
<system-properties> |
זה שינוי אופציונלי. בקובץ <system-properties> <property name="myapp.maximum-message-length" value="140" /> <property name="myapp.notify-every-n-signups" value="1000" /> <property name="myapp.notify-url" value="http://www.example.com/signupnotify" /> </system-properties> <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> זה שינוי אופציונלי. אתם יכולים להגדיר מחבר HTTP כדי לשפר את השימוש במעבד ובזיכרון. אם האפליקציה שלכם מבצעת אינטראקציה עם פעולות של Datastore או Task Queues, כדאי להגדיר מעקב כדי לעקוב אחרי ההשפעות על הביצועים וההתנהגות אחרי הפעלת התכונה הזו. <system-properties> <property name="appengine.use.httpconnector" value="true"/> </system-properties> זה שינוי אופציונלי. אפשר להגדיר את זמן הריצה הבסיסי של Java 17 כך שיפעל ב-EE 8, את Java 21 ב-EE 10 או את Java 25 ב-EE 11 באמצעות מאפיין המערכת הבא. מידע נוסף על תמיכה ב-EE זמין במאמר שדרוג Java בגרסה תואמת של Enterprise Edition (EE). <system-properties> <property name="appengine.use.EE11" value="true"/><!--only for Java 25--> </system-properties> <system-properties> <property name="appengine.use.virtualthreads" value="true"/> </system-properties> |
<url-stream-handler> |
זה שינוי אופציונלי. הערכים האפשריים הם ערך ברירת המחדל הוא אם מגדירים את <url-stream-handler>urlfetch</url-stream-handler> |
<version> |
הרכיב
שמות הגרסאות צריכים להתחיל באות, כדי להבדיל אותם ממופעים מספריים שתמיד מצוינים על ידי מספר. כך נמנעת דו-משמעות בכתובות URL כמו |
<warmup-requests-enabled> |
זה שינוי אופציונלי. ברירת מחדל: true. בקשות חימום מופעלות כברירת מחדל באפליקציות Java.
אם מפעילים בקשות הפעלה, התשתית של App Engine שולחת בקשות GET אל
כדי להשבית את בקשות החימום, מציינים <warmup-requests-enabled>false</warmup-requests-enabled> |
<vpc-access-connector> |
זה שינוי אופציונלי.
הגדרת האפליקציה לשימוש במחבר של חיבור לרשת (VPC) מאפליקציית serverless, כדי לאפשר לאפליקציה לשלוח בקשות למשאבים פנימיים ברשת ה-VPC. מציינים את השם המלא של המחבר ברכיב <vpc-access-connector>
<name>projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]</name>
</vpc-access-connector>מידע נוסף זמין במאמר התחברות למשאבים פנימיים ברשת VPC. |
שינוי גודל של אלמנטים
בטבלה הבאה מפורטות האפשרויות להגדרת האופן שבו האפליקציה שלכם צריכה להתרחב.
השוואה בין תכונות הביצועים של סוגי ההתאמה לגודל
| רכיב | תיאור |
|---|---|
<automatic-scaling> |
זה שינוי אופציונלי. כברירת מחדל, המערכת מניחה שמתבצעת התאמה אוטומטית לעומס, עם סוג ברירת מחדל של מופע
רכיב האלמנט הזה יכול להכיל את האלמנטים הבאים:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>F2</instance-class> <automatic-scaling> <target-cpu-utilization>0.65</target-cpu-utilization> <min-instances>5</min-instances> <max-instances>100</max-instances> <max-concurrent-requests>50</max-concurrent-requests> </automatic-scaling> </appengine-web-app> |
<basic-scaling> |
זה שינוי אופציונלי.
רכיב האלמנט הזה יכול להכיל את האלמנטים הבאים:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>B8</instance-class> <basic-scaling> <max-instances>11</max-instances> <idle-timeout>10m</idle-timeout> </basic-scaling> </appengine-web-app> |
<manual-scaling> |
זה שינוי אופציונלי.
האלמנט האלמנט הזה יכול להכיל את האלמנטים הבאים:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>B8</instance-class> <manual-scaling> <instances>5</instances> </manual-scaling> </appengine-web-app> |
אלמנטים של Staging
חלק גדול מהעבודה שמתבצעת במהלך פריסה מתרחש באופן מקומי בשלב הכנה שנקרא העברה לבמה, שבו קובצי JAR מורכבים, קובצי JSP עוברים קומפילציה וכן הלאה. אפשר גם להגדיר חלקים מסוימים בהתנהגות של הסביבה הזמנית באמצעות רכיבים של הסביבה הזמנית בקובץ ההגדרות של האפליקציה. רוב האפליקציות יופעלו בהצלחה בלי שתצטרכו להגדיר ידנית את אופן הפעולה של הסביבה הזמנית. אם האפליקציה לא נפרסת, יכול להיות שתצטרכו להגדיר את הסביבה הזמנית באמצעות האפשרויות שמופיעות בטבלה הבאה.
| רכיב | תיאור |
|---|---|
<staging> |
זה שינוי אופציונלי. ברוב האפליקציות אין צורך לשנות את התנהגות ברירת המחדל. רכיב ההכנה מאפשר לציין הגדרת הכנה ספציפית אם נדרש כזה לצורך פריסה. האלמנט הזה יכול להכיל את האלמנטים הבאים:
לדוגמה:
<staging>
<delete-jsps>false</delete-jsps>
</staging>
|
ברירות מחדל של אפשרויות ההעברה לסביבת הפיתוח
הגדרות ברירת המחדל לאפשרויות ההעברה לבמה משתנות בהתאם לכלי שבו משתמשים: כלי שמבוסס על Google Cloud SDK, כמו ה-CLI של gcloud, או תוספים שמבוססים על Google Cloud SDK: Maven, Gradle או IntelliJ.
| רכיב Staging | הגדרות ברירת מחדל מבוססות SDK של App Engine – | ברירות מחדל שמבוססות על Google Cloud SDK |
|---|---|---|
enable-jar-splitting |
false |
true |
jar-splitting-excludes |
לא רלוונטי | לא רלוונטי |
disable-jar-jsps |
false |
false |
enable-jar-classes |
false |
true. זה יכול להשפיע על סדר טעינת המחלקות, לכן אם האפליקציה שלכם תלויה בסדר מסוים באמצעות ברירת המחדל הקודמת false, אתם יכולים להגדיר את זה ל-false. |
delete-jsps |
false |
true |
compile-encoding |
utf-8 |
utf-8 |
תחביר של הכללה והחרגה
תבניות נתיב מצוינות באמצעות אפס רכיבי <include> או יותר ורכיבי <exclude>. בתבנית, '*' מייצג אפס או יותר מכל תו בשם של קובץ או ספרייה, ו-** מייצג אפס או יותר ספריות בנתיב. קבצים וספריות שתואמים לתבניות <exclude>
לא יועלו כשפורסים את האפליקציה ב-App Engine. עם זאת, האפליקציה שלכם עדיין תוכל לגשת לקבצים ולספריות האלה כשהיא פועלת בשרת הפיתוח המקומי.
רכיב <include> מבטל את התנהגות ברירת המחדל של הכללת כל הקבצים. רכיב <exclude> חל אחרי כל התבניות של <include> (וגם אחרי ברירת המחדל אם לא סופק <include> מפורש).
בדוגמה הבאה מוצג איך להגדיר את כל הקבצים png כקבצים סטטיים (חוץ מאלה שבספרייה data/ ובכל תיקיות המשנה שלה):
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
אפשר גם להגדיר כותרות HTTP לשימוש בתגובה לבקשות למשאבים סטטיים.
<static-files>
<include path="/my_static-files" >
<http-header name="Access-Control-Allow-Origin"
value="http://example.org" />
</include>
</static-files>
סוגי MIME לקבצים סטטיים
כברירת מחדל, קבצים סטטיים מוגשים באמצעות סוג MIME שנבחר על סמך הסיומת בשם הקובץ. אתם יכולים לשייך סוגי MIME מותאמים אישית לתוספי שמות קבצים עבור קבצים סטטיים באמצעות רכיבי mime-mapping ב-web.xml.
פסק זמן ב-URLFetch
אפשר להגדיר מועד אחרון לכל בקשת URLFetch. כברירת מחדל, הדדליין לאחזור הוא 5 שניות.
אפשר לשנות את ברירת המחדל הזו על ידי הכללת ההגדרה הבאה בקובץ ההגדרות appengine-web.xml. מציינים את הזמן הקצוב לתפוגה בשניות:
<system-properties>
<property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>