Este tutorial mostra como gravar, implantar e chamar um serviço do Cloud Run for Anthos a partir de uma assinatura de push do Pub/Sub.
Objetivos
- Gravar, criar e implantar um serviço no Cloud Run for Anthos
- Chame o serviço publicando uma mensagem em um tópico do Pub/Sub.
Custos
Neste documento, você usará 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
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Ativar a API Cloud Run for Anthos
- Instale e inicialize a CLI gcloud.
- Instale o componente
kubectl
:gcloud components install kubectl
- Atualize os componentes:
gcloud components update
- Se você estiver usando o Cloud Run for Anthos, crie um novo cluster usando as instruções em Como configurar o Cloud Run for Anthos.
Como configurar padrões da gcloud
Para configurar a gcloud com os padrões do serviço do Cloud Run for Anthos, faça o seguinte:
Defina o projeto padrão:
gcloud config set project PROJECT_ID
Substitua PROJECT_ID pelo nome do projeto que você usou neste tutorial.
Configure a gcloud para o cluster:
gcloud config set run/platform gke gcloud config set run/cluster CLUSTER-NAME gcloud config set run/cluster_location REGION
Substitua:
- CLUSTER-NAME pelo nome que você usou para o cluster;
- REGION pelo local do cluster compatível de sua escolha.
Como criar um tópico do Pub/Sub
O serviço de amostra é acionado por mensagens publicadas em um tópico do Pub/Sub. Portanto, é necessário criar um tópico no Pub/Sub.
Para criar um novo tópico do Pub/Sub, use o comando:
gcloud pubsub topics create myRunTopic
É possível usar myRunTopic ou substituir por um nome de tópico exclusivo no projeto do Cloud.
Como recuperar o exemplo de código
Para recuperar o exemplo de código para uso, siga estas etapas:
Clone o repositório do aplicativo de amostra na máquina local:
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.
Altere para o diretório que contém o código de amostra do Cloud Run for Anthos:
Node.js
cd nodejs-docs-samples/run/pubsub/
Python
cd python-docs-samples/run/pubsub/
Go
cd golang-samples/run/pubsub/
Java
cd java-docs-samples/run/pubsub/
Como olhar para o código
O código deste tutorial consiste nisto:
Um servidor que processa solicitações recebidas.
Node.js
Para que a facilidade no teste do serviço do Node.js seja mantida, a configuração do servidor é separada da inicialização dele.O servidor da Web Node.js está configurado em
O servidor da Web é iniciado emapp.js
.index.js
:Python
Go
Java
Um gerenciador que processa a mensagem do Pub/Sub e registra uma saudação.
Node.js
Python
Go
Java
É necessário codificar o serviço para retornar um código de resposta HTTP preciso. Códigos de êxito, como HTTP
200
ou204
, confirmam o processamento completo da mensagem do Pub/Sub. Códigos de erro, como HTTP400
ou500
, indicam que a mensagem será repetida, conforme descrito no guia Como receber mensagens usando push.Um
Dockerfile
que define o ambiente operacional do serviço. O conteúdo doDockerfile
varia de acordo com o idioma.Node.js
Python
Go
Java
Esta amostra usa o Jib (em inglês) para criar imagens do Docker usando ferramentas comuns do Java. O Jib otimiza builds de contêiner sem a necessidade de um Dockerfile ou de ter o Docker (em inglês) instalado. Saiba mais sobre como criar contêineres Java com o Jib.
Para saber detalhes sobre como autenticar a origem das solicitações do Pub/Sub, leia a seção abaixo sobre como integrar ao Pub/Sub.
Como enviar o código
O código de envio consiste em três etapas: criar uma imagem de contêiner com o Cloud Build, fazer upload da imagem de contêiner no Container Registry e implantar a imagem de contêiner no Cloud Run.
Para enviar o código, siga estas etapas:
Compile seu contêiner e publique no Container Registry.
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
em que PROJECT_ID é o ID do projeto do Cloud e
pubsub
é o nome que você quer dar ao seu serviço.Após a conclusão, você verá uma mensagem de "SUCESSO" contendo o ID, a hora da criação e o nome da imagem. A imagem é armazenada no Container Registry e poderá ser reutilizada, se você quiser.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
em que PROJECT_ID é o ID do projeto do Cloud e
pubsub
é o nome que você quer dar ao seu serviço.Após a conclusão, você verá uma mensagem de "SUCESSO" contendo o ID, a hora da criação e o nome da imagem. A imagem é armazenada no Container Registry e poderá ser reutilizada, se você quiser.
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
em que PROJECT_ID é o ID do projeto do Cloud e
pubsub
é o nome que você quer dar ao seu serviço.Após a conclusão, você verá uma mensagem de "SUCESSO" contendo o ID, a hora da criação e o nome da imagem. A imagem é armazenada no Container Registry e poderá ser reutilizada, se você quiser.
Java
mvn compile jib:build -Dimage=gcr.io/PROJECT_ID/pubsub
em que PROJECT_ID é o ID do projeto do Cloud e
pubsub
é o nome que você quer dar ao seu serviço.Após a conclusão, você verá uma mensagem "BUILD SUCCESS". A imagem é armazenada no Container Registry e poderá ser reutilizada, se você quiser.
Execute o comando a seguir para implantar o app:
gcloud run deploy pubsub-tutorial --image gcr.io/PROJECT_ID/pubsub
Substitua PROJECT_ID pelo ID do projeto do Cloud.
pubsub
é o nome do contêiner epubsub-tutorial
é o nome do serviço. Observe que a imagem do contêiner é implantada no serviço e no cluster que você configurou anteriormente em Como configurar o gcloud.Aguarde até que a implantação esteja concluída. Isso pode levar cerca de 30 segundos. Em caso de sucesso, a linha de comando exibe o URL de serviço. Esse URL é usado para configurar uma assinatura do Pub/Sub.
Se você quer implantar uma atualização de código no serviço, repita as etapas anteriores. Cada implantação em um serviço cria uma nova revisão e inicia automaticamente o tráfego de serviço quando estiver pronto.
Como integrar ao Pub/Sub
Agora que implantamos nosso serviço do Cloud Run, configuraremos o Pub/Sub para enviar mensagens para ele.
Para integrar o serviço com o Pub/Sub:
Ative o Pub/Sub para criar tokens de autenticação no seu projeto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT-NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Substitua:
- PROJECT_ID pelo ID do projeto do Cloud.
- PROJECT-NUMBER pelo número do projeto do Cloud.
Crie ou selecione uma conta de serviço para representar a identidade da assinatura de Pub/Sub.
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run for Anthos Pub/Sub Invoker"
É possível usar
cloud-run-pubsub-invoker
ou substituir por um nome exclusivo no projeto do Cloud.Crie uma assinatura do Pub/Sub com a conta de serviço:
Ative o TLS e o HTTPS automáticos para o cluster e adicione um mapeamento de domínio ao serviço.
Registre a propriedade do domínio para o Pub/Sub.
Adicione um código para validar o token de autenticação anexado a mensagens do Pub/Sub. O código de amostra é fornecido na Autenticação e autorização pelo endpoint de push.
A autenticação deve garantir que o token seja válido e associado à conta de serviço esperada. Ao contrário do Cloud Run, o Cloud Run para Anthos não tem verificação de autorização integrada para verificar se o token é válido ou se a conta de serviço tem autorização para invocar o Cloud Run para Anthos.
Crie uma assinatura do Pub/Sub com a conta de serviço:
gcloud pubsub subscriptions create myRunSubscription --topic myRunTopic \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
Substitua:
- myRunTopic pelo tópico que você criou anteriormente.
- SERVICE-URL pelo URL do serviço personalizado.
Especifique
https
como o protocolo. - PROJECT_ID pelo ID do projeto do Cloud.
A sinalização
--push-auth-service-account
ativa a funcionalidade de push do Pub/Sub para Autenticação e autorização.
Seu serviço agora está totalmente integrado ao Pub/Sub.
Como testar
Para testar a solução de ponta a ponta, siga estas etapas:
Para enviar uma mensagem do Pub/Sub para o tópico:
gcloud pubsub topics publish myRunTopic --message "Runner"
Também é possível publicar mensagens programaticamente em vez de usar a linha de comando, conforme mostrado neste tutorial. Para mais informações, consulte Como publicar mensagens.
Navegue até os registros de serviço:
Navegue até a página do Cloud Run for Anthos no console do Cloud:
Clique no serviço
pubsub-tutorial
.Selecione a guia Registros.
Os registros podem demorar alguns instantes para aparecer. Se você não os vir imediatamente, verifique novamente após alguns instantes.
Procure a mensagem "Hello Runner!".
Limpeza
Para ver um caso de uso mais detalhado do uso do Cloud Run for Anthos com o Pub/Sub, ignore a limpeza por enquanto e continue o tutorial sobre o processamento de imagens.
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.
Como excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Como excluir recursos do tutorial
Exclua o serviço do Cloud Run para Anthos 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 for Anthos no console do Google Cloud:
Remova as configurações padrão da gcloud que você adicionou durante a configuração do tutorial:
gcloud config unset run/platform gcloud config unset run/cluster gcloud config unset run/cluster_location
Remova a configuração do projeto:
gcloud config unset project
Exclua outros recursos do Google Cloud criados neste tutorial:
- Exclua o tópico Pub/Sub
myRunTopic
- Exclua a assinatura do Pub/Sub
myRunSubscription
- Exclua a imagem de contêiner denominada
gcr.io/PROJECT_ID/pubsub
do Container Registry. - Exclua a conta de serviço
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
do invocador - Se você criou um cluster para este tutorial, exclua o cluster.
- Exclua o tópico Pub/Sub
A seguir
- Expanda o serviço de amostra implantado neste tutorial para adicionar a funcionalidade de processamento de imagens que modifica as imagens enviadas ao Cloud Storage.
- Saiba mais sobre como os tópicos se encaixam na arquitetura do Pub/Sub e como gerenciar tópicos
- Saiba mais sobre assinaturas do Pub/Sub em Como gerenciar assinaturas.
- Confira arquiteturas de referência, diagramas e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.