בדף הזה מוסבר איך לפרוס את קוד ה-Backend של ה-API ואת Extensible Service Proxy (ESP) ב-Google Kubernetes Engine, ב-Compute Engine ובסביבה הגמישה של App Engine.
למרות ששלבי הפריסה משתנים בהתאם לפלטפורמה שמארחת את ה-API, תמיד יש שלב שבו מציינים ל-ESP את שם השירות ואפשרות להגדיר את ESP לשימוש בהגדרת השירות העדכנית של Cloud Endpoints שנפרסה. בעזרת המידע הזה, ESP יכול לקבל את הגדרות נקודות הקצה של ה-API, וכך לאפשר ל-ESP לשמש כפרוקסי לבקשות ולתשובות כדי ש-Endpoints יוכל לנהל את ה-API.
דרישות מוקדמות
כנקודת התחלה, בדף הזה מניחים שיש לכם:
הכנות לפריסה
סביבה גמישה של App Engine
הפריסה של ה-API כך שהוא ינוהל על ידי Endpoints זהה לפריסה של כל אפליקציה בסביבה הגמישה של App Engine, וכוללת שלב קטן של הגדרה (כפי שמתואר בשלבים הבאים). פועלים לפי התיעוד של App Engine כדי:
- ארגון קובצי התצורה.
-
יוצרים את קובץ התצורה
app.yaml - אם האפליקציה שלכם מבוססת על מיקרו-שירותים, תוכלו לעיין במסמכי התיעוד בנושא פריסת כמה אפליקציות שירות כדי לקבל מידע על הגדרת קובצי
app.yamlלכל שירות.
פורסים את ה-API ב-App Engine באמצעות הפקודה gcloud app deploy. הפקודה הזו יוצרת אוטומטית קובץ אימג' של קונטיינר באמצעות שירות Container Builder, ואז פורסת את קובץ האימג' הזה בסביבה הגמישה של App Engine.
לפני שמבצעים פריסה:
- הבעלים של פרויקט Google Cloud צריך ליצור את אפליקציית App Engine.
- מוודאים שלחשבון המשתמש יש את ההרשאות הנדרשות.
Compute Engine
כדי ש-Endpoints ינהל את ה-API, צריך להתקין ולהגדיר את ESP, וגם את קוד השרת של הבק-אנד עבור ה-API. צריך להתקין את Docker במכונת ה-VM של Compute Engine כדי להריץ את קובץ האימג' של Docker של ESP שזמין בחינם ב-Artifact Registry.
לפני שמבצעים פריסה:
בהמשך מפורטים השלבים שצריך לבצע לפני שמפעילים את ה-API ואת ESP ב-Compute Engine. באופן כללי, מבצעים את כל השלבים שנדרשים בדרך כלל כדי להריץ את קוד השרת לקצה העורפי ב-Compute Engine.
- יוצרים, מגדירים ומפעילים את המכונה הווירטואלית. ראה את התיעוד של Compute Engine.
- מתקינים את Docker Enterprise Edition (EE) או את Docker Community Edition (CE) במופע של מכונה וירטואלית. אפשר לעיין במאמר בנושא התקנת Docker.
- יוצרים קונטיינר Docker לקוד של שרת הקצה העורפי. לעיון במאמרי העזרה של Cloud Build
- מעבירים את הקונטיינר אל Artifact Registry או אל מאגר אחר.
- מוודאים שאפשר לבצע את הפעולות הבאות:
- מתחברים למופע ה-VM.
- מריצים את קובץ האימג' של Docker כדי להפעיל את שרת הקצה העורפי במכונת ה-VM. מידע נוסף על הפקודה Docker run
- שליחת בקשות ל-API.
GKE
כשיוצרים אשכול במסוף Google Cloud , כברירת מחדל, היקפי הגישה של OAuth שמוענקים לחשבון השירות של האשכול כוללים את היקפי הגישה שנדרשים ל-Endpoints:
- Service Control: Enabled
- Service Management: קריאה בלבד
כשיוצרים אשכול באמצעות הפקודה
gcloud container clusters create או באמצעות קובץ הגדרה של צד שלישי, צריך לוודא שמציינים את ההיקפים הבאים:
"https://www.googleapis.com/auth/servicecontrol""https://www.googleapis.com/auth/service.management.readonly"
מידע נוסף זמין במאמר מהן הרשאות גישה?
לפני שמבצעים פריסה:
על ידי הוספת קטע קטן לקובץ מניפסט הפריסה, אפשר להפעיל את קובץ האימג' של ESP Docker באשכולות של קונטיינרים יחד עם האפליקציה בקונטיינר. בשלבים הבאים מפורט התהליך הכללי שצריך לבצע לפני שפורסים את ה-API באמצעות ESP ב-GKE. באופן כללי, מבצעים את כל השלבים שנדרשים בדרך כלל כדי להפעיל את קוד השרת העורפי ב-GKE.
- פורסים את האפליקציה בקונטיינר לאשכולות של קונטיינרים. השלבים הכלליים שמתוארים במסמכי GKE הם:
- אורזים את האפליקציה בקובץ אימג' של Docker.
- מעלים את התמונה למאגר.
- יוצרים אשכול של קונטיינרים.
- פורסים את האפליקציה באשכול.
- חשיפת האפליקציה לאינטרנט.
- מוודאים שאפשר לבצע את הפעולות הבאות:
- מפעילים את השרת של ה-API.
- שליחת בקשות ל-API.
פריסת ה-API וה-ESP
סביבה גמישה של App Engine
כדי לפרוס את ה-API ואת ESP ב-App Engine:
- מקבלים את
שם השירות של ה-API. זה השם שציינתם בשדה
hostבמסמך OpenAPI. - עורכים את הקובץ
app.yamlומוסיפים קטע בשםendpoints_api_serviceעם שם השירות. אפשר להשתמש בקובץapp.yamlמ המדריך כדוגמה:Java Python Go PHP Ruby NodeJS מחליפים את
ENDPOINTS-SERVICE-NAMEבשם השירות של ה-API.מוסיפים את משתני הסביבה וזמן הריצה בקובץ התצורה
app.yaml.לדוגמה:
runtime: nodejs env: flex endpoints_api_service: name: example-project-12345.appspot.com rollout_strategy: managed
האפשרות
rollout_strategy: managedמגדירה את ESP כך שישתמש בהגדרת השירות העדכנית ביותר שפריסתה הושלמה. אם תבחרו באפשרות הזו, עד 5 דקות אחרי שתפרסו הגדרת שירות חדשה, ESP יזהה את השינוי ויתחיל להשתמש בה באופן אוטומטי. אנחנו ממליצים לציין את האפשרות הזו במקום מזהה תצורה ספציפי לשימוש ב-ESP.אם האפליקציה שלכם מבוססת על מיקרו-שירותים, אתם צריכים לכלול את הקטע
endpoints_api_serviceבכל קובץapp.yaml. - שומרים את קובץ ה-
app.yaml(או הקבצים). - פורסים את הקוד של הקצה העורפי ואת ESP ב-App Engine:
gcloud app deploy
הפקודה gcloud app deploy פורסת ומגדירה את ESP בקונטיינר נפרד מסביבת App Engine הגמישה, כי הוספתם את הקטע endpoints_api_service לקובץ app.yaml. כל תעבורת הבקשות מנותבת דרך ESP, והוא מעביר בקשות ותשובות אל הקונטיינר שמריץ את קוד שרת הקצה העורפי וממנו.
אם אתם צריכים להגדיר את ESP כך שישתמש במזהה הגדרה ספציפי:
- בקטע
endpoints_api_serviceבקובץapp.yaml, מוסיפים את השדהconfig_idומגדירים אותו למזהה הגדרה ספציפי. - מסירים את
rollout_strategy: managedאו מגדירים אתrollout_strategyלערךfixed. האפשרותfixedמגדירה את ESP כך שישתמש בהגדרת השירות שציינתם ב-config_id. - פורסים מחדש את ה-API ואת ESP:
gcloud app deploy
מומלץ לא להגדיר את ESP לשימוש במזהה הגדרה ספציפי למשך זמן רב מדי, כי אם תפעילו הגדרה מעודכנת של השירות, תצטרכו להפעיל מחדש את ESP כדי להשתמש בהגדרה החדשה.
כדי להסיר את מזהה ההגדרה הספציפי:
- מסירים את האפשרות
config_idמהקובץapp.yaml. - מוסיפים את האפשרות
rollout_strategy: managed. - מריצים את הפקודה
gcloud app deploy
כשמשתמשים באפשרות rollout_strategy: managed, לא כוללים את config_id: YOUR_SERVICE_CONFIG_ID בקובץ app.yaml. אם כן, gcloud app deploy ייכשל עם השגיאה הבאה:
config_id is forbidden when rollout_strategy is set to "managed".
כשפורסים את ה-API בסביבה הגמישה של App Engine בפעם הראשונה, יכול להיות שיהיה עיכוב בזמן שמגדירים את המכונה הווירטואלית (VM) ואת התשתית האחרת. מידע נוסף זמין במאמר בנושא הבטחת פריסה מוצלחת במסמכי התיעוד של App Engine.
Compute Engine
כדי לפרוס את ה-API באמצעות ESP ב-Compute Engine עם Docker:
- מתחברים למופע של מכונת ה-VM. מחליפים את
INSTANCE_NAMEבשם של מופע המכונה הווירטואלית.gcloud compute ssh INSTANCE_NAME
- יוצרים רשת מאגרי מידע משלכם בשם
esp_net:sudo docker network create --driver bridge esp_net
- מריצים מופע של קובץ האימג' של קוד השרת העורפי ומקשרים אותו לרשת הקונטיינרים
esp_net:sudo docker run \ --detach \ --name=YOUR_API_CONTAINER_NAME \ --net=esp_net \ gcr.io/YOUR_PROJECT_ID/YOUR_IMAGE:1.0- מחליפים את
YOUR_API_CONTAINER_NAMEבשם הקונטיינר. - מחליפים את
YOUR_PROJECT_IDבמזהה הפרויקט שבו השתמשתם כשדחפתם את התמונה. Google Cloud - מחליפים את
YOUR_IMAGEבשם של קובץ האימג'.
- מחליפים את
- מקבלים את שם השירות של ה-API. זה השם שציינתם בשדה
hostבמסמך OpenAPI. - מריצים מופע של קובץ האימג' של ESP Docker:
sudo docker run \ --name=esp \ --detach \ --publish=80:8080 \ --net=esp_net \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=YOUR_API_CONTAINER_NAME:8080- מחליפים את
SERVICE_NAMEבשם השירות. - מחליפים את
YOUR_API_CONTAINER_NAMEבשם הקונטיינר של ה-API.
האפשרות
--rollout_strategy=managedמגדירה את ESP כך שישתמש בהגדרת השירות העדכנית ביותר שפריסתה הושלמה. אם תבחרו באפשרות הזו, עד 5 דקות אחרי שתפרסו הגדרת שירות חדשה, ESP יזהה את השינוי ויתחיל להשתמש בה באופן אוטומטי. אנחנו ממליצים לציין את האפשרות הזו במקום מזהה תצורה ספציפי לשימוש ב-ESP. - מחליפים את
אם אתם צריכים להגדיר את ESP כך שישתמש במזהה הגדרה ספציפי:
- כוללים את האפשרות
--versionומגדירים אותה למזהה הגדרה ספציפי. - מסירים את האפשרות
--rollout_strategy=managedאו מגדירים את--rollout_strategyלערךfixed. האפשרותfixedמגדירה את ESP כך שישתמש בהגדרת השירות שציינתם ב---version. - מריצים שוב את הפקודה
docker run.
אם מציינים גם את --rollout_strategy=managed וגם את האפשרות --version, ה-ESP מתחיל עם ההגדרה שצוינה ב---version, אבל אחר כך פועל במצב מנוהל ומקבל את ההגדרה העדכנית.
מומלץ לא להגדיר את ESP לשימוש במזהה הגדרה ספציפי למשך זמן רב מדי, כי אם תפעילו הגדרה מעודכנת של השירות, תצטרכו להפעיל מחדש את ESP כדי להשתמש בהגדרה החדשה.
כדי להסיר את מזהה ההגדרה הספציפי:
- בדגלים של ESP עבור
docker run, מסירים את האפשרות--version. - מוסיפים את האפשרות
--rollout_strategy=managed. - מריצים את הפקודה
docker runכדי להפעיל מחדש את ה-ESP.
רשימת האפשרויות המלאה שאפשר לציין כשמפעילים את ESP מופיעה במאמר אפשרויות להפעלה של ESP.
GKE
כדי לפרוס את ESP ב-GKE:
- מקבלים את שם השירות של ה-API (השם שציינתם בשדה
hostבמסמך OpenAPI). - פותחים את קובץ המניפסט של הפריסה (שנקרא קובץ
deployment.yaml) ומוסיפים את השורות הבאות לקטע containers:containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "--http_port=8081", "--backend=127.0.0.1:8080", "--service=SERVICE_NAME", "--rollout_strategy=managed" ]מחליפים את
SERVICE_NAMEבשם השירות של ה-API.האפשרות
--rollout_strategy=managed"מגדירה את ESP כך שישתמש בהגדרת השירות העדכנית ביותר שנפרסה. אם תבחרו באפשרות הזו, עד 5 דקות אחרי שתפרסו הגדרת שירות חדשה, ESP יזהה את השינוי ויתחיל להשתמש בה באופן אוטומטי. אנחנו ממליצים לציין את האפשרות הזו במקום מזהה תצורה ספציפי לשימוש ב-ESP. - מפעילים את שירות Kubernetes באמצעות הפקודה kubectl create:
kubectl create -f deployment.yaml
אם אתם צריכים להגדיר את ESP כך שישתמש במזהה הגדרה ספציפי:
- בקובץ המניפסט של הפריסה, מוסיפים את האפשרות
--versionומגדירים אותה למזהה הגדרה ספציפי. - מסירים את
--rollout_strategy=managedאו מגדירים את--rollout_strategyלערךfixed. האפשרותfixedמגדירה את ESP כך שישתמש בהגדרת השירות שציינתם ב---version. - מפעילים את שירות Kubernetes:
kubectl create -f deployment.yaml
אם מציינים גם את --rollout_strategy=managed וגם את האפשרות --version, ה-ESP מתחיל עם ההגדרה שציינתם ב---rollout_strategy=managed, אבל אחר כך הוא פועל במצב מנוהל ומקבל את ההגדרה העדכנית ביותר.--version
מומלץ לא להגדיר את ESP כך שישתמש במזהה הגדרה ספציפי למשך זמן רב מדי, כי אם תפעילו הגדרת שירות מעודכנת, תצטרכו להפעיל מחדש את ESP כדי להשתמש בהגדרה החדשה.
כדי להסיר את מזהה ההגדרה הספציפי:
- מסירים את האפשרות
--versionמקובץ המניפסט של הפריסה. - להוסיף את ה
--rollout_strategy=managed. - מפעילים את שירות Kubernetes:
kubectl create -f deployment.yaml
רשימת האפשרויות המלאה שאפשר לציין כשמפעילים את ESP מופיעה במאמר אפשרויות להפעלה של ESP.
מעקב אחר פעילות ב-API
אחרי שפורסים את ESP ואת קצה העורפי של ה-API, אפשר להשתמש בכלים כמו curl או Postman כדי לשלוח בקשות ל-API. אם לא מקבלים תגובה תקינה, אפשר להיעזר במאמר פתרון בעיות שקשורות לתגובות.
אחרי ששולחים כמה בקשות, אפשר:
אפשר לראות את הגרפים של הפעילות ב-API בדף Endpoints > Services.
יכול להיות שיחלפו כמה רגעים עד שהבקשה תשתקף בתרשימים.מעיינים ביומני הבקשות של ה-API בדף Cloud Logging.
המאמרים הבאים
- פתרון בעיות בפריסה של הסביבה הגמישה של App Engine.
- פתרון בעיות בנקודות קצה ב-Compute Engine
- פתרון בעיות בנקודות קצה ב-Google Kubernetes Engine