יכולות להיות כמה סיבות לשגיאות פריסה ב-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.
שגיאות נפוצות בהטמעה
בקטע הזה מוסבר על אסטרטגיות לפתרון בעיות שגיאות בהגדרות של האפליקציה או הפרויקט.
שגיאת ערך לא חוקי כשמבצעים פריסה בהגדרת 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.
- מסירים את מדיניות שמירת הנתונים.
הבנייה נכשלת כשמריצים אפליקציית Node.js
יכול להיות שיתרחשו כשלים בבנייה כשפורסים אפליקציית Node.js.
כברירת מחדל, סביבת זמן הריצה של Node.js תבצע את הפקודה npm run build אם יזוהה סקריפט build בקובץ package.json. הדבר עלול לגרום להתנהגויות בלתי צפויות כמו בנייה ארוכה או שגיאות של חוסר זיכרון.
כדי לפתור את הבעיה, צריך לציין את NODE_ENV=development בקובץ app.yaml כדי לוודא שלביצוע יש את כל התלויות הנדרשות.
למרות השגיאה, אפשר להכריח הפקה על ידי ציון NODE_ENV: 'production' בקטע build-env-variables בקובץ app.yaml:
build_env_variables:
NODE_ENV: 'production'
מידע נוסף זמין במאמר בנושא ביצוע שלבי build בהתאמה אישית במהלך הפריסה.