בדף הזה מוסבר איך לפרוס שירות gRPC פשוט לדוגמה באמצעות Extensible Service Proxy (ESP) בקונטיינר Docker ב-Compute Engine.
בדף הזה נעשה שימוש בגרסת Python של הדוגמה bookstore-grpc. דוגמאות ל-gRPC בשפות אחרות מפורטות בקטע מה השלב הבא.
סקירה כללית של Cloud Endpoints זמינה במאמרים מידע על Endpoints וארכיטקטורת Endpoints.
מטרות
במהלך העבודה עם המדריך, תוכלו להשתמש ברשימת המשימות הכללית הבאה. כדי לשלוח בקשות ל-API, צריך לבצע את כל המשימות.
- מגדירים Google Cloud פרויקט ומורידים את התוכנה הנדרשת. לפני שמתחילים
- יוצרים מכונה וירטואלית ב-Compute Engine. ראו יצירת מכונה של Compute Engine.
- העתקה והגדרה של קבצים מהדוגמה של
bookstore-grpc. איך מגדירים נקודות קצה - פורסים את ההגדרה של Endpoints כדי ליצור שירות Endpoints. איך פורסים את ההגדרה של נקודות הקצה
- פורסים את ה-API ואת ESP במכונה וירטואלית ב-Compute Engine. מידע נוסף זמין במאמר בנושא פריסת קצה העורפי של ה-API.
- שליחת בקשה ל-API. שליחת בקשה ל-API
- כדי להימנע מחיובים בחשבון Google Cloud , מידע נוסף זמין בקטע הסרת המשאבים.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- חשוב לרשום את מזהה הפרויקט כי תצטרכו אותו בהמשך.
- מתקינים ומפעילים את Google Cloud CLI.
- מעדכנים את ה-CLI של gcloud ומתקינים את רכיבי Endpoints:
gcloud components update
-
מוודאים ש-Google Cloud CLI (
gcloud) מורשה לגשת לנתונים ולשירותים שלכם ב- Google Cloud: בכרטיסייה החדשה בדפדפן שנפתחת, בוחרים חשבון.gcloud auth login
-
מגדירים את פרויקט ברירת המחדל למזהה הפרויקט.
gcloud config set project YOUR_PROJECT_ID
מחליפים את YOUR_PROJECT_ID במזהה הפרויקט. אם יש לכם פרויקטים אחרים של Google Cloud ואתם רוצים להשתמש ב-
gcloudכדי לנהל אותם, כדאי לעיין במאמר בנושא ניהול ההגדרות האישיות של ה-CLI של gcloud. - כדי להתקין את gRPC ואת כלי gRPC, פועלים לפי השלבים שמפורטים ב מדריך למתחילים של gRPC Python.
יצירת מכונה של Compute Engine
- נכנסים לדף Create an instance במסוף Google Cloud .
- לוחצים על בחירה.
- בקטע Firewall בוחרים את האפשרויות Allow HTTP traffic ו-Allow HTTPS traffic.
- כדי ליצור את המכונה הווירטואלית (VM), לוחצים על האפשרות Create.
- מוודאים שאפשר להתחבר למופע של מכונת ה-VM.
- ברשימת המכונות הווירטואליות, לוחצים על SSH בשורה של המכונה שרוצים להתחבר אליה.
- עכשיו אפשר להשתמש בטרמינל כדי להריץ פקודות Linux במופע של Debian.
- מזינים
exitכדי להתנתק מהמכונה.
- חשוב לרשום את שם המופע, האזור וכתובת ה-IP החיצונית, כי תצטרכו אותם בהמשך.
כדי ליצור מכונה של Compute Engine:

