Publica eventos directamente

Puedes publicar un evento de CloudEvents directamente en un bus de Eventarc Advanced en un formato compatible con Google Cloud CLI o enviando una solicitud a la API de REST de Eventarc Publishing. También puedes usar las bibliotecas cliente de Eventarc para acceder a las APIs de Eventarc desde un lenguaje compatible.

Antes de comenzar

Antes de comenzar, asegúrate de haber completado los siguientes pasos:

  1. Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.

  3. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. Crea o selecciona un Google Cloud proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Seleccionar un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crear un proyecto: Para crear un proyecto, necesitas el rol de creador de proyectos (roles/resourcemanager.projectCreator), que contiene el resourcemanager.projects.create permiso. Obtén más información para otorgar roles.
    • Crea un Google Cloud proyecto de la siguiente manera:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el Google Cloud proyecto de que estás creando.

    • Selecciona el Google Cloud proyecto de que creaste de la siguiente manera:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu Google Cloud proyecto de.

  6. Verifica que la facturación esté habilitada para tu Google Cloud proyecto.

  7. Habilita las APIs de Eventarc y Eventarc Publishing:

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

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

  9. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  10. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  11. Crea o selecciona un Google Cloud proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Seleccionar un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crear un proyecto: Para crear un proyecto, necesitas el rol de creador de proyectos (roles/resourcemanager.projectCreator), que contiene el resourcemanager.projects.create permiso. Obtén más información para otorgar roles.
    • Crea un Google Cloud proyecto de la siguiente manera:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el Google Cloud proyecto de que estás creando.

    • Selecciona el Google Cloud proyecto de que creaste de la siguiente manera:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu Google Cloud proyecto de.

  12. Verifica que la facturación esté habilitada para tu Google Cloud proyecto.

  13. Habilita las APIs de Eventarc y Eventarc Publishing:

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com

Publica directamente

El mensaje de evento que publicas directamente debe cumplir con la especificación de CloudEvents.

gcloud

  1. Abre una terminal.

  2. Puedes publicar eventos en un bus con el gcloud eventarc message-buses publish comando. Por ejemplo:

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

    Reemplaza lo siguiente:

    • BUS_NAME: Es el ID o el identificador completamente calificado del bus en el que se publicará el evento.

    Debes usar solo uno de los siguientes:

    • AVRO_MESSAGE: Es el mensaje de evento en formato Avro según esta especificación.
    • JSON_MESSAGE: Es el mensaje de evento en formato JSON según esta especificación.
    • DATA_PAYLOAD: Son los datos de un evento publicado.

    Si usas la marca --event-data, también debes usar lo siguiente:

    • EVENT_ID: Es el identificador del evento. Los productores de eventos deben asegurarse de que source + id sea único para cada evento distinto.
    • EVENT_SOURCE: Es la fuente de eventos de un evento publicado.
    • EVENT_TYPE: Es el tipo de evento relacionado con la ocurrencia de origen.

    Si usas la marca --event-data, puedes usar de forma opcional lo siguiente:

    • EVENT_ATTRIBUTE: Son los atributos de un evento publicado. Puedes repetir la marca --event-attributes para agregar más atributos.

      Ten en cuenta que los eventos pueden incluir cualquier cantidad de atributos adicionales de CloudEvents personalizados con nombres distintos (también conocidos como atributos de extensión).

Ejemplos:

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 de REST

Para publicar un evento en un bus, usa el projects.locations.messageBuses.publish método.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • El nombre completo del recurso del bus en el formato projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el Google Cloud ID del proyecto del bus.
    • LOCATION: Es la región en la que se implementa el bus, por ejemplo, us-central1.
    • BUS_NAME: Es el nombre del bus en el que se publicará el evento.
  • SPEC_VERSION: Es la versión de la especificación de CloudEvents que usa el evento, por ejemplo, 1.0.
  • EVENT_TYPE: Es el tipo de evento relacionado con la ocurrencia de origen.
  • EVENT_SOURCE: Es la fuente de eventos de un evento publicado.
  • EVENT_ID: Es el identificador del evento. Los productores deben asegurarse de que source + id sea único para cada evento distinto.
  • CONTENT_TYPE (opcional): Es el tipo de contenido del valor data Si un evento en formato JSON no tiene un atributo datacontenttype, se supone que los datos son un valor JSON que cumple con el tipo de medio application/json.
  • DATA_PAYLOAD (opcional): Es la carga útil del evento codificada en el formato de medios especificado por datacontenttype y que cumple con dataschema cuando esos atributos están presentes.

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

Si la solicitud se completa correctamente, el servidor muestra un código de estado HTTP 200 OK y el cuerpo de la respuesta vacío en formato JSON:

200 OK

{}

¿Qué sigue?