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:
Implante um serviço de receptor de eventos no Cloud Run que exige invocações autenticadas.
Crie um gatilho do Eventarc que conecte um tópico do Pub/Sub ao serviço do Cloud Run.
Publique uma mensagem para o tópico do Pub/Sub a fim de gerar um evento.
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.
Antes de começar
- 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.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
- Instale e inicialize a Google Cloud CLI.
- Atualize os componentes da gcloud:
gcloud components update
- Faça login usando sua conta:
gcloud auth login
- Ative as APIs:
gcloud services enable run.googleapis.com \ eventarc.googleapis.com \ pubsub.googleapis.com \ cloudbuild.googleapis.com
- 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}
SubstituaPROJECT_ID
pelo ID do projeto do Google Cloud. - 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. - 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
- 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.
-
- 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 CloudUSER_EMAIL
: o endereço de e-mail do usuárioExemplos:
user:test-user@gmail.com
,group:admins@example.com
,serviceAccount:test123@example.domain.com
edomain:example.domain.com
- 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 CloudSERVICE_ACCOUNT_ID
: o ID da conta de serviço. Por exemplo,sample-service-account
.USER_EMAIL
: o endereço de e-mail do usuárioExemplos:
user:test-user@gmail.com
,group:admins@example.com
,serviceAccount:test123@example.domain.com
edomain:example.domain.com
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.
Implantar um receptor de eventos no Cloud Run
Implante um serviço do Cloud Run que registre o conteúdo de um evento.
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.
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/
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}
Implante a imagem do contêiner no Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/${PROJECT_ID}/${SERVICE_NAME} \ --region=${REGION}
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.
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 chamadotrigger-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.
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.
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)'))
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.
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:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
delete-tutorial-resources
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.
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
Exclua outros recursos do Google Cloud criados neste tutorial:
- Exclua o gatilho do Eventarc:
gcloud eventarc triggers delete TRIGGER_NAME
SubstituaTRIGGER_NAME
pelo nome do gatilho.
- Exclua a imagem de contêiner
denominada
gcr.io/PROJECT_ID/trigger-pubsub
do Container Registry.
- Exclua o gatilho do Eventarc: