בדף הזה מוסבר איך לפתור בעיות שאתם עשויים להיתקל בהן כשאתם פורסים את ההגדרה של Cloud Endpoints. הודעות השגיאה שמוצגות לכם מכילות מידע שספציפי לפרויקט שלכם. לדוגמה, יכול להיות שתראו הודעת שגיאה שכוללת את מזהה הפרויקט. בדף הזה יוצגו ערכי placeholder כמו YOUR_PROJECT_ID.
אחרי כל שלב, מריצים שוב את הפקודה gcloud endpoints services deploy כדי לבדוק אם השגיאה נפתרה.
אי אפשר להמיר להגדרת שירות
ERROR: (gcloud.endpoints.services.deploy) INVALID_ARGUMENT:
Cannot convert to service config. http: undefined field <unknown>
on message <RequestType>
בודקים את הקובץ .proto אם יש שדות לא תואמים בין הודעות מאגר אחסון לפרוטוקולים לבין
מיפויים של המרת קודים.
לדוגמה, הקוד הבא בקובץ .proto יוצר את השגיאה הזו. אפשרות המיפוי ב-Unary מציינת שדה בשם
undefined שלא מופיע בהגדרת ההודעה Request.
rpc Unary(Request) Response {
option (google.api.http) { get : "/{undefined}" };
}
message Request {
string defined = 1;
}
אין הרשאה לקבל את הגדרות הפרויקט
ERROR: (gcloud.endpoints.services.deploy) PERMISSION_DENIED:
Not allowed to get project settings for project YOUR_PROJECT_ID
- מבצעים שוב אימות באמצעות ה-CLI של gcloud כדי לוודא שהאימות בוצע באמצעות חשבון שיש לו הרשאה לגשת לפרויקט שמוצג בהודעת השגיאה:
gcloud auth login
תיפתח כרטיסייה חדשה בדפדפן ותתבקשו לבחור חשבון.
- מוודאים שמזהה הפרויקט שמוצג בהודעת השגיאה תואם לפרויקט Google Cloud שרוצים לפרוס בו את ההגדרה של Endpoints:
gcloud projects list
- מוודאים שמזהה הפרויקט הנכון מוגדר ב-CLI של gcloud בתור הפרויקט הנוכחי:
gcloud config set project YOUR_PROJECT_ID
למתקשר אין הרשאה
ERROR: (gcloud.endpoints.services.deploy) PERMISSION_DENIED:
Caller does not have permission 'servicemanagement.services.create' on
project YOUR_PROJECT_ID
כשפורסים לראשונה את הגדרת ה-Endpoints, Service Management יוצר שירות מנוהל עבור ה-API. כדי ליצור שירות מנוהל, צריך לפחות תפקיד עורך ברמת הפרויקט. אחרי ש-Service Management יוצר את השירות המנוהל, ההרשאות המינימליות שנדרשות לפריסה מחדש של הגדרת Endpoints הן ההרשאות שמוגדרות בתפקיד עריכת הגדרות שירות (roles/servicemanagement.configEditor) בשירות. מידע נוסף מופיע במאמר בנושא הענקת גישה ל-API.
אי אפשר לאמת את הבעלות על שם הדומיין
ERROR: (gcloud.endpoints.services.deploy) PERMISSION_DENIED:
Ownership for domain name YOUR_DOMAIN_NAME on project
YOUR_PROJECT_ID cannot be verified
- אם יש לכם דומיין בהתאמה אישית (לדוגמה,
example.com) שהוגדר בשדהnameבקובץapi_config.yaml, אתם צריכים לאמת את שם הדומיין לפני שתוכלו לפרוס את הגדרת השירות. - אם אתם משתמשים בדומיין
cloud.goog, ודאו שהערך בשדהnameהוא בפורמט הבא ושמזהה הפרויקט נכון:API_NAME.endpoints.YOUR_PROJECT_ID.cloud.goog
פתרון בעיות אחרות
אם קיבלתם שגיאה שלא מופיעה כאן, או אם המידע לא עזר לפתור את הבעיה, מריצים שוב את הפקודה gcloud עם הדגל כדי להציג מידע על ניפוי באגים:
gcloud --verbosity=debug endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml