Publicar eventos de uma fonte do Google

É possível ativar a coleta e publicação de eventos de fontes do Google. Para mais informações, consulte Publicar eventos de fontes do Google.

Neste guia de início rápido, mostramos como publicar e receber mensagens de eventos criando um barramento do Eventarc Advanced e fazendo a inscrição no seu projeto Google Cloud.

  • Um barramento permite centralizar o fluxo de mensagens no sistema e atua como um roteador. Ele recebe mensagens de eventos de uma fonte de mensagens ou publicadas por um provedor e as avalia de acordo com uma inscrição.

  • Um registro identifica uma assinatura de um barramento específico e define os critérios de correspondência para mensagens, fazendo com que elas sejam roteadas de acordo com um ou mais destinos.

Neste guia de início rápido, você fará as seguintes tarefas:

  1. Implantar um serviço de receptor de eventos no Cloud Run

  2. Crie um barramento do Eventarc Advanced.

  3. Ative os eventos de fontes do Google.

  4. Crie uma inscrição no Eventarc Advanced.

  5. Publique uma mensagem de evento no barramento criando um fluxo de trabalho.

  6. Confira os dados do evento nos registros do Cloud Run.

Conclua este guia de início rápido usando a CLI gcloud.

Antes de começar

As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito de Google Cloud .

  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. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  4. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud project.

    • 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 Artifact Registry, Cloud Build, Cloud Run, Eventarc, and Workflows APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com workflows.googleapis.com
  8. Install the Google Cloud CLI.

  9. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  10. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  11. Create or select a Google Cloud project.

    • 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 Artifact Registry, Cloud Build, Cloud Run, Eventarc, and Workflows APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com workflows.googleapis.com
  14. Atualize os componentes gcloud:
    gcloud components update
  15. Faça login usando sua conta:
    gcloud auth login
  16. Defina a variável de configuração usada neste guia de início rápido:
    REGION=REGION

    Substitua REGION por um local compatível para o ônibus, por exemplo, us-central1.

  17. Se você for o criador do projeto, vai receber o papel de proprietário básico (roles/owner). Por padrão, esse papel do Identity and Access Management (IAM) inclui as permissões necessárias para acesso total à maioria dos recursos do Google Cloud, e você pode pular esta etapa.

    Se você não é o criador do projeto, as permissões necessárias precisam ser concedidas ao principal apropriado. Por exemplo, um principal pode ser uma Conta do Google (para usuários finais) ou uma conta de serviço (para aplicativos e cargas de trabalho de computação).

    Observe que, por padrão, as permissões do Cloud Build incluem permissões para upload e download de artefatos do Artifact Registry.

    Permissões necessárias

    Para conseguir as permissões necessárias a fim de concluir o guia de início rápido, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

    Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

    Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

  18. Conceda os seguintes papéis no projeto à conta de serviço padrão do Compute Engine. Essas funções são necessárias ao criar e implantar a imagem do contêiner:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/artifactregistry.writer
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/logging.logWriter
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/storage.objectUser

    Substitua PROJECT_NUMBER pelo número do seu projeto Google Cloud. Encontre o número do projeto na página Boas-vindas do console do Google Cloud ou executando o seguinte comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  19. Por padrão, somente proprietários e editores de projetos, além de administradores e invocadores do Cloud Run, podem chamar serviços do Cloud Run. Para configurar a autenticação, conceda o papel de invocador do Cloud Run (run.invoker) no seu projeto Google Cloud a uma conta de serviço:
    1. Crie uma conta de serviço. Para fins de teste, você vai anexar essa conta de serviço a um pipeline do Eventarc Advanced para representar a identidade do pipeline.
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      Substitua SERVICE_ACCOUNT_NAME por um nome para a conta de serviço.
    2. Conceda o papel do IAM roles/run.invoker à conta de serviço:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/run.invoker

    É possível configurar quem pode acessar o serviço do Cloud Run de uma das seguintes maneiras:

    • Conceda permissão para selecionar contas de serviço ou grupos para permitir o acesso ao serviço. Todas as solicitações precisam ter um cabeçalho de autorização HTTP com um token do OpenID Connect assinado pelo Google para uma das contas de serviço autorizadas. É assim que o acesso é configurado neste guia de início rápido.
    • Conceda permissão para allUsers permitir acesso não autenticado.

    Para mais informações, consulte Controle de acesso do Cloud Run.

  20. Implantar um serviço de receptor de eventos no Cloud Run

    Implante um serviço do Cloud Run como um destino de evento que registra o conteúdo de um evento. Outros destinos de eventos são aceitos, como um tópico do Pub/Sub, Workflows ou um endpoint HTTP. Para mais informações, consulte Provedores e destinos de eventos.

    1. Crie um repositório padrão do Artifact Registry para armazenar a imagem do contêiner.

      gcloud artifacts repositories create REPOSITORY \
          --repository-format=docker \
          --location=$REGION

      Substitua REPOSITORY por um nome exclusivo para o repositório do Artifact Registry, por exemplo, my-repo.

    2. Clone o repositório do GitHub:

      git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
    3. Mude para o diretório que contém o código de amostra do Cloud Run:

      cd eventarc-samples/eventarc-advanced-quickstart/
    4. Crie uma imagem de contêiner do Docker e envie-a por push para seu repositório:

      gcloud builds submit \
          --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1
    5. Implante a imagem do contêiner no Cloud Run:

      gcloud run deploy SERVICE_NAME \
          --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1 \
          --platform managed \
          --ingress all \
          --no-allow-unauthenticated \
          --region=$REGION

      Substitua SERVICE_NAME pelo nome do seu serviço, por exemplo, my-service.

      Observe o seguinte:

      • A flag --platform define a plataforma de destino, neste caso, uma versão totalmente gerenciada do Cloud Run.

      • A configuração de entrada all permite todas as solicitações, incluindo solicitações diretamente da Internet para o URL run.app. Para mais informações, consulte Restringir a entrada de rede para o Cloud Run.

      • A flag --no-allow-unauthenticated configura o serviço para permitir apenas invocações autenticadas.

      • Quando o URL do serviço do Cloud Run for exibido, a implantação estará concluída.

    6. Copie e salve o URL do serviço do Cloud Run, porque você vai usá-lo em uma etapa posterior.

    Criar um barramento do Eventarc Advanced

    Um barramento recebe mensagens de eventos de uma fonte de mensagens ou publicadas por um provedor e age como um roteador de mensagens.

    Para mais informações, consulte Criar um barramento para rotear mensagens.

    Crie um barramento do Eventarc Advanced no seu projeto usando o comando gcloud eventarc message-buses create:

    gcloud eventarc message-buses create BUS_NAME \
        --location=$REGION

    Substitua BUS_NAME pelo ID do barramento ou um nome totalmente qualificado, por exemplo, my-bus.

    Ativar eventos de fontes do Google

    Para publicar eventos de fontes do Google, crie um recurso GoogleApiSource. Esse recurso representa uma assinatura de eventos da API do Google para um barramento específico do Eventarc Advanced em um projeto e uma região Google Cloud específicos.

    Ative eventos de fontes do Google usando o comando gcloud eventarc google-api-sources create:

    gcloud eventarc google-api-sources create GOOGLE_API_SOURCE_NAME \
        --destination-message-bus=BUS_NAME \
        --destination-message-bus-project=PROJECT_ID \
        --location=$REGION

    Substitua GOOGLE_API_SOURCE_NAME pelo ID do recurso GoogleApiSource ou um nome totalmente qualificado, por exemplo, my-google-api-source.

    Todos os tipos de eventos do Google compatíveis enviados diretamente de uma origem do Google agora são coletados e publicados no seu barramento.

    Criar uma inscrição no Eventarc Advanced

    Um registro determina quais mensagens são roteadas para um destino e também especifica o pipeline usado para configurar um destino para as mensagens de evento.

    Para mais informações, consulte Criar uma inscrição para receber eventos.

    Ao usar a CLI gcloud, primeiro crie um pipeline e depois crie uma inscrição:

    1. Crie um pipeline usando o comando gcloud eventarc pipelines create:

      gcloud eventarc pipelines create PIPELINE_NAME \
          --destinations=http_endpoint_uri='CLOUD_RUN_SERVICE_URL',google_oidc_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
          --location=$REGION

      Substitua:

      • PIPELINE_NAME: o ID do pipeline ou um nome totalmente qualificado, por exemplo, my-pipeline.
      • CLOUD_RUN_SERVICE_URL: o URL totalmente qualificado do serviço do Cloud Run, por exemplo, https://SERVICE_NAME-abcdef-uc.a.run.app. Esse é o destino das mensagens de evento.

      A chave google_oidc_authentication_service_account especifica um e-mail de conta de serviço usado para gerar um token do OIDC.

    2. Crie uma inscrição usando o comando gcloud eventarc enrollments create:

      gcloud eventarc enrollments create ENROLLMENT_NAME \
          --cel-match=MATCH_EXPRESSION \
          --destination-pipeline=PIPELINE_NAME \
          --message-bus=BUS_NAME \
          --message-bus-project=PROJECT_ID \
          --location=$REGION

      Substitua:

      • ENROLLMENT_NAME: o ID da inscrição ou um nome totalmente qualificado, por exemplo, my-enrollment.
      • MATCH_EXPRESSION: a expressão de correspondência para esta inscrição usando CEL. Por exemplo, para publicar mensagens de eventos sempre que um fluxo de trabalho do Workflows for criado, use a seguinte expressão:

        "message.type == 'google.cloud.workflows.workflow.v1.created'"
        

    Publicar uma mensagem de evento no barramento criando um fluxo de trabalho

    O Workflows é uma plataforma de orquestração totalmente gerenciada que executa serviços na ordem que você define: um fluxo de trabalho. Crie um fluxo de trabalho para gerar um tipo de evento compatível de uma fonte do Google.

    1. No diretório inicial, crie um novo arquivo chamado myWorkflow.yaml.

    2. Copie e cole o seguinte fluxo de trabalho no novo arquivo e salve:

      - getCurrentTime:
          call: http.get
          args:
            url: https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam
          result: currentTime
      - readWikipedia:
          call: http.get
          args:
            url: https://en.wikipedia.org/w/api.php
            query:
              action: opensearch
              search: ${currentTime.body.dayOfWeek}
          result: wikiResult
      - returnResult:
          return: ${wikiResult.body[1]}
      

      Esse fluxo de trabalho transmite o dia atual da semana como um termo de pesquisa para a API Wikipedia. Uma lista de artigos relacionados da Wikipédia é retornada.

    3. Implante o fluxo de trabalho e associe-o à conta de serviço especificada usando o comando gcloud workflows deploy:

      gcloud workflows deploy myWorkflow --source=myWorkflow.yaml \
          --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
          --location=$REGION

    Ver os dados de eventos nos registros do Cloud Run

    Depois de publicar um evento no barramento do Eventarc Advanced, você pode verificar os registros do seu serviço do Cloud Run para verificar se o evento foi recebido conforme o esperado.

    1. Filtre as entradas de registro e retorne a saída usando o comando gcloud logging read:

      gcloud logging read 'textPayload: "google.cloud.workflows.workflow.v1.created"'
      
    2. Procure uma entrada de registro semelhante a esta:

      insertId: 689644c30004cde066603b3a
      labels:
        instanceId: 0069c7a98846e3b870396a63478212b9642512ef362b67c33090846e10498949c671ccfefbc66f4f093796406e9a714bebc6fbb82f321578134ef95e56f9e9986c3265d2820b56f7994617ba7172ab
      logName: projects/PROJECT_ID/logs/run.googleapis.com%2Fstderr
      receiveTimestamp: '2025-08-08T18:41:07.632226222Z'
      resource:
        labels:
        ...
        type: cloud_run_revision
      textPayload: 'Ce-Type: google.cloud.workflows.workflow.v1.created'
      timestamp: '2025-08-08T18:41:07.314848Z'
      

    Você criou com sucesso um barramento e uma inscrição do Eventarc Advanced, ativou a publicação de eventos de fontes do Google, criou um fluxo de trabalho para gerar um tipo de evento compatível de um provedor do Google e verificou o resultado esperado nos registros do serviço de receptor de eventos.

    Limpar

    Ao concluir as tarefas descritas neste guia de início rápido, é possível evitar o faturamento contínuo excluindo os recursos criados:

    1. Exclua um repositório do Artifact Registry.

    2. Exclua um serviço do Cloud Run.

    3. Exclua um fluxo de trabalho do Workflows.

    4. Exclua os recursos do Eventarc Advanced:

      1. Excluir uma inscrição.

      2. Excluir um pipeline.

      3. Excluir um ônibus.

    Se preferir, exclua o projeto do Google Cloud para evitar cobranças. A exclusão do projeto Google Cloud interrompe o faturamento de todos os recursos usados nele.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    A seguir