קבלת אירועים באמצעות הודעות Pub/Sub (ה-CLI של gcloud)
במדריך למתחילים הזה נסביר איך להגדיר שירות Google Kubernetes Engine (GKE) כיעד לקבלת אירועים מנושא Pub/Sub באמצעות Eventarc.
במדריך למתחילים הזה תלמדו:
- להשלים משימות הכנה כמו הפעלת ממשקי API והגדרת חשבון שירות.
- יוצרים אשכול GKE.
- מאחלים יעדים ב-GKE ב-Eventarc.
- פריסת שירות GKE שמקבל אירועים.
- יוצרים טריגר Eventarc שמקשר נושא Pub/Sub לשירות GKE.
- יצירה והצגה של אירוע Pub/Sub.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
- מעדכנים את הרכיבים של Google Cloud CLI:
gcloud components update
- מפעילים את ממשקי ה-API של Eventarc, מנהל המשאבים ו-Google Kubernetes Engine:
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com
- מגדירים את משתני ההגדרה שמשמשים במדריך הזה:
PROJECT_ID=$(gcloud config get-value project) CLUSTER_NAME=events-cluster SERVICE_NAME=hello-gke LOCATION=us-central1
-
אם אתם יוצרי הפרויקט, מוקצה לכם תפקיד הבעלים הבסיסי (
roles/owner). כברירת מחדל, תפקיד ניהול הזהויות והרשאות הגישה (IAM) הזה כולל את ההרשאות שנדרשות לגישה מלאה לרוב המשאבים Google Cloud, ואפשר לדלג על השלב הזה.אם אתם לא יוצרי הפרויקט, צריך להעניק את ההרשאות הנדרשות בחשבון המשתמש המתאים בפרויקט. לדוגמה, חשבון משתמש יכול להיות חשבון Google (למשתמשי קצה) או חשבון שירות (לאפליקציות ולעומסי עבודה ממוחשבים). מידע נוסף זמין בדף תפקידים והרשאות של יעד האירוע.
ההרשאות הנדרשות
כדי לקבל את ההרשאות שדרושות לביצוע ההפעלה המהירה הזו, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- אדמין ב-Eventarc (
roles/eventarc.admin) - אדמין ב-Kubernetes Engine (
roles/container.admin) - בעל הרשאת גישה לתצוגת יומנים (
roles/logging.viewAccessor) - אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) - Pub/Sub Publisher (
roles/pubsub.publisher) - אדמין בחשבון שירות (
roles/iam.serviceAccountAdmin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - אדמין Service Usage (
roles/serviceusage.serviceUsageAdmin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
- אדמין ב-Eventarc (
חשוב לשים לב לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כי תצטרכו לצרף אותו לטריגר של Eventarc כדי לייצג את הזהות של הטריגר למטרות בדיקה. חשבון השירות הזה נוצר באופן אוטומטי אחרי שמפעילים או משתמשים בשירות Google Cloud שמשתמש ב-Compute Engine, והוא בפורמט האימייל הבא:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
מחליפים את
PROJECT_NUMBERבמספר הפרויקט ב- Google Cloud. אפשר לראות את מספר הפרויקט בדף Welcome במסוף Google Cloud או על ידי הרצת הפקודה הבאה:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
בסביבות ייצור, מומלץ מאוד ליצור חשבון שירות חדש ולהקצות לו תפקיד IAM אחד או יותר שמכילים את ההרשאות המינימליות הנדרשות, ולפעול לפי העיקרון של הרשאות מינימליות.
- מקצים לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine את התפקיד 'הרשאה לקריאת מינויים ב-Pub/Sub' (
roles/pubsub.subscriber) בפרויקט, כדי שהטריגר של Eventarc יוכל לשלוף אירועים מ-Pub/Sub.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/pubsub.subscriber
- אם הפעלתם את סוכן השירות של Cloud Pub/Sub ב-8 באפריל 2021 או לפני כן, כדי לתמוך בבקשות push מאומתות של Pub/Sub, צריך להקצות לסוכן השירות את התפקיד 'יצירת אסימונים בחשבון שירות' (
roles/iam.serviceAccountTokenCreator). אחרת, התפקיד הזה מוענק כברירת מחדל:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
יצירת אשכול GKE
אשכול GKE מורכב לפחות ממכונת מישור בקרה אחת של האשכול ומכמה מכונות worker שנקראות צמתים. צמתים הם מכונות וירטואליות (VM) של Compute Engine שמריצות את תהליכי Kubernetes שנדרשים כדי שהן יהיו חלק מהאשכול. אתם פורסים אפליקציות באשכולות, והאפליקציות פועלות בצמתים.
יוצרים אשכול Autopilot בשם events-cluster:
gcloud container clusters create-auto $CLUSTER_NAME \ --region $LOCATION
יכול להיות שיחלפו כמה דקות עד שהאשכול ייווצר. אחרי שהאשכול נוצר, הפלט אמור להיראות כך:
Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING
ייווצר אשכול GKE בשם events-cluster בפרויקט עם מזהה פרויקט Google Cloud של MY_PROJECT.
הפעלת יעדי GKE
לכל טריגר שמטרגט שירות GKE, Eventarc יוצר רכיב להעברת אירועים ששולף אירועים מ-Pub/Sub ומעביר אותם ליעד. כדי ליצור את הרכיב ולנהל משאבים באשכול GKE, צריך להעניק הרשאות לסוכן השירות של Eventarc:
הפעלת יעדי GKE ל-Eventarc:
gcloud eventarc gke-destinations init
בהנחיה לקשירת התפקידים הנדרשים, מזינים
y.התפקידים הבאים משויכים לחשבון השירות:
compute.viewercontainer.developeriam.serviceAccountAdmin
יצירת יעד של שירות GKE
פריסת שירות GKE שיקבל אירועים ויתעד אותם באמצעות תמונה מוכנה מראש, us-docker.pkg.dev/cloudrun/container/hello:
Kubernetes משתמש בקובץ YAML שנקרא
kubeconfigכדי לאחסן את פרטי האימות של האשכול עבורkubectl. מעדכנים את הקובץkubeconfigבפרטי הכניסה ובפרטי נקודת הקצה כדי להפנות אתkubectlאל אשכול GKE:gcloud container clusters get-credentials $CLUSTER_NAME \ --region $LOCATIONיוצרים פריסת Kubernetes:
kubectl create deployment $SERVICE_NAME \ --image=us-docker.pkg.dev/cloudrun/container/helloחשיפה כשירות Kubernetes:
kubectl expose deployment $SERVICE_NAME \ --type ClusterIP \ --port 80 \ --target-port 8080
יצירת טריגר Eventarc
כשמפרסמים הודעה בנושא Pub/Sub, טריגר Eventarc שולח הודעות לשירות hello-gkeGKE.
יוצרים טריגר GKE כדי להאזין להודעות Pub/Sub:
נושא חדש ב-Pub/Sub
gcloud eventarc triggers create gke-trigger-pubsub \ --location="$LOCATION" \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$LOCATION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"כך נוצר נושא Pub/Sub חדש וטריגר בשם
gke-trigger-pubsub.נושא Pub/Sub קיים
gcloud eventarc triggers create gke-trigger-pubsub \ --location="$LOCATION" \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$LOCATION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_IDמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
TOPIC_ID: המזהה של נושא ה-Pub/Sub הקיים. נוצר טריגר בשםgke-trigger-pubsubלנושא ה-Pub/Sub הקיים.
-
מוודאים שהטריגר נוצר בהצלחה. יכול להיות שיחלפו עד שתי דקות עד שהטריגר יפעל באופן מלא.
gcloud eventarc triggers listהפלט אמור להיראות כך:
NAME: gke-trigger-pubsub TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
יצירה וצפייה באירוע
אפשר ליצור אירוע שיפעיל את שירות GKE על ידי פרסום הודעה בנושא Pub/Sub. אחר כך תוכלו לראות את ההודעה ביומני ה-pod.
מאתרים ומגדירים את נושא ה-Pub/Sub כמשתנה סביבה:
TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub \ --location=us-central1 \ --format='value(transport.pubsub.topic)')
שולחים הודעה לנושא ב-Pub/Sub כדי ליצור אירוע:
gcloud pubsub topics publish $TOPIC --message="Hello World"
שירות GKE רושם את ההודעה של האירוע ביומנים.
כדי לראות את הודעת האירוע:
מאתרים את מזהה הפוד:
kubectl get pods
הפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
מעתיקים את
NAMEשל הפוד כדי להשתמש בו בשלב הבא.בודקים את היומנים של ה-pod:
kubectl logs NAME
מחליפים את
NAMEבשם הפוד שהעתקתם.מחפשים רשומה ביומן שדומה ל:
2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World"[...]}
הסרת המשאבים
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים.
אתם יכולים:
-
הפעולה הזו תמחק גם את נושא ה-Pub/Sub המשויך.
אפשר גם למחוק את הפרויקט Google Cloud כדי למנוע חיובים. כשמוחקים פרויקט ב- Google Cloud , החיוב על כל המשאבים שנעשה בהם שימוש באותו פרויקט מופסק.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
אם אתם מתכננים להיעזר במספר מדריכי לימוד או מדריכים למתחילים, מומלץ להשתמש שוב באותו פרויקט כדי לא לחרוג ממכסות הפרויקטים.
המאמרים הבאים
קבלת אירועים באמצעות יומני ביקורת של Cloud (Google Cloud CLI)