Publicar eventos diretamente

É possível publicar um evento do CloudEvents diretamente em um barramento Eventarc Advanced em um formato compatível usando a CLI do Google Cloud ou enviando uma solicitação para a API REST de publicação do Eventarc. Você também pode usar as bibliotecas de cliente do Eventarc para acessar as APIs do Eventarc em uma linguagem compatível.

Antes de começar

Antes de começar, verifique se você concluiu as etapas a seguir:

  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. Publicar diretamente

    A mensagem de evento que você publica diretamente precisa estar em conformidade com a especificação do CloudEvents.

    gcloud

    1. Abra um terminal.

    2. É possível publicar eventos em um barramento usando o comando gcloud eventarc message-buses publish. Exemplo:

      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

      Substitua:

      • BUS_NAME: o ID ou identificador totalmente qualificado do barramento em que o evento será publicado.

      Use apenas uma das seguintes opções:

      • AVRO_MESSAGE: a mensagem de evento em um formato Avro de acordo com esta especificação.
      • JSON_MESSAGE: a mensagem de evento em formato JSON de acordo com esta especificação.
      • DATA_PAYLOAD: os dados de um evento publicado.

      Se você usar a flag --event-data, também precisará usar o seguinte:

      • EVENT_ID: o identificador do evento. Os produtores de eventos precisam garantir que source + id seja exclusivo para cada evento distinto.
      • EVENT_SOURCE: a origem do evento de um evento publicado.
      • EVENT_TYPE: o tipo de evento relacionado à ocorrência de origem.

      Se você estiver usando a flag --event-data, poderá usar as seguintes opções:

      • EVENT_ATTRIBUTE: os atributos de um evento publicado. Você pode repetir a flag --event-attributes para adicionar mais atributos.

        Os eventos podem incluir qualquer número de atributos personalizados adicionais do CloudEvents com nomes distintos, também conhecidos como atributos de extensão.

    Exemplos:

    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

    Para publicar um evento em um barramento, use o método projects.locations.messageBuses.publish.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • O nome completo do recurso do ônibus no formato projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

      Substitua:

      • PROJECT_ID: o ID do projeto Google Cloud para o projeto de ônibus.
      • LOCATION: a região em que o barramento é implantado, por exemplo, us-central1.
      • BUS_NAME: o nome do barramento em que o evento será publicado.
    • SPEC_VERSION: a versão da especificação CloudEvents que o evento usa. Por exemplo, 1.0.
    • EVENT_TYPE: o tipo de evento relacionado à ocorrência de origem.
    • EVENT_SOURCE: a origem do evento de um evento publicado.
    • EVENT_ID: o identificador do evento. Os produtores precisam garantir que source + id seja exclusivo para cada evento distinto.
    • CONTENT_TYPE (opcional): o tipo de conteúdo do valor data. Se um evento no formato JSON não tiver um atributo datacontenttype, será considerado que os dados são um valor JSON em conformidade com o tipo de mídia application/json.
    • DATA_PAYLOAD (opcional): o payload do evento codificado no formato de mídia especificado por datacontenttype e seguindo dataschema quando esses atributos estão presentes.

    Corpo JSON da solicitação:

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

    Para enviar a solicitação, expanda uma destas opções:

    Se a solicitação for bem-sucedida, o servidor vai retornar um código de status HTTP 200 OK e o corpo da resposta vazio no formato JSON:

    200 OK
    
    {}
    

    A seguir