Receber eventos do Pub/Sub usando um serviço autenticado do Cloud Run

Neste tutorial, mostramos como implantar um aplicativo conteinerizado usando um serviço autenticado do Cloud Run que recebe eventos usando o Pub/Sub. O Pub/Sub é um serviço de mensagens em tempo real totalmente gerenciado que permite enviar e receber mensagens entre aplicativos independentes.

Criar um repositório padrão do Artifact Registry

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.

Implantar um receptor de eventos no Cloud Run

Implante um serviço do Cloud Run que registre o conteúdo de um evento.

  1. Clone o repositório do GitHub:

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

    Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git

    Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git

    Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.

    Ruby

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git

    Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git

    Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.

  2. Mude para o diretório que contém o código de amostra do Cloud Run:

    Node.js

    cd nodejs-docs-samples/eventarc/pubsub/

    Python

    cd python-docs-samples/eventarc/pubsub/

    Go

    cd golang-samples/eventarc/pubsub/

    Java

    cd java-docs-samples/eventarc/pubsub/

    Ruby

    cd ruby-docs-samples/eventarc/pubsub/

    C#

    cd dotnet-docs-samples/eventarc/pubsub/
  3. Crie o contêiner e faça upload dele para o Cloud Build:

    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  4. Implante a imagem do contêiner no Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  5. No prompt Allow unauthenticated Bigtable to trigger-pubsub (y/N)?, responda n para a resposta "No".

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

Criar um gatilho do Eventarc

Quando uma mensagem é publicada no tópico do Pub/Sub, o evento aciona o serviço do Cloud Run.

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

    Novo tópico pub/sub

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

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

    Tópico do Pub/Sub atual

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Substitua:

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

    Isso cria um gatilho chamado trigger-pubsub 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 com êxito. Embora o gatilho seja criado imediatamente, pode levar até dois minutos para que ele seja totalmente funcional.

    gcloud eventarc triggers list --location=${REGION}

    O status do acionador retornado será ACTIVE: Yes.

Gerar e visualizar um evento

Publique uma mensagem em um tópico do Pub/Sub para gerar um evento e acionar o serviço do Cloud Run. O serviço do Cloud Run registra as mensagens nos registros de serviço.

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

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

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"

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

  3. Para ver as entradas de registro relacionadas a eventos criadas pelo seu serviço:

    gcloud logging read 'textPayload: "Hello there!"'

    A entrada de registro precisa ser semelhante a esta:

    textPayload: 'Hello, Hello there!'

Os registros podem demorar alguns instantes para aparecer. Se eles não aparecerem imediatamente, verifique novamente após um minuto.