Publier des événements directement

Vous pouvez publier un événement CloudEvents directement sur un bus Eventarc Advanced dans un format compatible à l'aide de Google Cloud CLI ou en envoyant une requête à l'API REST Eventarc Publishing. Vous pouvez également utiliser les bibliothèques clientes Eventarc pour accéder aux API Eventarc à partir d'un langage compatible.

Avant de commencer

Avant de commencer, assurez-vous d'avoir effectué les étapes suivantes :

  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. Publier directement

    Le message d'événement que vous publiez directement doit être conforme à la spécification CloudEvents.

    gcloud

    1. Ouvrez un terminal.

    2. Vous pouvez publier des événements sur un bus à l'aide de la commande gcloud eventarc message-buses publish. Exemple :

      gcloud eventarc message-buses publish BUS_NAME \
          --avro-message=AVRO_MESSAGE
      ou
      gcloud eventarc message-buses publish BUS_NAME \
          --json-message=JSON_MESSAGE
      ou
      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

      Remplacez les éléments suivants :

      • BUS_NAME : ID ou identifiant complet du bus auquel publier l'événement.

      Vous ne devez utiliser qu'un seul des éléments suivants :

      • AVRO_MESSAGE : message d'événement au format Avro, conformément à cette spécification.
      • JSON_MESSAGE : message d'événement au format JSON, conformément à cette spécification.
      • DATA_PAYLOAD : données d'un événement publié.

      Si vous utilisez l'option --event-data, vous devez également utiliser les options suivantes :

      • EVENT_ID : identifiant de l'événement. Les producteurs d'événements doivent s'assurer que source + id est unique pour chaque événement distinct.
      • EVENT_SOURCE : source d'événement d'un événement publié.
      • EVENT_TYPE : type d'événement lié à l'occurrence d'origine.

      Si vous utilisez l'indicateur --event-data, vous pouvez éventuellement utiliser les éléments suivants :

      • EVENT_ATTRIBUTE : attributs d'un événement publié. Vous pouvez répéter l'option --event-attributes pour ajouter d'autres attributs.

        Notez que les événements peuvent inclure un nombre quelconque d'attributs CloudEvents personnalisés supplémentaires avec des noms distincts (également appelés attributs d'extension).

    Exemples :

    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"}
    }'

    API REST

    Pour publier un événement dans un bus, utilisez la méthode projects.locations.messageBuses.publish.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • Nom complet de la ressource du bus au format projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

      Remplacez les éléments suivants :

      • PROJECT_ID : ID du projet de bus Google Cloud.
      • LOCATION : région dans laquelle le bus est déployé (par exemple, us-central1).
      • BUS_NAME : nom du bus auquel publier l'événement.
    • SPEC_VERSION : version de la spécification CloudEvents utilisée par l'événement (par exemple, 1.0).
    • EVENT_TYPE : type d'événement lié à l'occurrence d'origine.
    • EVENT_SOURCE : source d'événement d'un événement publié.
    • EVENT_ID : identifiant de l'événement. Les producteurs doivent s'assurer que source + id est unique pour chaque événement distinct.
    • CONTENT_TYPE (facultatif) : type de contenu de la valeur data. Si un événement au format JSON ne comporte pas d'attribut datacontenttype, les données sont considérées comme une valeur JSON conforme au type de support application/json.
    • DATA_PAYLOAD (facultatif) : charge utile de l'événement encodée au format multimédia spécifié par datacontenttype et respectant dataschema lorsque ces attributs sont présents.

    Corps JSON de la requête :

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

    Pour envoyer votre requête, développez l'une des options suivantes :

    Si l'opération réussit, le serveur renvoie un code d'état HTTP 200 OK et le corps de réponse vide au format JSON :

    200 OK
    
    {}
    

    Étapes suivantes