Receber eventos usando mensagens do Pub/Sub (CLI gcloud)

Neste guia de início rápido, mostramos como implantar um serviço não autenticado do Cloud Run (totalmente gerenciado) que recebe eventos usando o Pub/Sub.

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. Criar um gatilho do Eventarc.

  3. Publicar uma mensagem em um tópico do Pub/Sub para gerar um evento e visualizá-la nos registros do Cloud Run

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 do 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. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Run, Cloud Logging, Pub/Sub, and Eventarc APIs:

    gcloud services enable run.googleapis.com logging.googleapis.com pubsub.googleapis.com eventarc.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. 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.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Cloud Run, Cloud Logging, Pub/Sub, and Eventarc APIs:

    gcloud services enable run.googleapis.com logging.googleapis.com pubsub.googleapis.com eventarc.googleapis.com
  12. Atualize os componentes da CLI do Google Cloud:
    gcloud components update
  13. Faça login usando sua conta:
    gcloud auth login
  14. Defina as variáveis de configuração usadas neste guia de início rápido:
    gcloud config set run/region us-central1
    gcloud config set run/platform managed
    gcloud config set eventarc/location us-central1
  15. Se você for o criador do projeto, receberá o papel de proprietário básico (roles/owner). Por padrão, esse papel do gerenciamento de identidade e acesso (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). Para mais informações, consulte a página Papéis e permissões do destino do evento.

    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 como conceder papéis, consulte Gerenciar acesso.

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

  16. Se você ativou o agente de serviço do Cloud Pub/Sub até 8 de abril de 2021, para oferecer suporte a solicitações push autenticadas do Pub/Sub, conceda o papel Criador de token da conta de serviço. (roles/iam.serviceAccountTokenCreator) à conta de serviço gerenciada pelo Google. Caso contrário, esse papel é concedido por padrão:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  17. Substitua PROJECT_NUMBER pelo número do projeto do 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)'

Implantar um receptor de eventos no Cloud Run

Implante um serviço do Cloud Run que receberá e registrará eventos usando uma imagem pré-criada, us-docker.pkg.dev/cloudrun/container/hello:

gcloud run deploy helloworld-events-pubsub-quickstart \
    --image=us-docker.pkg.dev/cloudrun/container/hello \
    --allow-unauthenticated

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

Criar um gatilho do Eventarc

O gatilho de eventos envia mensagens para o serviço de receptor de eventos implantado no Cloud Run quando uma mensagem é publicada no tópico do Pub/Sub.

  1. Crie um gatilho para detectar mensagens do Pub/Sub:

    Novo tópico pub/sub

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-run-service=helloworld-events-pubsub-quickstart \
        --destination-run-region=us-central1 \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
    

    Isso cria um novo tópico Pub/Sub e um gatilho para ele chamado events-pubsub-trigger.

    Tópico do Pub/Sub atual

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-run-service=helloworld-events-pubsub-quickstart \
        --destination-run-region=us-central1 \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
    

    Substitua:

    • PROJECT_ID: o ID do projeto do Google Cloud
    • TOPIC_ID: o ID do tópico do Pub/Sub atual

    Isso cria um gatilho chamado events-pubsub-trigger para o tópico atual do Pub/Sub.

    Ao criar um gatilho do Eventarc pela primeira vez em um projeto do Google Cloud, pode haver um atraso no provisionamento do agente de serviço do Eventarc. Esse problema geralmente pode ser resolvido ao tentar criar o acionador novamente. Para mais informações, consulte Erros de permissão negada.

  2. Confirme se o gatilho foi criado:

    gcloud eventarc triggers list --location=us-central1
    

    O events-pubsub-trigger está listado com um destino que é o serviço do Cloud Run, helloworld-events-pubsub-quickstart.

Gerar e visualizar um evento de tópico do Pub/Sub.

É possível gerar um evento do Eventarc publicando uma mensagem em um tópico do Pub/Sub.

  1. Encontre e defina o tópico do Pub/Sub como uma variável de ambiente:

    export RUN_TOPIC=$(gcloud eventarc triggers describe events-pubsub-trigger \
        --format='value(transport.pubsub.topic)')
    
  2. Publique uma mensagem para o tópico do Pub/Sub a fim de gerar um evento:

    gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"
    

    O evento é encaminhado ao serviço do Cloud Run, que registra a mensagem do evento.

  3. Para visualizar as entradas de registro relacionadas a eventos criadas pelo serviço, execute o seguinte comando:

    gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
    
  4. Procure uma entrada de registro semelhante a esta:

    jsonPayload:
    ...
    message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished.
        Event data: Hello World!'
    

Parabéns! Você implantou com sucesso um serviço de receptor de eventos no Cloud Run, criou um gatilho do Eventarc, gerou um evento do Pub/Sub e o visualizou nos registros do Cloud Run.

Limpar

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados.

É possível:

  1. Excluir o serviço do Cloud Run.

  2. Excluir o gatilho do Eventarc.

    Isso também exclui o tópico associado do Pub/Sub.

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

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

Se você planeja ver vários tutoriais e guias de início rápido, a reutilização de projetos pode evitar que você exceda os limites da cota do projeto.

A seguir