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

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

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 o envio e o recebimento de mensagens entre aplicativos independentes.

Objetivos

Com este tutorial, você vai:

  1. Implante um serviço de receptor de eventos no Cloud Run que exige invocações autenticadas.

  2. Crie um gatilho do Eventarc que conecte um tópico do Pub/Sub ao serviço do Cloud Run.

  3. Publique uma mensagem para o tópico do Pub/Sub a fim de gerar um evento.

  4. Veja o evento nos registros do Cloud Run.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Antes de começar

    Algumas das etapas deste documento podem não funcionar corretamente se sua organização aplicar restrições ao ambiente do Google Cloud. Nesse caso, talvez não seja possível concluir tarefas como criar endereços IP públicos ou chaves de contas de serviço. Se você fizer uma solicitação que retorne um erro sobre restrições, veja como Desenvolver aplicativos em um ambiente restrito do Google Cloud.

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  4. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  5. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  6. Instale e inicialize a Google Cloud CLI.
  7. Atualize os componentes da gcloud:
    gcloud components update
  8. Faça login usando sua conta:
    gcloud auth login
  9. Ative as APIs:
    gcloud services enable run.googleapis.com \
      eventarc.googleapis.com \
      pubsub.googleapis.com \
      cloudbuild.googleapis.com
  10. Defina as variáveis de configuração usadas neste tutorial:
    export REGION=us-central1
    gcloud config set project PROJECT_ID
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
    
    Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
  11. Crie uma conta de serviço para o projeto. Exemplo:
    gcloud iam service-accounts create sample-service-account \
      --description="A sample service account" \
      --display-name="Sample service account"
    Depois de criar uma conta de serviço, pode levar até sete minutos para que você possa usá-la. Se você tentar usar imediatamente uma conta de serviço depois de criá-la e receber um erro, aguarde pelo menos 60 segundos e tente novamente.
  12. Para confirmar se a sample-service-account foi criada, execute:
    gcloud iam service-accounts list
    A saída será semelhante a:
    DISPLAY NAME                     EMAIL                                                               DISABLED
    Default compute service account  PROJECT_NUMBER-compute@developer.gserviceaccount.com                False
    Sample service account           sample-service-account@PROJECT_ID.iam.gserviceaccount.com           False
  13. Conceda o papel run.invoker à conta de serviço:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/run.invoker"

    Substitua:

    • PROJECT_ID: o ID do projeto;
    • SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da conta de serviço retornado na etapa anterior.
  14. Atribua o papel de eventarc.admin à conta de usuário.
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role='roles/eventarc.admin'

    Substitua os seguintes valores:

    • PROJECT_ID: o ID do projeto do Google Cloud
    • USER_EMAIL: o endereço de e-mail do usuário

      Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com e domain:example.domain.com

  15. Atribua o papel de iam.serviceAccountUser à conta de usuário.
    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
      --member="user:USER_EMAIL" \
      --role="roles/iam.serviceAccountUser"

    Substitua os seguintes valores:

    • PROJECT_ID: o ID do projeto do Google Cloud
    • SERVICE_ACCOUNT_ID: o ID da conta de serviço. Por exemplo, sample-service-account.
    • USER_EMAIL: o endereço de e-mail do usuário

      Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com e domain:example.domain.com

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:

    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 para o serviço do Cloud Run:

    export PROJECT_ID=$(gcloud config get-value project)
    export SERVICE_NAME=trigger-pubsub
    gcloud builds submit --tag gcr.io/${PROJECT_ID}/${SERVICE_NAME}
    
  4. Implante a imagem do contêiner no Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
      --image gcr.io/${PROJECT_ID}/${SERVICE_NAME} \
      --region=${REGION}
    
  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. O serviço exige autenticação, e o evento deve ser acionado por um autor da chamada que tenha uma conta de serviço com os papéis e permissões do IAM necessários para usar o recurso.

  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=SERVICE_ACCOUNT_USER_EMAIL
    

    Substitua SERVICE_ACCOUNT_EMAIL pelo endereço de e-mail da conta de serviço.
    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=SERVICE_ACCOUNT_EMAIL
    

    Substitua:

    • PROJECT_ID é o ID do projeto no Google Cloud.
    • TOPIC_ID é o ID do tópico do Pub/Sub atual.
    • SERVICE_ACCOUNT_EMAIL é o endereço de e-mail da conta de serviço.

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

  2. Confirme se o gatilho foi criado:

      gcloud eventarc triggers list --location=us-central1
    

    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=$(basename $(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.

Limpar

Se você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial.

Exclua o projeto

O jeito mais fácil de evitar cobranças é excluir o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

delete-tutorial-resources

  1. Exclua o serviço do Cloud Run que você implantou neste tutorial:

    gcloud run services delete SERVICE_NAME

    SERVICE_NAME é o nome escolhido do serviço.

    Também é possível excluir os serviços do Cloud Run no Console do Google Cloud.

  2. Remova as configurações padrão do gcloud CLI que você adicionou durante a configuração do tutorial.

    Exemplo:

    gcloud config unset run/region

    ou

    gcloud config unset project

  3. Exclua outros recursos do Google Cloud criados neste tutorial:

    • Exclua o gatilho do Eventarc:
      gcloud eventarc triggers delete TRIGGER_NAME
      
      Substitua TRIGGER_NAME pelo nome do gatilho.

A seguir