יכולות להיות כמה סיבות לשגיאות פריסה ב-App Engine, כולל הרשאות חסרות, שינויים במדיניות הארגון ובעיות בהגדרות האפליקציה.
בדף הזה מתוארות שגיאות נפוצות בפריסה ב-App Engine ושיטות לפתרון בעיות שקשורות אליהן:
שגיאות הרשאה
בקטע הזה מתוארות שגיאות שעשויות להתרחש כשפורסים את האפליקציה בגלל הרשאות חסרות בחשבון או שינויים במדיניות הארגון.
כדי לזהות את החשבון הפעיל שבו אתם משתמשים כדי לגשת ל-Google Cloud CLI ולכלים אחרים ב Google Cloud הפלטפורמה, מבצעים אחת מהפעולות הבאות:
אם השתמשתם ב-Google Cloud CLI לפריסה, מריצים את הפקודה
gcloud auth list.אם ביצעתם פריסה מ-IDE, תוכלו לראות את ההגדרות של התוסף Cloud Tools.
כדי להבין למה הקצאה של התפקיד 'פריסת App Engine' (roles/appengine.deployer) בלבד לא מספיקה במקרים מסוימים, אפשר לעיין במאמר בנושא תפקידים ב-App Engine.
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
פריסה נכשלת בפרויקטים חדשים
יכול להיות שתופיע השגיאה הבאה כשפורסים את האפליקציה בפעם הראשונה בפרויקט חדש:
ERROR: (gcloud.app.deploy) Error Response: [13] Failed to create cloud build: com.google.net.rpc3.client.RpcClientException:..........invalid bucket "staging.PROJECT_ID.appspot.com"; service account PROJECT_ID@appspot.gserviceaccount.com does not have access to the bucket
כדי לפתור את הבעיה, צריך להעניק לחשבון השירות שמוגדר כברירת מחדל את התפקיד אדמין אחסון (roles/storage.admin). מידע נוסף זמין במאמר בנושא אחסון יומני בנייה בדלי שנוצר על ידי משתמש.
אם כבר הענקתם את התפקיד 'אדמין של Storage', יחד עם התפקידים הנדרשים האחרים על סמך שגיאות הרשאה שונות שנתקלתם בהן במהלך הפריסה, ועדיין לא הצלחתם לפרוס את האפליקציה, יכול להיות שהסיבה לכך היא השינויים הבאים במדיניות הארגון:
החל ממאי 2024, Google Cloud אוכף מדיניות ארגונית שמוגדרת כמאובטחת כברירת מחדל לכל המשאבים בארגון. המדיניות הזו מונעת מ-App Engine להעניק את התפקיד
Editorלחשבונות השירות שמוגדרים כברירת מחדל ב-App Engine.ביוני 2024, חל שינוי בהתנהגות ברירת המחדל של Cloud Build לגבי השימוש בחשבונות שירות בפרויקטים חדשים. מידע מפורט על השינוי הזה זמין במאמר שינוי בחשבון השירות שמשמש כברירת מחדל ב-Cloud Build. כתוצאה מהשינוי הזה, יכול להיות שבפרויקטים חדשים שפורסים גרסאות בפעם הראשונה נעשה שימוש בחשבון השירות שמשמש כברירת מחדל של App Engine עם הרשאות לא מספיקות לפריסת גרסאות.
כדי לפתור את הבעיה:
מקצים את התפקיד
Editorלחשבון השירות שמשמש כברירת המחדל של App Engine (PROJECT_ID@appspot.gserviceaccount.com).כדאי לעיין בהנחיות של Cloud Build בנושא שינויים בחשבון השירות שמוגדר כברירת מחדל ולהשבית את השינויים שמוגדרים כברירת מחדל בפרויקטים חדשים.
למתקשר אין הרשאה לגשת לפרויקט
השגיאה הבאה מתרחשת אם לחשבון השירות אין הרשאה לפרוס אפליקציות בפרויקט הנוכחי:
User EMAIL_ADDRESS does not have permission to access project PROJECT_ID (or it may not exist).
כדי לפתור את הבעיה, צריך להעניק לחשבון השירות את התפקיד פריסה ב-App Engine (roles/appengine.deployer).
אחזור המטא-נתונים מהמאגר נכשל
השגיאה הבאה מתרחשת אם משתמשים בפקודה gcloud app deploy מחשבון שירות שאין לו את התפקיד Storage Admin (אדמין אחסון) (roles/storage.admin):
Failed to fetch metadata from the registry, with reason: generic::permission_denied
כדי לפתור את הבעיה, צריך להקצות לחשבון השירות את התפקיד 'אדמין אחסון'.
לחשבונות השירות צריכות להיות הרשאות לגבי התמונה
השגיאה הבאה מתרחשת כשפורסים את האפליקציה:
The App Engine appspot and App Engine flexible environment service accounts must
have permissions on the image IMAGE_NAME
השגיאה הזו מתרחשת בגלל אחת מהסיבות הבאות:
לחשבון השירות שמוגדר כברירת מחדל ב-App Engine אין את התפקיד 'צפייה באובייקט אחסון' (
roles/storage.objectViewer).כדי לפתור את הבעיה הזו, צריך להקצות לחשבון השירות את התפקיד 'צפייה באובייקט אחסון'.
בפרויקט שלכם יש גבולות גזרה לשירות של VPC Service Controls שמגביל את הגישה ל-Cloud Storage API באמצעות רמות גישה.
כדי לפתור את הבעיה הזו, צריך להוסיף את חשבון השירות שבו אתם משתמשים כדי לפרוס את האפליקציה ל-accessPolicies של גבולות גזרה לשירות המתאים ב-VPC Service Controls.
אחרי 15 במאי 2024, מאגר Artifact Registry יארח תמונות לדומיין
gcr.ioבפרויקטים Google Cloud שלא נעשה בהם שימוש קודם ב-Container Registry. אם פורסים אפליקציה קיימת בפרויקט חדש שנוצר אחרי התאריך הזה, יכול להיות שלחשבון השירות לא יהיו ההרשאות הנדרשות לפריסת האפליקציה. כדי להעניק את ההרשאות הנדרשות, אפשר לעיין במאמר בנושא פריסה ב-App Engine.
היצירה של Cloud Build נכשלה
השגיאה הבאה מתרחשת אם משתמשים בפקודה gcloud app deploy מחשבון שירות שאין לו את התפקיד Cloud Build Editor (עריכה ב-Cloud Build) (roles/cloudbuild.builds.editor).
Failed to create cloud build: Permission denied
כדי לפתור את הבעיה הזו, צריך להקצות לחשבון השירות את התפקיד 'עריכה' ב-Cloud Build.
שגיאה באחזור האפליקציה
השגיאה הבאה מתרחשת כשחשבון השירות שבו השתמשתם כדי לפרוס את האפליקציה לא כולל את התפקיד App Engine Deployer.
Permissions error fetching application apps/app_name. Please make sure you are using the correct project ID and that you have permission to view applications on the project.
If you are running Google Cloud CLI version 328 or later, the following error occurs
when you deploy your app:
make sure that you have permission to view applications on the project and that
SERVICE_ACCOUNT has the App Engine Deployer (roles/appengine.deployer) role.
כדי לפתור את הבעיה, צריך להקצות את התפקיד App Engine Deployer (פורס ב-App Engine) לחשבון השירות שבו השתמשתם כדי לפרוס את האפליקציה.
שגיאה בהטמעה של שירות עם מחבר של חיבור לרשת (VPC) מאפליקציית serverless
השגיאה הבאה מתרחשת כשמשתמש או חשבון שירות מנסים לפרוס את האפליקציה באמצעות מחבר Serverless VPC Access, אבל אין להם את ההרשאות הנדרשות:
Please ensure you have [compute.globalOperations.get] on the service project
כדי לפתור את הבעיה הזו, צריך לוודא שלמשתמש או לחשבון השירות שמשמשים לפריסה יש את התפקידים משתמש של מחברי חיבור לרשת (VPC) מאפליקציית serverless וCompute Viewer IAM.
תם פרק הזמן שהוקצב להמתנה עד שהתשתית של האפליקציה תהיה תקינה
השגיאה הבאה מתרחשת כשפורסים את האפליקציה:
Timed out waiting for the app infrastructure to become flex_await_healthy
יש כמה גורמים לשגיאה הזו, למשל הרשאות חסרות, שגיאות בקוד, מחסור במעבד או בזיכרון או בדיקות תקינות שנכשלו.
כדי לפתור את הבעיה, צריך לבדוק את הסיבות האפשריות הבאות:
בודקים אם מדיניות הארגון של הפרויקט מגבילה את הגישה לכתובות IP חיצוניות. מידע נוסף זמין במאמר בנושא בעיות מוכרות בסביבה גמישה של App Engine.
מוודאים שהקציתם את התפקידים הבאים לחשבון השירות שבו אתם משתמשים כדי להריץ את האפליקציה (בדרך כלל חשבון השירות שמוגדר כברירת מחדל,
app-id@appspot.gserviceaccount.com):אם לחשבון השירות אין את התפקידים הנדרשים, צריך להעניק לו את התפקידים שחסרים לפי שגיאות הפריסה.
אם אתם מבצעים פריסה בהגדרת VPC משותף ומגדירים
instance_tagבקובץapp.yaml, כדאי לעיין במאמר שגיאת ערך לא חוקי במהלך פריסה בהגדרת VPC משותף כדי לפתור את הבעיה.
שגיאה בהפעלה מחדש של מופעים בגרסאות פעילות
השגיאה הבאה מתרחשת כשפורסים את האפליקציה:
error when restarting the instance under the running versions
החל ממאי 2024, Google Cloud אוכף את מדיניות הארגון מאובטח כברירת מחדל בכל הארגונים החדשים. לפי המדיניות הזו, בכל המקרים שבהם נוצרות מכונות וירטואליות בפרויקטים חדשים, צריך להפעיל את VM Manager. בפרויקטים חדשים וקיימים, המגבלה הזו מונעת עדכוני מטא-נתונים שמשביתים את VM Manager ברמת הפרויקט או המכונה.
כדי לפתור את הבעיה, צריך להשבית את אילוץ המדיניות הארגונית Require OS Config (constraints/compute.requireOsConfig).
אם הבעיה נמשכת, צריך גם להשבית את מדיניות הארגון הבאה, שאולי הופעלה ברמת הפרויקט או ברמת הארגון:
הגדרה של כתובות IP חיצוניות שאושרו למכונות וירטואליות (
constraints/compute.vmExternalIpAccess). אם האפליקציה מוגדרת לשימוש רק ברשת פרטית, אין צורך להשבית את האילוץ הזה.השבתה של מאפייני אורח במטא-נתונים של Compute Engine (
constraints/compute.disableGuestAttributesAccess)
ההרשאה הנדרשת compute.firewalls.list
השגיאה הבאה מתרחשת כשפורסים את האפליקציה ברשת VPC משותפת:
Request to https://compute.googleapis.com/compute/v1/projects/projects/PROJECT_ID/global/firewalls?key failed, details: Required 'compute.firewalls.list' permission for 'projects/PROJECT_ID'
השגיאה הזו מתרחשת אם לחשבונות השירות הבאים בפרויקט המארח אין את התפקיד Compute Network User (roles/compute.networkUser):
כדי לפתור את הבעיה הזו, צריך להעניק את התפקיד Compute Network User לחשבונות השירות סוכן שירות של Google APIs ו-App Engine flexible environment Service Agent בפרויקט המארח.
הפריסה נכשלת בגלל מגבלה של מדיניות הארגון
השגיאה הבאה מתרחשת כשפורסים אפליקציה:
ERROR: (gcloud.app.deploy) Error Response: [13] An internal error occurred while processing task /app-engine-flex/....: Request to https://compute.googleapis.com/compute/VERSION/projects/PROJECT_ID/... failed, details: Constraint constraints/compute.disableGuestAttributesAccess violated for project PROJECT_ID.
יכול להיות שהסיבה לכך היא האכיפה של האילוץ constraints/compute.disableGuestAttributesAccess כשפורסים את האפליקציה. כל האפליקציות בסביבה הגמישה של App Engine אוכפות את מדיניות הארגון הזו כברירת מחדל.
כדי לפתור את הבעיה, צריך להשבית את האילוץ constraints/compute.disableGuestAttributesAccess.
שגיאות נפוצות בהטמעה
בקטע הזה מוסבר על אסטרטגיות לפתרון בעיות שגיאות בהגדרות של האפליקציה או הפרויקט.
שגיאת ערך לא חוקי כשמבצעים פריסה בהגדרת VPC משותף
השגיאה הבאה מוצגת ב-Cloud Logging עבור מכונות וירטואליות גמישות כשמבצעים פריסה של האפליקציה:
Invalid value for field 'resource.tags.items[1]': 'aef-instance'. Duplicate
tags are not allowed: aef-instance on compute.instances.insert
זו בעיה מוכרת שבה הגדרת instance_tag
בקובץ app.yaml גורמת לשגיאות כשיוצרים מופעים.
כדי לפתור את הבעיה, צריך להסיר את השדה instance_tag מהקובץ app.yaml ולפרוס מחדש.
חריגה מהמגבלה על מספר המופעים המקסימלי
השגיאה הבאה מתרחשת כשפורסים את האפליקציה:
You may not have more than 'xx' total max instances in your project.
יש מגבלה על המספר המקסימלי של מופעים שאפשר ליצור בכל פרויקט. אם חורגים מהמגבלה הזו, בקשות ליצירת מופעים נוספים נכשלות.
כדי לפתור את הבעיה, צריך להגדיר את הערך של max_instances בקובץ app.yaml לערך שקטן מהמגבלה הזו, או למחוק חלק מהשירותים או מהגרסאות כדי שהסכום של max_instances יהיה במסגרת המגבלה.
ה-Build נכשל במהלך הפריסה בלי שגיאות ביומנים
השגיאה הבאה מתרחשת כשפורסים את האפליקציה:
ERROR: (gcloud.app.deploy) Cloud build failed. Check logs at https://console.cloud.google.com/cloud-build/builds/BUILD_ID?project=PROJECT_NUMBER Failure status: UNKNOWN: Error Response: [2] Build failed; check build logs for details
אם לחצתם על הקישור בהודעת השגיאה וגיליתם שכל שלבי הבנייה הושלמו בהצלחה, אבל האפליקציה עדיין לא נבנתה, יכולות להיות לכך שתי סיבות:
- אתם משתמשים במפתחות הצפנה בניהול הלקוח (CMEK).
- מגדירים מדיניות לשמירת נתונים עבור קטגוריית
staging.PROJECT_ID.appspot.com.
כדי לפתור את הבעיה, צריך לשנות את ההגדרות הבאות של הדלי:
- מגדירים את ההצפנה לGoogle-owned and Google-managed encryption keys.
- מסירים את מדיניות שמירת הנתונים.
שגיאות בהטמעה בגרסה קיימת של App Engine
יכול להיות שתקבלו את השגיאה הבאה כשאתם פורסים לגרסה קיימת בסביבה הגמישה של App Engine:
ERROR: (gcloud.app.deploy) Error Response: [9] An internal error occurred while
processing task /app-engine-flex/flex_await_healthy/flex_await_healthy
השגיאה הזו מציינת שעדכון Deployment (פריסה) לא תקין באמצעות קובץ אימג' של Docker תקין לא תמיד מוביל ל-Deployment (פריסה) תקין. התוצאה תלויה במצב של המופעים מהפריסה הלא תקינה. למרות השגיאה, אם תספקו קובץ אימג' טוב של Docker, יכול להיות שהפריסה תהפוך בסופו של דבר לתקינה. אפשר לעדכן גרסה קיימת באמצעות קובץ אימג' חדש של Docker, אבל זה לא מומלץ. אין אפשרות לחזור לגרסה קודמת במקרה של כשל בגרסה.
שגיאה בכתובת IP פנימית במהלך פריסה בהגדרה של VPC משותף
יכול להיות שתיתקלו בשגיאה הבאה כשמבצעים פריסה להגדרה של רשת VPC משותפת בפרויקט שירות שבו נעשה שימוש בהגדרת ברירת המחדל של כתובת IP פרטית (private-ranges-only).
ERROR: (gcloud.app.deploy) Error Response: [13] An internal error occurred.
השגיאה הזו עשויה להצביע על כך שסוכן השירות של הסביבה הגמישה של App Engine בפרויקט המארח של ה-VPC המשותף לא זמין. או שסוכן השירות של סביבת App Engine הגמישה הוסר, או ש-App Engine API לא מופעל בפרויקט המארח.
כדי לפתור את הבעיה:
- מפעילים את App Engine API בפרויקט המארח של רשת ה-VPC המשותפת.
- אם App Engine API מופעל, סוכן השירות של הסביבה הגמישה של App Engine לא קיים בפרויקט. אפשר לעיין במאמר בנושא שחזור התפקיד הנדרש לסוכן השירות.
הפריסה נכשלה בגלל חוסר קישוריות ל-Google APIs
השגיאה הבאה מתרחשת כשפורסים את האפליקציה:
Your deployment has failed to become healthy in the allotted time and therefore was rolled back. If you believe this was an error, try adjusting the app_start_timeout_sec setting in the readiness_check section.
כדי לפתור את הבעיה, צריך לוודא שלרשת ה-VPC שמשויכת לאפליקציה יש נתיב סטטי מקומי עם יעד 0.0.0.0/0 וקפיצה הבאה של שער אינטרנט שמוגדר כברירת מחדל. אם אתם משתמשים בשירותים פרטיים לשימוש פנימי בלבד, אתם צריכים להפעיל PGA ברשת המשנה שנבחרה.