במאמר הזה מוסבר איך להשתמש ב-Terraform ובמשאב google_eventarc_trigger כדי ליצור טריגרים של Eventarc ליעדים הבאים של Google Cloud:
מידע נוסף על שימוש ב-Terraform זמין במאמרי העזרה בנושא Terraform ב- Google Cloud.
דוגמאות הקוד במדריך הזה מנתבות אירועים ישירים מ-Cloud Storage, אבל אפשר להתאים אותן לכל ספק אירועים. לדוגמה, כדי ללמוד איך לנתב אירועים ישירים מ-Pub/Sub ל-Cloud Run, אפשר לעיין במדריך לתחילת העבודה עם Terraform.
לפני שמתחילים
- נכנסים לחשבון 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.
מפעילים את ממשקי ה-API של Cloud Resource Manager ושל ניהול הזהויות והרשאות הגישה (IAM).
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים-
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
Terraform משולב בסביבת Cloud Shell, ואפשר להשתמש ב-Cloud Shell כדי לפרוס את משאבי Terraform בלי להתקין את Terraform.
הכנה לפריסת Terraform
לפני שפורסים משאבים של Terraform, צריך ליצור קובץ תצורה של Terraform. קובץ תצורה של Terraform מאפשר להגדיר את מצב הסיום המועדף של התשתית באמצעות התחביר של Terraform.
הכנת Cloud Shell
ב-Cloud Shell, מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Google Cloud תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
מחליפים את PROJECT_ID במזהה הפרויקט. Google Cloud
הערה: אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית). יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
שם הקובץ חייב לכלול את הסיומת .tf. לדוגמה, במסמך הזה הקובץ נקרא main.tf.
הגדרת התצורה של Terraform
מעתיקים את דוגמאות הקוד הרלוונטיות של Terraform לקובץ main.tf החדש שיצרתם. אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.
בדרך כלל, מחילים את כל ההגדרה בבת אחת. עם זאת, אפשר גם לטרגט משאב ספציפי. לדוגמה:
terraform apply -target="google_eventarc_trigger.default"
שימו לב שבקטעי הקוד לדוגמה של Terraform נעשה שימוש באינטרפולציה כדי להחליף משתנים של הפניה, מאפיינים של משאבים ופונקציות של קריאה.
הפעלת ממשקי ה-API
בדרך כלל הנחת העבודה בדוגמאות של Terraform היא שממשקי ה-API הנדרשים מופעלים בפרויקט ב-Google Cloud . כדי להפעיל את ממשקי ה-API, משתמשים בקוד הבא:
Cloud Run
GKE
Workflows
יצירה של חשבון שירות והגדרת הגישה שלו
כל טריגר של Eventarc משויך לחשבון שירות של IAM בזמן יצירת הטריגר. כדי ליצור חשבון שירות ייעודי ולהעניק לחשבון השירות בניהול המשתמש תפקידים ספציפיים בניהול זהויות והרשאות גישה לניהול אירועים, משתמשים בקוד הבא:
Cloud Run
סוכן השירות של Pub/Sub נוצר באופן אוטומטי כשמפעילים את Pub/Sub API. אם סוכן השירות של Pub/Sub נוצר ב-8 באפריל 2021 או לפני כן, ולחשבון השירות אין את התפקיד 'סוכן שירות של Cloud Pub/Sub' (roles/pubsub.serviceAgent), צריך להקצות לסוכן השירות את התפקיד 'יצירת אסימונים בחשבון שירות' (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" }
GKE
לפני שיוצרים את חשבון השירות, צריך להפעיל את Eventarc כדי לנהל אשכולות GKE:
יוצרים את חשבון השירות:
Workflows
סוכן השירות של Pub/Sub נוצר באופן אוטומטי כשמפעילים את Pub/Sub API. אם סוכן השירות של Pub/Sub נוצר ב-8 באפריל 2021 או לפני כן, ולחשבון השירות אין את התפקיד 'סוכן שירות של Cloud Pub/Sub' (roles/pubsub.serviceAgent), צריך להקצות לסוכן השירות את התפקיד 'יצירת אסימונים בחשבון שירות' (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" }
יצירת קטגוריה של Cloud Storage כספק אירועים
משתמשים בקוד הבא כדי ליצור קטגוריה של Cloud Storage ולהעניק לסוכן השירות של Cloud Storage את תפקיד ההרשאה לפרסום ב-Pub/Sub (roles/pubsub.publisher).
Cloud Run
GKE
Workflows
יצירת מקבל אירועים שיהיה יעד האירוע
יוצרים מקלט אירועים באמצעות אחד מהמשאבים הבאים של Terraform:
Cloud Run
יוצרים שירות Cloud Run כיעד לאירועים של טריגר Eventarc:
GKE
כדי לפשט את המדריך הזה, יוצרים שירות Google Kubernetes Engine כיעד לאירועים מחוץ ל-Terraform, בין הפעלת ההגדרות של Terraform.
אם עדיין לא יצרתם טריגר בפרויקט Google Cloud הזה, מריצים את הפקודה הבאה כדי ליצור את סוכן השירות של Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
יוצרים אשכול GKE:
פורסים שירות Kubernetes ב-GKE שיקבל בקשות HTTP ויתעד אירועים באמצעות תמונה מוכנה מראש של Cloud Run,
us-docker.pkg.dev/cloudrun/container/hello:קבלת פרטי אימות כדי ליצור אינטראקציה עם האשכול:
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1יוצרים פריסה בשם
hello-gke:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/helloחושפים את הפריסה כשירות Kubernetes:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080מוודאים שה-Pod פועל:
kubectl get podsהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45sאם הערך של
STATUSהואPendingאוContainerCreating, הפוד נמצא בתהליך פריסה. מחכים דקה עד שהפריסה תושלם, ואז בודקים שוב את הסטטוס.מוודאים שהשירות פועל:
kubectl get svcהפלט אמור להיראות כך:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-gke ClusterIP 34.118.230.123 <none> 80/TCP 4m46s kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 14m
Workflows
פריסת תהליך עבודה שמופעל כשאובייקט מתעדכן בקטגוריה של Cloud Storage:
הגדרת טריגר Eventarc
טריגר Eventarc מעביר אירועים מספק אירועים ליעד אירועים. אפשר להשתמש במשאב google_eventarc_trigger כדי לציין מאפיינים של CloudEvents ב-matching_criteria ולסנן את האירועים. מידע נוסף זמין בהוראות ליצירת טריגר עבור ספק, סוג אירוע ויעד ספציפיים.
אירועים שתואמים לכל המסננים נשלחים ליעד.
Cloud Run
יוצרים טריגר Eventarc שמנתב אירועים של Cloud Storage אל שירות Cloud Run hello-event.
GKE
יוצרים טריגר Eventarc שמנתב אירועים של Cloud Storage לשירות hello-gke GKE.
Workflows
יוצרים טריגר Eventarc שמנתב אירועים של Cloud Storage לתהליך העבודה בשם storage-workflow-tf.
החלת Terraform
משתמשים ב-Terraform CLI כדי להקצות תשתית על סמך קובץ ההגדרות.
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: כדי להשתמש בגרסה העדכנית ביותר של הפלאגין שמתממשק עם שירותים חיצוניים של Google, תוכלו לכלול את האפשרות
-upgrade:terraform init -upgrade
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform:terraform apply
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
אימות היצירה של משאבים
Cloud Run
בודקים שהשירות נוצר:
gcloud run services list --region us-central1בודקים שהטריגר נוצר:
gcloud eventarc triggers list --location us-central1הפלט אמור להיראות כך:
NAME: trigger-storage-cloudrun-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
GKE
בודקים שהשירות נוצר:
kubectl get service hello-gkeבודקים שהטריגר נוצר:
gcloud eventarc triggers list --location us-central1הפלט אמור להיראות כך:
NAME: trigger-storage-gke-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
Workflows
בודקים שתהליך העבודה נוצר:
gcloud workflows list --location us-central1מוודאים שהטריגר של Eventarc נוצר:
gcloud eventarc triggers list --location us-central1הפלט אמור להיראות כך:
NAME: trigger-storage-workflows-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Workflows: storage-workflow-tf ACTIVE: Yes LOCATION: us-central1
יצירה והצגה של אירוע
אתם יכולים ליצור אירוע ולוודא שהטריגר של Eventarc פועל כמצופה.
מאחזרים את השם של קטגוריה של Cloud Storage שיצרתם קודם:
gcloud storage lsמעלים קובץ טקסט לקטגוריה של Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txtמחליפים את
BUCKET_NAMEבשם הקטגוריה ב-Cloud Storage שאחזרתם בשלב הקודם. לדוגמה:gcloud storage cp random.txt gs://BUCKET_NAME/random.txtההעלאה יוצרת אירוע, ושירות מקבל האירועים רושם ביומן את ההודעה של האירוע.
אימות של קבלת אירוע:
Cloud Run
מסננים את הרשומות ביומן שנוצרו על ידי השירות:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'מחפשים רשומה ביומן שדומה לזו:
Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "trigger-cloudrun-BUCKET_NAME/random.txt", ...}
GKE
מאתרים את מזהה הפוד:
POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)הפקודה הזו משתמשת בפלט מעוצב של
kubectl.בודקים את היומנים של ה-pod:
kubectl logs $POD_NAMEמחפשים רשומה ביומן שדומה לזו:
{"severity":"INFO","eventType":"google.cloud.storage.object.v1.finalized","message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
Workflows
כדי לוודא שהפעלת זרימת עבודה מופעלת, מציגים את חמש ההפעלות האחרונות:
gcloud workflows executions list storage-workflow-tf --limit=5הפלט צריך לכלול רשימה של הפעלות עם
NAME,STATE,START_TIMEו-END_TIME.כדי לקבל את התוצאות של ההרצה האחרונה:
EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)") gcloud workflows executions describe $EXECUTION_NAMEמוודאים שהפלט דומה לזה:
... result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"' startTime: '2024-12-13T17:23:50.451316533Z' state: SUCCEEDED ...
הסרת המשאבים
כדי להסיר משאבים שהוחלו בעבר על הגדרות Terraform, מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה:
terraform destroy
כדי להימנע מחיובים, אפשר גם למחוק את Google Cloud הפרויקט. כשמוחקים פרויקט ב- Google Cloud , החיוב על כל המשאבים שנעשה בהם שימוש באותו פרויקט מופסק.
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.