צריך להמתין זמן קצר עד שהמופע יופעל. אחרי שהיא מוכנה, היא מופיעה ברשימה בדף VM Instances עם סמל סטטוס ירוק.
הגדרת נקודות קצה
משכפלים את מאגר הדוגמאות bookstore-grpc מ-GitHub.
כדי להגדיר נקודות קצה:
- יוצרים קובץ תיאור protobuf עצמאי מקובץ השירות
.proto:- שמירת עותק של
bookstore.protoממאגר הדוגמאות. הקובץ הזה מגדיר את ה-API של שירות חנות הספרים. - יוצרים את הספרייה הבאה:
mkdir generated_pb2 - יוצרים את קובץ התיאור,
api_descriptor.pb, באמצעות קומפיילר מאגרי אחסון לפרוטוקוליםprotoc. מריצים את הפקודה הבאה בספרייה שבה שמרתם אתbookstore.proto:python -m grpc_tools.protoc \ --include_imports \ --include_source_info \ --proto_path=. \ --descriptor_set_out=api_descriptor.pb \ --python_out=generated_pb2 \ --grpc_python_out=generated_pb2 \ bookstore.proto
בפקודה הקודמת,
--proto_pathמוגדר כספריית העבודה הנוכחית. בסביבת ה-build של gRPC, אם אתם משתמשים בספרייה אחרת לקובצי הקלט.proto, אתם צריכים לשנות את--proto_pathכדי שהקומפיילר יחפש בספרייה שבה שמרתם אתbookstore.proto.
- שמירת עותק של
- יוצרים קובץ YAML של הגדרות gRPC API:
- שומרים עותק של
קובץ
api_config.yaml. בקובץ הזה מוגדר ההגדרה של gRPC API לשירות Bookstore. - מחליפים את MY_PROJECT_ID בקובץ
api_config.yamlבמזהה הפרויקט ב- Google Cloud . לדוגמה:# # Name of the service configuration. # name: bookstore.endpoints.example-project-12345.cloud.goog
שימו לב שהערך בשדה
apis.nameבקובץ הזה זהה בדיוק לשם ה-API המלא מקובץ.proto. אחרת, הפריסה לא תפעל. שירות חנות הספרים מוגדר ב-bookstore.protoבחבילהendpoints.examples.bookstore. שם ה-API המלא שלה הואendpoints.examples.bookstore.Bookstore, בדיוק כמו שהוא מופיע בקובץapi_config.yaml.apis: - name: endpoints.examples.bookstore.Bookstore
- שומרים עותק של
קובץ
מידע נוסף מופיע במאמר הגדרת נקודות קצה.
פריסת ההגדרה של נקודות הקצה
כדי לפרוס את ההגדרה של Endpoints, משתמשים בפקודה gcloud endpoints services deploy. הפקודה הזו משתמשת בService Management כדי ליצור שירות מנוהל.
- חשוב לוודא שאתם נמצאים בספרייה שבה נמצאים הקבצים
api_descriptor.pbו-api_config.yaml. - מוודאים שפרויקט ברירת המחדל שבו כלי שורת הפקודה
gcloudמשתמש כרגע הוא הפרויקט Google Cloud שבו רוצים לפרוס את ההגדרה של Endpoints. כדי לוודא שהשירות לא נוצר בפרויקט הלא נכון, מאמתים את מזהה הפרויקט שמוחזר מהפקודה הבאה:gcloud config list project
אם צריך לשנות את פרויקט ברירת המחדל, מריצים את הפקודה הבאה:
gcloud config set project YOUR_PROJECT_ID
- פורסים את הקובץ
proto descriptorואת קובץ ההגדרות באמצעות Google Cloud CLI:gcloud endpoints services deploy api_descriptor.pb api_config.yaml
במהלך היצירה וההגדרה של השירות, Service Management מציג מידע במסוף. בסיום הפריסה, תוצג הודעה שדומה לזו:
Service Configuration [CONFIG_ID] uploaded for service [bookstore.endpoints.example-project.cloud.goog]
CONFIG_ID הוא המזהה הייחודי של הגדרת שירות Endpoints שנוצר על ידי הפריסה. לדוגמה:
Service Configuration [2017-02-13r0] uploaded for service [bookstore.endpoints.example-project.cloud.goog]
בדוגמה הקודמת,
2017-02-13r0הוא מזהה הגדרות השירות ו-bookstore.endpoints.example-project.cloud.googהוא שם השירות. מזהה הגדרות השירות מורכב מחותמת זמן ואחריה מספר הגרסה. אם תפרסו את ההגדרה של Endpoints שוב באותו יום, מספר הגרסה יוגדל במזהה הגדרת השירות.
בדיקת השירותים הנדרשים
לפחות, צריך להפעיל את שירותי Google הבאים כדי להשתמש ב-Endpoints וב-ESP:| שם | כותרת |
|---|---|
servicemanagement.googleapis.com |
Service Management API |
servicecontrol.googleapis.com |
Service Control API |
ברוב המקרים, הפקודה gcloud endpoints services deploy מפעילה את השירותים הנדרשים האלה. עם זאת, הפקודה gcloud מסתיימת בהצלחה אבל לא מפעילה את השירותים הנדרשים בנסיבות הבאות:
אם השתמשתם באפליקציה של צד שלישי כמו Terraform ולא כללתם את השירותים האלה.
הפריסה של הגדרת ה-Endpoints בוצעה בפרויקטGoogle Cloud קיים שבו השירותים האלה הושבתו באופן מפורש.
כדי לוודא שהשירותים הנדרשים מופעלים, משתמשים בפקודה הבאה:
gcloud services list
אם השירותים הנדרשים לא מופיעים ברשימה, צריך להפעיל אותם:
gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.comצריך גם להפעיל את שירות Endpoints:
gcloud services enable ENDPOINTS_SERVICE_NAME
כדי לדעת מהו ENDPOINTS_SERVICE_NAME, אפשר:
אחרי פריסת ההגדרה של Endpoints, נכנסים לדף Endpoints במסוף Cloud. רשימת האפשרויות האפשריות של ENDPOINTS_SERVICE_NAME מוצגת בעמודה שם השירות.
ב-OpenAPI, ENDPOINTS_SERVICE_NAME הוא הערך שציינתם בשדה
hostבמפרט OpenAPI. ב-gRPC, ENDPOINTS_SERVICE_NAME הוא הערך שציינתם בשדהnameבהגדרות של נקודות הקצה של gRPC.
מידע נוסף על פקודות gcloud זמין במאמר שירותי gcloud.
אם מופיעה הודעת שגיאה, אפשר להיעזר במאמר בנושא פתרון בעיות בהטמעה של הגדרות Endpoints.
מידע נוסף זמין במאמר פריסת ההגדרה של Endpoints.
פריסת ה-API backend
עד עכשיו פרסתם את הגדרת ה-API ב-Service Management, אבל עדיין לא פרסתם את הקוד שמשרת את העורף של ה-API. בקטע הזה מוסבר איך להגדיר את Docker במכונה הווירטואלית ולהריץ את קוד ה-API backend ואת ESP בקונטיינר Docker.
התקנת Docker במכונת ה-VM
כדי להתקין את Docker במופע של המכונה הווירטואלית:
- מריצים את הפקודה הבאה כדי להגדיר את האזור של הפרויקט:
gcloud config set compute/zone YOUR_INSTANCE_ZONE
מחליפים את YOUR_INSTANCE_ZONE באזור שבו המכונה פועלת.
- מתחברים למכונה באמצעות הפקודה הבאה:
gcloud compute ssh INSTANCE_NAME
מחליפים את INSTANCE_NAME בשם של מופע המכונה הווירטואלית.
- אפשר לעיין בתיעוד של Docker כדי להגדיר את מאגר Docker. חשוב לפעול לפי השלבים שמתאימים לגרסה ולארכיטקטורה של מכונת ה-VM:
- Jessie או גרסה חדשה יותר
- x86_64 / amd64
הרצת ה-API וה-ESP לדוגמה בקונטיינר Docker
כדי להריץ את שירות gRPC לדוגמה עם ESP בקונטיינר Docker כדי שהלקוחות יוכלו להשתמש בו:
- במופע של ה-VM, יוצרים רשת קונטיינרים משלכם בשם
esp_net.sudo docker network create --driver bridge esp_net
- מריצים את שרת חנות הספרים לדוגמה שמשרת את ה-API לדוגמה:
sudo docker run \ --detach \ --name=bookstore \ --net=esp_net \ gcr.io/endpointsv2/python-grpc-bookstore-server:1 - מריצים את קונטיינר ה-Docker של ESP שהוכן מראש. באפשרויות ההפעלה של ESP, מחליפים את SERVICE_NAME בשם השירות. זהו אותו השם שהגדרתם בשדה
nameבקובץapi_config.yaml. לדוגמה:bookstore.endpoints.example-project-12345.cloud.googsudo docker run \ --detach \ --name=esp \ --publish=80:9000 \ --net=esp_net \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --http2_port=9000 \ --backend=grpc://bookstore:8000האפשרות
--rollout_strategy=managedמגדירה את ESP כך שישתמש בהגדרת השירות העדכנית ביותר שנפרסה. אם תבחרו באפשרות הזו, עד 5 דקות אחרי שתפרסו הגדרת שירות חדשה, ESP יזהה את השינוי ויתחיל להשתמש בה באופן אוטומטי. אנחנו ממליצים לציין את האפשרות הזו במקום מזהה תצורה ספציפי לשימוש ב-ESP. פרטים נוספים על הארגומנטים של ESP זמינים במאמר בנושא אפשרויות הפעלה של ESP.
אם הפעלתם Transcoding, הקפידו להגדיר יציאה לתנועת HTTP1.1 או SSL.
אם מופיעה הודעת שגיאה, אפשר לעיין במאמר בנושא פתרון בעיות בנקודות קצה ב-Compute Engine.
שליחת בקשה ל-API
אם אתם שולחים את הבקשה מאותו מופע שבו קונטיינרי Docker פועלים, אתם יכולים להחליף את $SERVER_IP ב-localhost. אחרת, מחליפים את $SERVER_IP בכתובת ה-IP החיצונית של המכונה.
כדי למצוא את כתובת ה-IP החיצונית, מריצים את הפקודה:
gcloud compute instances list
כדי לשלוח בקשות ל-API לדוגמה, אפשר להשתמש בלקוח gRPC לדוגמה שנכתב ב-Python.
משכפלים את מאגר ה-Git שבו מתארח קוד הלקוח של gRPC:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
כדי לשנות את ספריית העבודה:
cd python-docs-samples/endpoints/bookstore-grpc/
יחסי תלות של התקנות:
pip install virtualenvvirtualenv envsource env/bin/activatepython -m pip install -r requirements.txtשליחת בקשה ל-API לדוגמה:
python bookstore_client.py --host SERVER_IP --port 80
מעיינים בתרשימי הפעילות של ה-API בדף Endpoints > Services.
יכול להיות שיעברו כמה רגעים עד שהבקשה תשתקף בתרשימים.
מעיינים ביומני הבקשות של ה-API בדף Logs Explorer.
אם לא מקבלים תגובה, אפשר להיעזר במאמר בנושא פתרון בעיות שקשורות לתגובות.
הרגע פרסתם ובדקתם API ב-Endpoints!
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
- מחיקת ה-API:
gcloud endpoints services delete SERVICE_NAME
מחליפים את
SERVICE_NAMEבשם השירות. - נכנסים לדף VM instances במסוף Google Cloud .
- מסמנים את התיבה שלצד המופע שרוצים למחוק.
- כדי למחוק את המכונה, לוחצים על More actions ואז על Delete ופועלים לפי ההוראות.