Este tutorial mostra como lidar com sessões no Cloud Run.
Muitos aplicativos precisam gerenciar sessões de autenticação e preferências do usuário. O framework Jetty vem com uma implementação baseada em memória para executar esta função. No entanto, essa implementação não é adequada para um aplicativo que pode ser veiculado de várias instâncias, porque a sessão gravada em uma instância pode ser diferente nas outras. Este tutorial mostra como lidar com sessões no Cloud Run.
Objetivos
- Gravar o aplicativo.
- Executar o aplicativo localmente.
- Implantar o aplicativo no Cloud Run.
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.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
- 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.
-
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.
-
Enable the Firestore API.
-
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.
-
Enable the Firestore API.
-
No Console do Google Cloud, abra o app no Cloud Shell.
O Cloud Shell oferece acesso por linha de comando aos seus recursos de nuvem diretamente no navegador. Abra o Cloud Shell no navegador e clique em Continuar para fazer o download do código de amostra e carregá-lo no diretório de aplicativos.
-
No Cloud Shell, configure a CLI
gcloud
para usar seu novo projeto do Google Cloud:# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
-
Atualize o Maven para usar o Java 11 por padrão:
Quando solicitado, digite o número para selecionar Java 11. Anote o caminho listado para essa versão.sudo update-alternatives --config java
- Exporte o caminho que você copiou na etapa anterior como uma variável de ambiente:
export JAVA_HOME=java-11-path
O app da Web
Esse aplicativo exibe saudações em idiomas diferentes para cada usuário. Usuários recorrentes são sempre recebidos no mesmo idioma.
Para que o app possa armazenar as preferências de um usuário, você precisa de uma maneira de armazenar informações sobre o usuário atual em uma sessão. Este aplicativo de exemplo usa um WebFilter
para recuperar e atualizar dados da sessão no Firestore.
O diagrama a seguir ilustra como o Firestore lida com sessões para o aplicativo Cloud Run.
O HttpServletRequest
usa um cookie para armazenar um ID exclusivo para a sessão local, que corresponde a um documento no Firestore com os detalhes da sessão.
Como excluir sessões
O Firestore não exclui sessões antigas ou expiradas. É possível excluir dados da sessão no Console do Google Cloud ou implementar uma estratégia de exclusão automática. Se você usar soluções de armazenamento para sessões como Memcache ou Redis, as sessões expiradas serão excluídas automaticamente.
Como executar no local
Inicie o servidor HTTP:
mvn jetty:run
Veja seu app no navegador da Web:
Cloud Shell
Na barra de ferramentas do Cloud Shell, clique em Visualização da Web e selecione Visualizar na porta 8080.
Máquina local
No navegador, acesse
http://localhost:8080
Você verá uma das cinco saudações: "Hello World", "Hallo Welt", "Hola mundo", "Salut le Monde" ou "Ciao Mondo." O idioma será alterado se você abrir a página em um navegador diferente ou no modo de navegação anônima. Veja e edite os dados da sessão no Console do Google Cloud.
Para interromper o servidor HTTP, pressione
Control+C
na janela do terminal.
Como implantar e executar no Cloud Run
Você pode usar o Cloud Run para criar e implantar um aplicativo que seja executado de forma confiável sob carga pesada e com grandes quantidades de dados.
Na janela do seu terminal, crie e implante uma imagem do seu código no Google Container Registry (GCR) com o plug-in Maven do Jib.
mvn clean package jib:build
Implante o app no Cloud Run:
gcloud beta run deploy session-handling --image gcr.io/MY_PROJECT/session-handling
--platform managed --region us-central1 --memory 512MSubstitua
MY_PROJECT
pelo ID do projeto Cloud que você criou. Visite o URL retornado por este comando para ver como os dados da sessão persistem entre o carregamento da página.
Como depurar o aplicativo
Se você não conseguir se conectar ao seu aplicativo Cloud Run, verifique o seguinte:
- Verifique se os comandos de implantação
gcloud
foram concluídos com êxito e não geraram erros. Se houver erros (por exemplo,message=Build failed
), corrija-os e tente implantar o aplicativo Cloud Run novamente. No Console do Cloud, acesse a página Explorador de registros.
Acessar a página Explorador de registros
Na lista suspensa Recursos selecionados recentemente, clique em Aplicativo Cloud Run e, em seguida, clique em Todos os module_id. Você verá uma lista de solicitações de quando visitou seu aplicativo. Caso contrário, verifique se você selecionou Todos os module_id na lista suspensa. Se você vir mensagens de erro impressas no Console do Cloud, verifique se o código do aplicativo corresponde ao código na seção sobre como gravar o app da Web.
Verifique se a API Firestore está ativada.
Limpar
Exclua 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.
Excluir a instância do Cloud Run
Exclua o serviço do Cloud Run.
- No Console do Cloud, acesse a página Serviços do Cloud Run.
- Selecione o serviço que você quer excluir.
- Clique em Excluir delete para excluir o serviço.
A seguir
- Veja outros tutoriais do Cloud Functions.
- Teste o Cloud Run, que permite executar contêineres sem estado em um ambiente totalmente gerenciado ou em seu próprio cluster do Google Kubernetes Engine.