במדריך הזה נסביר איך להשתמש ב-Eventarc כדי לקרוא אירועים ממקור בפרויקט אחד Google Cloud ולהפנות אותם ליעד בפרויקט אחר Google Cloud . אפשר לעשות את זה באמצעות Pub/Sub כשכבת תעבורה בין פרויקטים.
מטרות
במדריך הזה תלמדו:
ליצור נושא בפרויקט אחד, ואז לפרסם לנושא הזה מפרויקט אחר. האירועים מנותבים לשירות Cloud Run שנגיש לכולם באמצעות טריגר Eventarc.
משתמשים בהתראות Pub/Sub ל-Cloud Storage כדי לפרסם אירועים של Cloud Storage מפרויקט אחד לפרויקט אחר. ניתוב האירועים לשירות Cloud Run שנגיש לציבור באמצעות טריגר Eventarc.
אפשר להשתמש ביעדים של Cloud Logging כדי לפרסם יומני ביקורת של Cloud מפרויקט אחד לפרויקט אחר. ניתוב האירועים לשירות Cloud Run שנגיש לציבור באמצעות טריגר Eventarc.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של 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.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
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.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init - מעדכנים את הרכיבים של ה-CLI של gcloud:
gcloud components update
- נכנסים באמצעות החשבון:
gcloud auth login
ניתוב אירועים של Pub/Sub בין פרויקטים
מכיוון ש-Pub/Sub הוא שירות שמופץ באופן גלובלי, אפשר ליצור נושא בפרויקט אחד, לפרסם בנושא הזה מפרויקט אחר ואז להפעיל את Eventarc, שמנתב את ההודעה לשירות Cloud Run:
מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:
gcloud config set project PROJECT_TWO_ID
מחליפים את
PROJECT_TWO_IDבמזהה של הפרויקט השני ב-Google Cloud .בפרויקט השני, מבצעים את הפעולות הבאות:
מפעילים את Cloud Run API ואת Eventarc API:
gcloud services enable run.googleapis.com eventarc.googleapis.com
הגדרת מיקום ברירת מחדל:
REGION=REGION
מחליפים את
REGIONבמיקום נתמך של Eventarc לבחירתכם. לדוגמה:us-central1.יוצרים נושא Pub/Sub:
TOPIC=my-topic gcloud pubsub topics create $TOPIC
פורסים שירות של Cloud Run עם גישה ציבורית באמצעות קובץ אימג' מוכן מראש,
us-docker.pkg.dev/cloudrun/container/hello:gcloud run deploy hello \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --allow-unauthenticated \ --region=$REGION
כשתראו את כתובת ה-URL של השירות, סימן שהפריסה הושלמה.
מחברים את הנושא לשירות באמצעות טריגר Eventarc:
gcloud eventarc triggers create cross-project-trigger \ --destination-run-service=hello \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_TWO_ID/topics/$TOPIC
הפעולה הזו יוצרת טריגר בשם
cross-project-trigger.
מגדירים את מזהה הפרויקט Google Cloud לפרויקט הראשון:
gcloud config set project PROJECT_ONE_ID
מחליפים את
PROJECT_ONE_IDבמזהה שלGoogle Cloud הפרויקט הראשון.בפרויקט הראשון, מפרסמים הודעה בנושא בפרויקט השני:
gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:
gcloud config set project PROJECT_TWO_ID
בפרויקט השני, מוודאים שהאירוע שנוצר נרשם ביומן:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json
מוחזרת רשומה ביומן שדומה לזו:
"message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"
העברת אירועים של Cloud Storage בין פרויקטים
איך משתמשים בהתראות Pub/Sub ל-Cloud Storage כדי לפרסם אירועים מפרויקט אחד לפרויקט אחר, ואז לנתב את האירועים לשירות Cloud Run באמצעות טריגר Eventarc:
מגדירים את מזהה הפרויקט Google Cloud לפרויקט הראשון:
gcloud config set project PROJECT_ONE_ID
יוצרים קטגוריה של Cloud Storage:
PROJECT1=$(gcloud config get-value project) BUCKET=$PROJECT1-cross-project gcloud storage buckets create gs://$BUCKET --location=${REGION}
יוצרים התראת Pub/Sub לקטגוריה בנושא בפרויקט השני:
gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
מעלים קובץ לקטגוריה:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET/random.txt
מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:
gcloud config set project PROJECT_TWO_ID
בפרויקט השני, מוודאים שהאירוע שנוצר נרשם ביומן:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json
מוחזרת רשומה ביומן שדומה לזו:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: { "kind": "storage#object", "id": "project1-cross-project/random.txt/1635327604259719", "selfLink": "https://www.googleapis.com/storage/v1/b/project1-cross-project/o/random.txt", "name": "random.txt", "bucket": "project1-cross-project", "generation": "1635327604259719", [...] }
ניתוב אירועים מיומני ביקורת ב-Cloud בין פרויקטים
בקשות לשירות שלכם יכולות להיות מופעלות כשנוצרת רשומה ביומן ביקורת שתואמת לקריטריוני הסינון של הטריגר. (מידע נוסף זמין במאמר בנושא קביעת מסנני אירועים ליומני ביקורת של Cloud). במקרה כזה, כשנוצרת מכונה וירטואלית (VM) ב-Compute Engine בפרויקט הראשון, רשומה ביומן הביקורת שתואמת לקריטריוני הסינון של הטריגר מאפשרת לכם לתעד אירוע ולהעביר אותו לשירות Cloud Run בפרויקט השני:
מגדירים את מזהה הפרויקט Google Cloud לפרויקט הראשון:
gcloud config set project PROJECT_ONE_ID
בפרויקט הראשון, מפעילים את סוגי היומנים Admin Read, Data Read ו-Data Write עבור Compute Engine:
שימו לב: ברמת הפרויקט, צריך את התפקיד
roles/ownerבניהול הזהויות והרשאות הגישה (IAM) כדי להגדיר יומני ביקורת של גישה לנתונים עבור משאבי Google Cloud .קוראים את מדיניות ה-IAM של הפרויקט ושומרים אותה בקובץ:
gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
עורכים את
/tmp/policy.yaml, מוסיפים או משנים רק את ההגדרה של יומני הביקורת Data Access.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: compute.googleapis.comכותבים את מדיניות ה-IAM החדשה:
gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
אם הפקודה הקודמת מדווחת על התנגשות עם שינוי אחר, צריך לחזור על השלבים האלה, החל מקריאת מדיניות ה-IAM של הפרויקט.
בפרויקט הראשון, יוצרים אובייקט מסוג sink ב-Cloud Logging כדי להפנות את יומני הביקורת של Cloud לנושא בפרויקט השני:
gcloud logging sinks create cross-project-sink \ pubsub.googleapis.com/projects/PROJECT_TWO_ID/topics/my-topic \ --log-filter='protoPayload.methodName="beta.compute.instances.insert"'
אמורה לחזור תזכורת דומה לזו:
Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:
gcloud config set project PROJECT_TWO_ID
בפרויקט השני, מקצים את התפקיד לחשבון השירות:
gcloud pubsub topics add-iam-policy-binding my-topic \ --member=SERVICE_ACCOUNT \ --role=roles/pubsub.publisher
מחליפים את
SERVICE_ACCOUNTבכתובת האימייל בחשבון השירות שהוחזרה בשלב הקודם.מגדירים את מזהה הפרויקט Google Cloud לפרויקט הראשון:
gcloud config set project PROJECT_ONE_ID
בפרויקט הראשון, יוצרים מכונה וירטואלית ב-Compute Engine.
אם אתם משתמשים במסוף Google Cloud כדי ליצור את המכונה הווירטואלית, אתם יכולים לאשר את הגדרות ברירת המחדל לצורך המדריך הזה.
מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:
gcloud config set project PROJECT_TWO_ID
בפרויקט השני, מוודאים שהאירוע שנוצר נרשם ביומן:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json
מוחזרת רשומה ביומן שדומה לזו:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Eventdata: { "logName": "projects/workflows-atamel/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1635330842489-5cf5321f4f454-ecc363cd-3883c08d", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "methodName": "beta.compute.instances.insert", } [...] }
הסרת המשאבים
אם יצרתם פרויקט חדש בשביל המדריך הזה, תמחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שנוספו במדריך הזה, תצטרכו למחוק את המשאבים שנוצרו לצורך המדריך.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבי הדרכה
מוחקים את שירות Cloud Run שפרסתם במדריך הזה:
gcloud run services delete SERVICE_NAME
כאשר
SERVICE_NAMEהוא שם השירות שבחרתם.אפשר גם למחוק שירותים של Cloud Run מGoogle Cloud המסוף.
מסירים את כל הגדרות ברירת המחדל של ה-CLI של gcloud שהוספתם במהלך ההגדרה של המדריך.
לדוגמה:
gcloud config unset run/regionאו
gcloud config unset projectמחיקת משאבים אחרים Google Cloud שנוצרו במדריך הזה:
מחיקת הטריגר של Eventarc:
מחליפים אתgcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAMEבשם הטריגר.מחיקת הנושא ב-Pub/Sub:
מחליפים אתgcloud pubsub topics delete TOPIC TOPIC_ID
TOPIC_IDבמזהה הנושא.מחיקת יעד ב-Cloud Logging:
מחליפים אתgcloud logging sinks delete SINK_NAME
SINK_NAMEבשם של יעד הנתונים.