קבלת אירועים באמצעות הודעות Pub/Sub (Terraform)
במדריך למתחילים הזה נסביר איך להשתמש ב-Terraform כדי ליצור טריגר Eventarc שמקבל אירועים ישירים מ-Pub/Sub ומנתב את האירועים לשירות Cloud Run. מידע נוסף על שימוש ב-Terraform ליצירת טריגרים של Eventarc זמין במאמר יצירת טריגר באמצעות Terraform.
במדריך למתחילים הזה תלמדו:
מתכוננים לפריסת Terraform.
מגדירים תצורת Terraform שמבצעת את הפעולות הבאות:
- מפעילים ממשקי API.
- יוצרים חשבון שירות.
- יוצרים נושא Pub/Sub כספק אירועים.
- פריסת שירות ב-Cloud Run כיעד לאירועים.
- יוצרים טריגר Eventarc.
מחילים את ההגדרות של Terraform.
כך אפשר ליצור אירוע על ידי פרסום הודעה בנושא ב-Pub/Sub. הטריגר של Eventarc מעביר את ההודעה לשירות לקבלת אירועים שנפרס ב-Cloud Run, והשירות רושם ביומן את הודעת האירוע. כך מקבלים דוגמה פשוטה לארכיטקטורה מבוססת-אירועים.
לפני שמתחילים
יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה מוגבלת. Google Cloud
- נכנסים לחשבון 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 .
מפעילים את ממשקי ה-API של Cloud Resource Manager ושל ניהול הזהויות והרשאות הגישה (IAM):
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
אם אתם משתמשים במעטפת מקומית, אתם צריכים ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
התקינו את ה-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 .
מפעילים את ממשקי ה-API של Cloud Resource Manager ושל ניהול הזהויות והרשאות הגישה (IAM):
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
אם אתם משתמשים במעטפת מקומית, אתם צריכים ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
- אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את המדריך הזה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.
ההרשאות הנדרשות
כדי לקבל את ההרשאות שדרושות לביצוע ההפעלה המהירה הזו, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- אדמין ב-Cloud Run (
roles/run.admin) - אדמין ב-Eventarc (
roles/eventarc.admin) - בעל הרשאת גישה לתצוגת יומנים (
roles/logging.viewAccessor) - אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) - Pub/Sub Publisher (
roles/pubsub.publisher) - אדמין בחשבון שירות (
roles/iam.serviceAccountAdmin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
- אדמין ב-Cloud Run (
הכנה לפריסת Terraform
לפני שפורסים משאבים של Terraform, צריך ליצור קובץ תצורה של Terraform. קובץ תצורה של Terraform מאפשר להגדיר את מצב הסיום המועדף של התשתית באמצעות התחביר של Terraform.
אם משתמשים במעטפת מקומית, צריך להתקין את Terraform.
Terraform כבר משולב בסביבת Cloud Shell, ואפשר להשתמש ב-Cloud Shell כדי לפרוס את משאבי Terraform בלי להתקין את Terraform.
ב-Cloud Shell או במעטפת המקומית, מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Google Cloud צריך להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ואפשר להריץ אותה בכל ספרייה:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
מחליפים את
PROJECT_IDבמזהה הפרויקט. Google Cloudשימו לב: אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית). יוצרים ספרייה ובה יוצרים קובץ חדש:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
מחליפים את
DIRECTORYבשם של ספריית Terraform.שם הקובץ חייב לכלול את הסיומת
.tf. לדוגמה, במדריך למתחילים הזה, קובץ התצורה הואmain.tf.
הגדרת התצורה של Terraform
מעתיקים את קטעי הקוד הבאים של Terraform לקובץ main.tf. לחלופין, כדי להעתיק את כל דוגמת הקוד מ-GitHub, בפינה השמאלית העליונה של קטע הקוד, לוחצים על >
View on GitHub (הצגה ב-GitHub).
הפעלת ממשקי ה-API
כדי להפעיל את ממשקי ה-API שנדרשים להחלת ההגדרות של Terraform, משתמשים במשאב google_project_service של Terraform:
יצירה של חשבון שירות
כל טריגר של Eventarc משויך לחשבון שירות של IAM. כדי ליצור חשבון שירות ייעודי למטרות בדיקה, משתמשים במשאב Terraform google_service_account:
אם הפעלתם את סוכן השירות של Pub/Sub ב-8 באפריל 2021 או לפני כן, צריך להקצות לסוכן השירות את התפקיד יצירת אסימונים בחשבון שירות (roles/iam.serviceAccountTokenCreator).
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
יצירת נושא Pub/Sub כספק אירועים
כדי ליצור נושא Pub/Sub, משתמשים במשאב Terraform google_pubsub_topic. כדי להעניק לחשבון השירות את התפקיד פרסום הודעות ב-Pub/Sub (roles/pubsub.publisher) ברמת הנושא, משתמשים במשאב Terraform google_pubsub_topic_iam_member:
פריסת מקלט אירועים ב-Cloud Run
כדי ליצור שירות Cloud Run כיעד לאירועים, משתמשים במשאב Terraform google_cloud_run_v2_service. כדי להעניק לחשבון השירות את התפקיד Cloud Run Invoker (roles/run.invoker) ברמת השירות, משתמשים במשאב Terraform google_cloud_run_v2_service_iam_member:
יצירת טריגר Eventarc
כדי ליצור טריגר Eventarc להאזנה להודעות Pub/Sub, משתמשים במשאב Terraform google_eventarc_trigger:
החלת ההגדרות של Terraform
משתמשים ב-Terraform CLI כדי להקצות תשתית על סמך קובץ ההגדרות. מידע נוסף מופיע במאמר בנושא פקודות בסיסיות ב-Terraform.
מפעילים את Terraform. צריך לעשות את זה רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: כדי להשתמש בגרסה העדכנית ביותר של הפלאגין שמתממשק עם שירותים חיצוניים של Google, תוכלו לכלול את האפשרות
-upgrade:terraform init -upgrade
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform:terraform apply
בדרך כלל, מחילים את כל ההגדרה בבת אחת. אבל אפשר גם לטרגט משאב ספציפי. לדוגמה:
terraform apply -target="google_eventarc_trigger.default"
אחרי שמפעילים את ממשקי ה-API, יכול להיות שיחלפו כמה דקות עד שהפעולה תתבצע, ורק אז אפשר יהיה לפרוס משאבים נוספים. אם נתקלים בבעיה, מנסים להחיל שוב את ההגדרה של Terraform.
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
אימות היצירה של משאבים
מוודאים ששירות Cloud Run נוצר:
gcloud run services list --region us-central1הפלט אמור להיראות כך:
SERVICE: hello-events REGION: us-central1 URL: https://hello-events-13335919645.us-central1.run.app LAST DEPLOYED BY: ... LAST DEPLOYED AT: 2024-12-16T15:00:52.606160Zמוודאים שהטריגר של Eventarc נוצר:
gcloud eventarc triggers list --location us-central1הפלט אמור להיראות כך:
NAME: trigger-pubsub-cloudrun-tf TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
יצירה והצגה של אירוע בנושא Pub/Sub
אפשר ליצור אירוע על ידי פרסום הודעה בנושא Pub/Sub. הטריגר של Eventarc מנתב את ההודעה לשירות לקבלת אירועים שנפרס ב-Cloud Run, והשירות מתעד את הודעת האירוע ביומן.
מאתרים ומגדירים את נושא ה-Pub/Sub כמשתנה סביבה:
gcloud config set eventarc/location us-central1 export RUN_TOPIC=$(gcloud eventarc triggers describe trigger-pubsub-cloudrun-tf \ --format='value(transport.pubsub.topic)')כדי ליצור אירוע, מפרסמים הודעה בנושא Pub/Sub:
gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"האירוע מנותב לשירות Cloud Run, שרושם ביומן את הודעת האירוע.
מסננים את רשומות היומן שנוצרו על ידי השירות:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
מחפשים רשומה ביומן שדומה לזו:
jsonPayload: ... message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World!'
השתמשתם בהצלחה ב-Terraform כדי לפרוס שירות לקבלת אירועים ב-Cloud Run וליצור טריגר של Eventarc. אחרי יצירת אירוע מ-Pub/Sub, אפשר לראות אותו ביומנים של Cloud Run.
הסרת המשאבים
כשמסיימים את המשימות שמתוארות במדריך למתחילים הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים.
כדי להסיר משאבים שהוחלו בעבר על הגדרות Terraform, מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה:
terraform destroy
אפשר גם למחוק את הפרויקט Google Cloud כדי למנוע חיובים. כשמוחקים פרויקט ב- Google Cloud , החיוב על כל המשאבים שנעשה בהם שימוש באותו פרויקט מופסק.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
אם אתם מתכננים להיעזר במספר מדריכי לימוד או מדריכים למתחילים, מומלץ להשתמש שוב באותו פרויקט כדי לא לחרוג ממכסות הפרויקטים.