במדריך הזה נסביר איך לפתור שגיאות בזמן ריצה שנתקלים בהן כשמשתמשים ב-Eventarc כדי לנתב אירועים מ-Cloud Storage לשירות לא מאומת של Cloud Run באמצעות יומני הביקורת של Cloud.
מטרות
במדריך הזה מוסבר איך לבצע את הפעולות הבאות:
- יוצרים מאגר רגיל של Artifact Registry כדי לאחסן את קובץ האימג' בקונטיינר.
- יוצרים קטגוריה של Cloud Storage שתשמש כמקור האירועים.
- יצירה, העלאה ופריסה של קובץ אימג' של קונטיינר ל-Cloud Run.
- יצירת טריגרים של Eventarc.
- מעלים קובץ לקטגוריה של Cloud Storage.
- לפתור בעיות ולתקן את שגיאות זמן הריצה.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה מוגבלת. 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 של Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc ו-Pub/Sub:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com -
התקינו את ה-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 של Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc ו-Pub/Sub:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com -
אם אתם יוצרי הפרויקט, מוקצה לכם תפקיד הבעלים הבסיסי (
roles/owner). כברירת מחדל, תפקיד ניהול הזהויות והרשאות הגישה (IAM) הזה כולל את ההרשאות שנדרשות לגישה מלאה לרוב המשאבים Google Cloud, ואפשר לדלג על השלב הזה.אם אתם לא יוצרי הפרויקט, צריך להעניק את ההרשאות הנדרשות בחשבון המשתמש המתאים בפרויקט. לדוגמה, חשבון משתמש יכול להיות חשבון Google (למשתמשי קצה) או חשבון שירות (לאפליקציות ולעומסי עבודה ממוחשבים). מידע נוסף זמין בדף תפקידים והרשאות של יעד האירוע.
שימו לב: כברירת מחדל, ההרשאות של Cloud Build כוללות הרשאות להעלאה ולהורדה של ארטיפקטים מ-Artifact Registry.
ההרשאות הנדרשות
כדי לקבל את ההרשאות שדרושות להשלמת המדריך הזה, צריך לבקש מהאדמין להקצות לכם בפרויקט את תפקידי ה-IAM הבאים:
- עריכה ב-Cloud Build (
roles/cloudbuild.builds.editor) - אדמין ב-Cloud Run (
roles/run.admin) - אדמין ב-Eventarc (
roles/eventarc.admin) - בעל הרשאת גישה לתצוגת יומנים (
roles/logging.viewAccessor) - אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) - אדמין בחשבון שירות (
roles/iam.serviceAccountAdmin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - אדמין Service Usage (
roles/serviceusage.serviceUsageAdmin) - אדמין באחסון (
roles/storage.admin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
- עריכה ב-Cloud Build (
- ב-Cloud Storage, מפעילים את יומני הביקורת עבור סוגי הגישה לנתונים
ADMIN_READ, DATA_WRITEו-DATA_READ.- קוראים את מדיניות ניהול הזהויות והרשאות הגישה (IAM) שמשויכת ל Google Cloud פרויקט, לתיקייה או לארגון ומאחסנים אותה בקובץ זמני:
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- פותחים את הקובץ
/tmp/policy.yamlבעורך טקסט ומוסיפים או משנים רק את ההגדרה של יומן הביקורת בקטעauditConfigs:auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_WRITE - logType: DATA_READ service: storage.googleapis.com bindings: - members: [...] etag: BwW_bHKTV5U= version: 1
- כותבים את מדיניות ה-IAM החדשה:
gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
אם הפקודה הקודמת מדווחת על התנגשות עם שינוי אחר, צריך לחזור על השלבים האלה, החל מקריאת מדיניות IAM. מידע נוסף זמין במאמר הגדרת יומני ביקורת של גישה לנתונים באמצעות ה-API.
- קוראים את מדיניות ניהול הזהויות והרשאות הגישה (IAM) שמשויכת ל Google Cloud פרויקט, לתיקייה או לארגון ומאחסנים אותה בקובץ זמני:
- מקצים את התפקיד
eventarc.eventReceiverלחשבון השירות של Compute Engine:export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')" gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role='roles/eventarc.eventReceiver'
- אם הפעלתם את חשבון השירות של Pub/Sub ב-8 באפריל 2021 או לפני כן, צריך להקצות את התפקיד
iam.serviceAccountTokenCreatorלחשבון השירות של Pub/Sub:gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com"\ --role='roles/iam.serviceAccountTokenCreator'
- מגדירים את ברירות המחדל שמשמשות במדריך הזה:
export REGION=us-central1 gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
יצירת מאגר רגיל ב-Artifact Registry
יוצרים מאגר רגיל של Artifact Registry לאחסון קובץ האימג' של הקונטיינר:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
מחליפים את REPOSITORY בשם ייחודי למאגר.
יצירת קטגוריה של Cloud Storage
יוצרים קטגוריה של Cloud Storage בכל אחד משני אזורים כמקור האירועים לשירות Cloud Run:
יוצרים קטגוריה ב-
us-east1:export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gcloud storage buckets create gs://${BUCKET1} --location=us-east1
יוצרים קטגוריה ב-
us-west1:export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gcloud storage buckets create gs://${BUCKET2} --location=us-west1
אחרי שיוצרים את מקור האירועים, פורסים את שירות מקבל האירועים ב-Cloud Run.
פריסת מקלט האירועים
פריסת שירות Cloud Run שמקבל אירועים ומתעד אותם ביומן.
מאחזרים את דוגמת הקוד על ידי שיבוט של מאגר GitHub:
המשך
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storageJava
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storageNode.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storagePython
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storageכדאי לעיין בקוד של המדריך הזה, שכולל את הרכיבים הבאים:
גורם מטפל באירועים שמקבל את האירוע הנכנס כ-CloudEvent בבקשת HTTP
POST:המשך
Java
.NET
Node.js
Python
שרת שמשתמש בגורם שמטפל באירועים:
המשך
Java
.NET
Node.js
Python
קובץ Dockerfile שמגדיר את סביבת ההפעלה של השירות. התוכן של קובץ ה-Dockerfile משתנה בהתאם לשפה:
המשך
Java
.NET
Node.js
Python
יוצרים את קובץ אימג' של קונטיינר באמצעות Cloud Build ומעלים את קובץ אימג' של קונטיינר ל-Artifact Registry:
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=troubleshoot-service gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
פורסים את קובץ האימג' של הקונטיינר ב-Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1 \ --allow-unauthenticated
אם הפריסה מצליחה, כתובת ה-URL של השירות מוצגת בשורת הפקודה.
יצירת טריגר
אחרי שפורסים שירות Cloud Run, מגדירים טריגר להאזנה לאירועים מ-Cloud Storage באמצעות יומני ביקורת.
יוצרים טריגר Eventarc להאזנה לאירועים של Cloud Storage שמנותבים באמצעות יומני הביקורת של Cloud:
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.comהפעולה הזו יוצרת טריגר בשם
troubleshoot-trigger.כדי לוודא שנוצר
troubleshoot-trigger, מריצים את הפקודה:gcloud eventarc triggers listהפלט אמור להיראות כך:
NAME: troubleshoot-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: troubleshoot-service ACTIVE: By 20:03:37 LOCATION: us-central1
יצירה והצגה של אירוע
מוודאים שהפריסה של השירות בוצעה בהצלחה ושאפשר לקבל אירועים מ-Cloud Storage.
יוצרים ומעלים קובץ ל
BUCKET1קטגוריית האחסון:echo "Hello World" > random.txt gcloud storage cp random.txt gs://${BUCKET1}/random.txtעוקבים אחרי היומנים כדי לבדוק אם השירות קיבל אירוע. כדי לראות את רשומת היומן, פועלים לפי השלבים הבאים:
מסננים את רשומות היומן ומחזירים את הפלט בפורמט JSON:
gcloud logging read "resource.labels.service_name=troubleshoot-service \ AND textPayload:random.txt" \ --format=jsonמחפשים רשומה ביומן שדומה ל:
"textPayload": "Detected change in Cloud Storage bucket: ..."
שימו לב: בהתחלה לא מוחזרת רשומה ביומן. השגיאה הזו מציינת שיש בעיה בהגדרה שצריך לבדוק.
בדיקת הבעיה
עוברים על תהליך הבדיקה כדי להבין למה השירות לא מקבל אירועים.
זמן האתחול
הטריגר נוצר באופן מיידי, אבל יכולות לחלוף עד שתי דקות עד שהטריגר יופעל ויסנן אירועים. מריצים את הפקודה הבאה כדי לוודא שהטריגר פעיל:
gcloud eventarc triggers list
הפלט מציין את הסטטוס של הטריגר. בדוגמה הבאה, הקמפיין troubleshoot-trigger יופעל עד השעה 14:16:56:
NAME TYPE DESTINATION_RUN_SERVICE ACTIVE
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service By 14:16:56
אחרי שהטריגר פעיל, מעלים שוב קובץ לדלי האחסון. האירועים נכתבים ביומני השירות של Cloud Run. אם השירות לא מקבל אירועים, יכול להיות שהבעיה קשורה לגודל האירועים.
יומני ביקורת
במדריך הזה, אירועים ב-Cloud Storage מנותבים באמצעות יומני הביקורת של Cloud ונשלחים ל-Cloud Run. מוודאים שיומני הביקורת מופעלים ב-Cloud Storage.
נכנסים לדף Audit logs במסוף Google Cloud .
- מסמנים את תיבת הסימון Google Cloud Storage.
- מוודאים שסוגי היומנים Admin Read, Data Read ו-Data Write מסומנים.
אחרי שמפעילים את יומני הביקורת של Cloud, מעלים שוב את הקובץ לקטגוריית האחסון ובודקים את היומנים. אם השירות עדיין לא מקבל אירועים, יכול להיות שהבעיה קשורה למיקום ההפעלה.
מיקום הטריגר
יכולים להיות כמה משאבים במיקומים שונים, ואתם צריכים לסנן אירועים ממקורות שנמצאים באותו אזור כמו יעד Cloud Run. מידע נוסף זמין במאמרים בנושא מיקומים שנתמכים על ידי Eventarc והסבר על מיקומי Eventarc.
במדריך הזה פרסתם את שירות Cloud Run אל us-central1. הגדרת את eventarc/location ל-us-central1, ולכן יצרת טריגר באותו מיקום.
אבל יצרתם שתי קטגוריות של Cloud Storage במיקומים us-east1 ו-us-west1. כדי לקבל אירועים מהמיקומים האלה, צריך ליצור טריגרים של Eventarc במיקומים האלה.
יוצרים טריגר Eventarc שנמצא ב-us-east1:
מאשרים את המיקום של הטריגר הקיים:
gcloud eventarc triggers describe troubleshoot-triggerמגדירים את המיקום והאזור ל-
us-east1:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1פורסים שוב את מקבל האירועים על ידי יצירה ופריסה של קובץ האימג' של הקונטיינר ב-Cloud Run.
יוצרים טריגר חדש במיקום
us-east1:gcloud eventarc triggers create troubleshoot-trigger-new \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.comבודקים שהטריגר נוצר:
gcloud eventarc triggers listיכולות לעבור עד שתי דקות עד שהטריגר יאותחל ויתחיל לנתב אירועים.
כדי לוודא שהטריגר נפרס עכשיו בצורה נכונה, יוצרים אירוע וצופים בו.
בעיות אחרות שאולי יקרו
יכול להיות שתיתקלו בבעיות אחרות כשמשתמשים ב-Eventarc.
גודל האירוע
האירועים שאתם שולחים לא יכולים לחרוג מהמגבלות על גודל האירוע.
טריגר שבעבר העביר אירועים הפסיק לפעול
מוודאים שהמקור יוצר אירועים. בודקים את יומני הביקורת של Cloud ומוודאים שהשירות שבמעקב יוצר יומנים. אם היומנים נרשמים אבל האירועים לא מועברים, פנו לתמיכה.
מוודאים שקיים נושא Pub/Sub עם אותו שם טריגר. Eventarc משתמש ב-Pub/Sub כשכבת התעבורה שלו, והוא ישתמש בנושא Pub/Sub קיים או ייצור נושא באופן אוטומטי וינהל אותו בשבילכם.
- כדי לראות רשימה של טריגרים, אפשר לעיין במאמר
gcloud eventarc triggers list. כדי להציג רשימה של נושאי Pub/Sub, מריצים את הפקודה:
gcloud pubsub topics listמוודאים ששם הנושא ב-Pub/Sub כולל את השם של הטריגר שנוצר. לדוגמה:
name: projects/PROJECT_ID/topics/eventarc-us-east1-troubleshoot-trigger-new-123
אם נושא Pub/Sub חסר, צריך ליצור מחדש את הטריגר עבור ספק ספציפי, סוג אירוע ויעד Cloud Run.
- כדי לראות רשימה של טריגרים, אפשר לעיין במאמר
מוודאים שהטריגר הוגדר לשירות.
נכנסים לדף Services במסוף Google Cloud .
לוחצים על שם השירות כדי לפתוח את הדף פרטי השירות.
לוחצים על הכרטיסייה טריגרים.
הטריגר של Eventarc שמשויך לשירות אמור להופיע ברשימה.
בודקים את תקינות הנושא והמינוי ב-Pub/Sub באמצעות סוגי המדדים של Pub/Sub.
אפשר לעקוב אחרי הודעות שלא ניתן למסור שהועברו באמצעות המדד
subscription/dead_letter_message_count. המדד הזה מציג את מספר ההודעות שלא ניתן למסור ש-Pub/Sub מעביר ממנוי.אם ההודעות לא מתפרסמות בנושא, כדאי לבדוק את יומני הביקורת של Cloud ולוודא שהשירות שבמעקב מפיק יומנים. אם היומנים נרשמים אבל האירועים לא מועברים, פנו לתמיכה.
אפשר לעקוב אחרי מינויים לקבלת עדכונים באמצעות המדד
subscription/push_request_countוקיבוץ המדד לפיresponse_codeו-subcription_id.אם מדווח על שגיאות בדחיפה, צריך לבדוק את היומנים של שירות Cloud Run. אם נקודת הקצה המקבלת מחזירה קוד סטטוס שאינו OK, המשמעות היא שהקוד של Cloud Run לא פועל כמצופה, ועליכם לפנות לתמיכה.
מידע נוסף זמין במאמר בנושא יצירת מדיניות התראות על סמך סף מדד.
הסרת המשאבים
אם יצרתם פרויקט חדש בשביל המדריך הזה, תמחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שנוספו במדריך הזה, תצטרכו למחוק את המשאבים שנוצרו לצורך המדריך.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- במסוף 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בשם הטריגר.
- מחיקת הטריגר של Eventarc: