העברת אירועים בין פרויקטים ב-Google Cloud

במדריך הזה נסביר איך להשתמש ב-Eventarc כדי לקרוא אירועים ממקור בפרויקט אחד Google Cloud ולהפנות אותם ליעד בפרויקט אחר Google Cloud . אפשר לעשות את זה באמצעות Pub/Sub כשכבת תעבורה בין פרויקטים.

מטרות

במדריך הזה תלמדו:

  1. ליצור נושא בפרויקט אחד, ואז לפרסם לנושא הזה מפרויקט אחר. האירועים מנותבים לשירות Cloud Run שנגיש לכולם באמצעות טריגר Eventarc.

  2. משתמשים בהתראות Pub/Sub ל-Cloud Storage כדי לפרסם אירועים של Cloud Storage מפרויקט אחד לפרויקט אחר. ניתוב האירועים לשירות Cloud Run שנגיש לציבור באמצעות טריגר Eventarc.

  3. אפשר להשתמש ביעדים של Cloud Logging כדי לפרסם יומני ביקורת של Cloud מפרויקט אחד לפרויקט אחר. ניתוב האירועים לשירות Cloud Run שנגיש לציבור באמצעות טריגר Eventarc.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

לפני שמתחילים

יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה מוגבלת. Google Cloud

שימו לב: כדי לבצע את הפעולות במדריך הזה, תצטרכו שני פרויקטים. השלבים הבאים רלוונטיים לשני הפרויקטים.

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. התקינו את ה-CLI של Google Cloud.

  5. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  6. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  7. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. התקינו את ה-CLI של Google Cloud.

  10. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  11. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  12. מעדכנים את הרכיבים של ה-CLI של gcloud:
    gcloud components update
  13. נכנסים באמצעות החשבון:
    gcloud auth login

ניתוב אירועים של Pub/Sub בין פרויקטים

מכיוון ש-Pub/Sub הוא שירות שמופץ באופן גלובלי, אפשר ליצור נושא בפרויקט אחד, לפרסם בנושא הזה מפרויקט אחר ואז להפעיל את Eventarc, שמנתב את ההודעה לשירות Cloud Run:

אירועים בין פרויקטים: Cloud Pub/Sub ו-Eventarc

  1. מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:

    gcloud config set project PROJECT_TWO_ID

    מחליפים את PROJECT_TWO_ID במזהה של הפרויקט השני ב-Google Cloud .

  2. בפרויקט השני, מבצעים את הפעולות הבאות:

    1. מפעילים את Cloud Run API ואת Eventarc API:

      gcloud services enable run.googleapis.com eventarc.googleapis.com
    2. הגדרת מיקום ברירת מחדל:

      REGION=REGION

      מחליפים את REGION במיקום נתמך של Eventarc לבחירתכם. לדוגמה: us-central1.

    3. יוצרים נושא Pub/Sub:

      TOPIC=my-topic
      gcloud pubsub topics create $TOPIC
    4. פורסים שירות של 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 של השירות, סימן שהפריסה הושלמה.

    5. מחברים את הנושא לשירות באמצעות טריגר 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.

  3. מגדירים את מזהה הפרויקט Google Cloud לפרויקט הראשון:

    gcloud config set project PROJECT_ONE_ID

    מחליפים את PROJECT_ONE_ID במזהה שלGoogle Cloud הפרויקט הראשון.

  4. בפרויקט הראשון, מפרסמים הודעה בנושא בפרויקט השני:

    gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
  5. מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:

    gcloud config set project PROJECT_TWO_ID
  6. בפרויקט השני, מוודאים שהאירוע שנוצר נרשם ביומן:

    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:

