Ereignisse direkt veröffentlichen

Sie können ein CloudEvents-Ereignis mit der Google Cloud CLI oder durch Senden einer Anfrage an die Eventarc Publishing REST API in einem unterstützten Format direkt in einem Eventarc Advanced-Bus veröffentlichen. Sie können auch die Eventarc-Clientbibliotheken verwenden, um in einer unterstützten Sprache auf die Eventarc APIs zuzugreifen.

Hinweise

Führen Sie die folgenden Schritte aus, bevor Sie beginnen:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Create or select 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.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  7. Enable the Eventarc and Eventarc Publishing APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com
  8. Install the Google Cloud CLI.

  9. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select 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.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  13. Enable the Eventarc and Eventarc Publishing APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com
  14. Direkt veröffentlichen

    Die Ereignisnachricht, die Sie direkt veröffentlichen, muss der CloudEvents-Spezifikation entsprechen.

    gcloud

    1. Öffnen Sie ein Terminalfenster.

    2. Sie können Ereignisse mit dem Befehl gcloud eventarc message-buses publish in einem Bus veröffentlichen. Beispiel:

      gcloud eventarc message-buses publish BUS_NAME \
          --avro-message=AVRO_MESSAGE
      oder:
      gcloud eventarc message-buses publish BUS_NAME \
          --json-message=JSON_MESSAGE
      oder:
      gcloud eventarc message-buses publish BUS_NAME \
          --event-data=DATA_PAYLOAD \
          --event-id=EVENT_ID \
          --event-source=EVENT_SOURCE \
          --event-type=EVENT_TYPE \
          --event-attributes=EVENT_ATTRIBUTE

      Ersetzen Sie Folgendes:

      • BUS_NAME: die ID oder voll qualifizierte Kennzeichnung des Busses, in dem das Ereignis veröffentlicht werden soll.

      Sie dürfen nur eines der folgenden Elemente verwenden:

      • AVRO_MESSAGE: Die Ereignismeldung im Avro-Format gemäß dieser Spezifikation.
      • JSON_MESSAGE: die Ereignisnachricht im JSON-Format gemäß dieser Spezifikation.
      • DATA_PAYLOAD: die Daten eines veröffentlichten Ereignisses.

      Wenn Sie das Flag --event-data verwenden, müssen Sie auch Folgendes verwenden:

      • EVENT_ID: die Ereignis-ID. Ereignisproduzenten müssen dafür sorgen, dass source + id für jedes einzelne Ereignis eindeutig ist.
      • EVENT_SOURCE: Die Ereignisquelle eines veröffentlichten Ereignisses.
      • EVENT_TYPE: Der Ereignistyp, der sich auf das ursprüngliche Ereignis bezieht.

      Wenn Sie das Flag --event-data verwenden, können Sie optional Folgendes verwenden:

      • EVENT_ATTRIBUTE: die Attribute eines veröffentlichten Ereignisses. Sie können das Flag --event-attributes wiederholen, um weitere Attribute hinzuzufügen.

        Ereignisse können beliebig viele zusätzliche benutzerdefinierte CloudEvents-Attribute mit unterschiedlichen Namen (auch als Erweiterungsattribute bezeichnet) enthalten.

    Beispiele:

    gcloud eventarc message-buses publish my-bus \
        --event-data='{"key": "hello-world-data"}' \
        --event-id=hello-world-id-1234 \
        --event-source=hello-world-source \
        --event-type=hello-world-type \
        --event-attributes="datacontenttype=application/json"

    gcloud eventarc message-buses publish my-bus --json-message='{
        "specversion" : "1.0",
        "type" :"com.example.someevent",
        "source" : "google.cloud.storage.object.v1.finalized",
        "id" : "A234-1234-1234",
        "time" : "2024-04-05T17:31:00Z",
        "bucket" : "bucketName",
        "datacontenttype" : "application/json",
        "data":{"key": "value"}
    }'

    REST API

    Verwenden Sie zum Veröffentlichen eines Ereignisses in einem Bus die Methode projects.locations.messageBuses.publish.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • Der vollständige Ressourcenname des Busses im Format projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

      Ersetzen Sie Folgendes:

      • PROJECT_ID: die Google Cloud-Projekt-ID für das Bus-Projekt.
      • LOCATION: die Region, in der der Bus bereitgestellt wird, z. B. us-central1.
      • BUS_NAME: Der Name des Busses, an den das Ereignis gesendet werden soll.
    • SPEC_VERSION: Die Version der CloudEvents-Spezifikation, die für das Ereignis verwendet wird, z. B. 1.0.
    • EVENT_TYPE: Der Ereignistyp, der sich auf das ursprüngliche Ereignis bezieht.
    • EVENT_SOURCE: die Ereignisquelle eines veröffentlichten Ereignisses.
    • EVENT_ID: die Ereignis-ID. Feedersteller müssen dafür sorgen, dass source + id für jedes einzelne Event eindeutig ist.
    • CONTENT_TYPE (optional): Der Inhaltstyp des data-Werts. Wenn ein Ereignis im JSON-Format kein datacontenttype-Attribut hat, wird davon ausgegangen, dass die Daten ein JSON-Wert sind, der dem Medientyp application/json entspricht.
    • DATA_PAYLOAD (optional): Die Ereignisnutzlast, die in das durch datacontenttype angegebene Media-Format codiert ist und dataschema entspricht, wenn diese Attribute vorhanden sind.

    JSON-Text der Anfrage:

    {
    "jsonMessage":
      "{\"specversion\":\"SPEC_VERSION\",
      \"type\":\"EVENT_TYPE\",
      \"source\":\"EVENT_SOURCE\",
      \"id\":\"EVENT_ID\",
      \"datacontenttype\":\"CONTENT_TYPE\",
      \"data\":\"DATA_PAYLOAD\"}"
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Bei Erfolg gibt der Server den HTTP-Statuscode 200 OK und den leeren Antworttext im JSON-Format zurück:

    200 OK
    
    {}
    

    Nächste Schritte