מזהה אזור
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 שצורפו לזמני ריצה מהדור השני, צריך להגדיר את השדה הזה לערך |
<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 ישלח משימה לתור המשימות כדי לכתוב את נתוני הסשן ב-Datastore לפני כתיבת הנתונים ב-memcache. כברירת מחדל, המשימה תוגש לתור 'default'. אם רוצים להשתמש בתור אחר, מוסיפים את המאפיין queue-name: <async-session-persistence enabled="true" queue-name="myqueue"/> נתוני ביקורים תמיד נכתבים באופן סינכרוני ל-memcache. אם בקשה מנסה לקרוא את נתוני הסשן כש-Memcache לא זמין (או כשנתוני הסשן נמחקו), היא תעבור ל-Datastore, שבו יכול להיות שעדיין לא יהיו נתוני הסשן העדכניים ביותר. המשמעות היא ששמירת סשן אסינכרונית יכולה לגרום לאפליקציה שלכם לראות נתוני סשן לא עדכניים. עם זאת, ברוב האפליקציות, היתרון של השהייה נמוכה עולה בהרבה על הסיכון. |
<auto-id-policy> |
זה שינוי אופציונלי. אם
הגדרתם מזהים של ישויות באופן אוטומטי, תוכלו לשנות את השיטה
שבה נעשה שימוש על ידי הגדרת מדיניות המזהים האוטומטיים. אלה האפשרויות התקינות:
|
<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 מסוימות בקובץ תיאור הפריסה. לעיון במאמר בנושא תיאור פריסה: כתובות 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> אזהרה: חשוב לוודא שהנתיב לקובץ תגובת השגיאה לא חופף לנתיבים של קבצים סטטיים.
כל ערך
השדה
אפשר גם לציין |
<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.
אם מפעילים <href=" appengine="" configuring-warmup-requests"="" docs="" standard="">בקשות הפעלה
מראש, התשתית של App Engine מנפיקה בקשות GET ל-
כדי להשבית את בקשות החימום, מציינים <warmup-requests-enabled>false</warmup-requests-enabled> |
<vpc-access-connector> |
זה שינוי אופציונלי.
הכלי מגדיר את האפליקציה כך שתשתמש במחבר Serverless VPC Access, וכך האפליקציה תוכל לשלוח בקשות למשאבים פנימיים ברשת ה-VPC. מציינים את השם המלא של המחבר ברכיב <vpc-access-connector>
<name>projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]</name>
</vpc-access-connector>מידע נוסף זמין במאמר התחברות למשאבים פנימיים ברשת VPC. |
שינוי הגודל של אלמנטים
בטבלה הבאה מפורטות האפשרויות להגדרת האופן שבו האפליקציה שלכם צריכה להתרחב.
כדי לראות השוואה בין תכונות הביצועים של סוגי ההתאמה לגודל, אפשר לעיין במאמר בנושא התאמה דינמית של גודל המכונות.
| רכיב | תיאור |
|---|---|
<automatic-scaling> |
זה שינוי אופציונלי. כברירת מחדל, המערכת מניחה שמתבצע התאמה אוטומטית לעומס (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, או בתוספים Maven, Gradle או IntelliJ שמבוססים על Google Cloud SDK.
| רכיב 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>