אירועים חוצי-פרויקטים: Cloud Storage ו-Eventarc

  1. מגדירים את מזהה הפרויקט Google Cloud לפרויקט הראשון:

    gcloud config set project PROJECT_ONE_ID
  2. יוצרים קטגוריה של Cloud Storage:

    PROJECT1=$(gcloud config get-value project)
    BUCKET=$PROJECT1-cross-project
    gcloud storage buckets create gs://$BUCKET --location=${REGION}
  3. יוצרים התראת Pub/Sub לקטגוריה בנושא בפרויקט השני:

    gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
  4. מעלים קובץ לקטגוריה:

    echo "Hello World" > random.txt
    gcloud storage cp random.txt gs://$BUCKET/random.txt
  5. מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:

    gcloud config set project PROJECT_TWO_ID
  6. בפרויקט השני, מוודאים שהאירוע שנוצר נרשם ביומן:

    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 בפרויקט השני:

אירועים חוצי-פרויקטים: יומני ביקורת בענן ו-Eventarc

  1. מגדירים את מזהה הפרויקט Google Cloud לפרויקט הראשון:

    gcloud config set project PROJECT_ONE_ID
  2. בפרויקט הראשון, מפעילים את סוגי היומנים Admin Read,‏ Data Read ו-Data Write עבור Compute Engine:

    שימו לב: ברמת הפרויקט, צריך את התפקיד roles/ownerבניהול הזהויות והרשאות הגישה (IAM) כדי להגדיר יומני ביקורת של גישה לנתונים עבור משאבי Google Cloud .

    1. קוראים את מדיניות ה-IAM של הפרויקט ושומרים אותה בקובץ:

      gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
      
    2. עורכים את /tmp/policy.yaml, מוסיפים או משנים רק את ההגדרה של יומני הביקורת Data Access.

      auditConfigs:
      - auditLogConfigs:
        - logType: ADMIN_READ
        - logType: DATA_READ
        - logType: DATA_WRITE
        service: compute.googleapis.com
      
    3. כותבים את מדיניות ה-IAM החדשה:

      gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
      

      אם הפקודה הקודמת מדווחת על התנגשות עם שינוי אחר, צריך לחזור על השלבים האלה, החל מקריאת מדיניות ה-IAM של הפרויקט.

  3. בפרויקט הראשון, יוצרים אובייקט מסוג 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.
  4. מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:

    gcloud config set project PROJECT_TWO_ID
  5. בפרויקט השני, מקצים את התפקיד לחשבון השירות:

    gcloud pubsub topics add-iam-policy-binding my-topic \
        --member=SERVICE_ACCOUNT \
        --role=roles/pubsub.publisher

    מחליפים את SERVICE_ACCOUNT בכתובת האימייל בחשבון השירות שהוחזרה בשלב הקודם.

  6. מגדירים את מזהה הפרויקט Google Cloud לפרויקט הראשון:

    gcloud config set project PROJECT_ONE_ID
  7. בפרויקט הראשון, יוצרים מכונה וירטואלית ב-Compute Engine.

    אם אתם משתמשים במסוף Google Cloud כדי ליצור את המכונה הווירטואלית, אתם יכולים לאשר את הגדרות ברירת המחדל לצורך המדריך הזה.

  8. מגדירים את מזהה הפרויקט Google Cloud לפרויקט השני:

    gcloud config set project PROJECT_TWO_ID
  9. בפרויקט השני, מוודאים שהאירוע שנוצר נרשם ביומן:

    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",
      }
    [...]
    }

הסרת המשאבים

אם יצרתם פרויקט חדש בשביל המדריך הזה, תמחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שנוספו במדריך הזה, תצטרכו למחוק את המשאבים שנוצרו לצורך המדריך.

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.

כדי למחוק את הפרויקט:

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

מחיקת משאבי הדרכה

  1. מוחקים את שירות Cloud Run שפרסתם במדריך הזה:

    gcloud run services delete SERVICE_NAME

    כאשר SERVICE_NAME הוא שם השירות שבחרתם.

    אפשר גם למחוק שירותים של Cloud Run מGoogle Cloud המסוף.

  2. מסירים את כל הגדרות ברירת המחדל של ה-CLI של gcloud שהוספתם במהלך ההגדרה של המדריך.

    לדוגמה:

    gcloud config unset run/region

    או

    gcloud config unset project

  3. מחיקת משאבים אחרים 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 בשם של יעד הנתונים.

המאמרים הבאים