Google Cloud — Deploy de uma webapp Java no App Engine

Clayton K. N. Passos
codigorefinado
Published in
5 min readMay 7, 2018

Nosso ambiente para teste é composto de uma aplicação web, criada com Java e Maven, tenha-os devidamente instalados e configurados.

Importante: Praticamente todo o texto aqui, foi retirado da documentação oficial, reuni em uma ordem que faz mais sentido para mim ler. Particularmente, acho ruim ler a informação picada em partes, é bom como um guia de consulta rápida, mas para aprendizado é ruim.

App Engine

Escalonamento de instâncias

Durante a execução de um aplicativo, as solicitações recebidas são encaminhadas para uma instância existente ou nova do serviço ou versão apropriada. O tipo de escalonamento de um serviço ou versão controla como as instâncias são criadas. As configurações de escalonamento estão configuradas no arquivo app.yaml. Há dois tipos de escalonamento:

Escalonamento manual

Um serviço com escalonamento manual executa continuamente o mesmo número de ocorrências, independentemente do nível de carga. Isso permite a realização de tarefas como inicializações complexas e a execução de aplicativos que dependem do estado da memória ao longo do tempo.

Escalonamento automático

O escalonamento automático baseia-se na taxa de solicitação, nas latências de resposta e em outras métricas do aplicativo

Como monitorar o uso de recursos

Na página “Instâncias” do console do GCP, você tem visibilidade sobre o desempenho das instâncias. Nela, é possível ver o uso que cada instância faz da memória e da CPU, bem como o tempo de atividade, o número de solicitações e outras estatísticas. Você também pode iniciar manualmente o processo de encerramento de qualquer instância.

Geração de registros

Quando você grava em stdout ou stderr, as entradas aparecem na página Registros no console do GCP.

Comunicação entre serviços

Os serviços podem se comunicar entre si e com aplicativos externos de várias maneiras. A abordagem mais simples é enviar solicitações HTTP a um serviço, incluindo o nome dele no URL: <service-name>.app-id.appspot.com. Se for necessário que a comunicação entre os serviços seja segura, você poderá autorizar solicitações.

Os serviços também podem se comunicar por meio do Google Cloud Pub/Sub. O Pub/Sub transmite mensagens assíncronas e confiáveis de muitos para muitos entre processos, incluindo o App Engine. Esses processos podem ser instâncias individuais de um aplicativo, serviços ou até mesmo aplicativos externos.

Os serviços e aplicativos externos também podem compartilhar dados armazenados em bancos de dados, como o Cloud Datastore, o Cloud SQL ou bancos de dados de terceiros.

Limites

A quantidade de serviços, versões e instâncias (para serviços com escalonamento manual) para cada aplicativo é limitada:

Número máximo de serviços por aplicativo: 5

Número máximo de versões por aplicativo: 5

Número máximo de instâncias por versão com escalonamento manual: 20

Os serviços de back-end, como o usado por um balanceador de carga HTTP externo, podem contabilizar para o limite máximo de versões.

Nem todos os projetos têm os limites acima. À medida que você amplia o uso do Google Cloud Platform, seus limites também podem aumentar proporcionalmente. Se você pretende aumentar significativamente o uso em um futuro próximo, solicite ajustes na página “Cotas” do App Engine no console do GCP.

Observação: o Google recomenda o uso do protocolo HTTPS para enviar solicitações ao aplicativo. O Google não emite certificados SSL para domínios com dois caracteres curinga hospedados em appspot.com. Portanto, com o protocolo HTTPS, é necessário usar a string "-dot-", em vez de ".", para separar subdomínios, como demonstrado nos exemplos abaixo.

Vamos testar

Pra simplificar nosso teste, faça o download do app, que utiliza maven, de amostra e acesse o diretório dele:

Clone o repositório do app de exemplo Hello World na máquina local:

git clone https://github.com/GoogleCloudPlatform/getting-started-javacd getting-started-java/helloworld-servlet

Apache Maven é uma ferramenta de automação da criação para Java. Ela é capaz de criar arquivos WAR para implantação no App Engine. A equipe do App Engine fornece um plug-in e arquétipos do Maven com a finalidade de agilizar o desenvolvimento.

Observação: o plug-in App Engine Maven não oferece suporte a projetos do Enterprise Application Archive (EAR).

Executar o aplicativo Hello World na máquina local

Para executar o aplicativo Hello World no seu computador:

Inicie o servidor da Web local Eclipse Jetty usando o plug-in do Jetty Maven:

mvn jetty:run-exploded

ou

mvn jetty:run

No navegador da Web, digite este endereço:

http://localhost:8080

Como implantar e executar o Hello World no App Engine

Para implantar seu app no ambiente flexível do App Engine:

Instale o componente app-engine-java do Cloud SDK:

gcloud components install app-engine-java
gcloud components update
gcloud auth login

Caso queira trocar a conta do google cloud

cloud config set account ACCOUNT

Verifique se o projeto padrão está correto:

gcloud config list

Implante o app Hello World. Basta executar os seguintes comandos do diretório helloworld:

gcloud config set project ID_DO_SEU_PROJETO
mvn appengine:deploy

Inicie o navegador e veja o aplicativo em http://YOUR_PROJECT_ID.appspot.com, basta executar o seguinte comando:

gcloud app browse

Pronto, sua aplicação foi publicada, e está no ar.

Abaixo, vou descrever alguns recursos interessantes que você pode

Para inicializar o Google Cloud SDK, execute:

gcloud init

Como habilitar a compactação Gzip

O gerenciador gzip é compactado com o Jetty, mas não é ativado por padrão. Para ativar esse módulo, defina a variável de ambiente JETTY_MODULES_ENABLE=gzip no arquivo app.yaml:

env_variables:
JETTY_MODULES_ENABLE: 'gzip'

Melhorias no Stackdriver Logging (Beta)

Ao executar o ambiente flexível do App Engine, você pode configurar o Java Util Logging para enviar registros ao Google Stackdriver Logging. Para isso, basta definir a variável de ambiente JETTY_ARGS. Por exemplo:

env_variables:
JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties

Você precisa fornecer um arquivo logging.properties que configura um LoggingHandler da seguinte maneira:

handlers=com.google.cloud.logging.LoggingHandler# Optional configuration
.level=INFO
com.google.cloud.logging.LoggingHandler.level=FINE
com.google.cloud.logging.LoggingHandler.log=gae_app.log
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s

Teste local

Ao fazer testes no seu ambiente local, você pode usar serviços simulados de nuvem do Google, em vez de serviços remotos. Use os seguintes emuladores:

Use o comando gcloud para iniciá-los antes de executar seu app:

gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start

app.yaml

O arquivo app.yaml contém a descrição da configuração de implantação de um aplicativo.

O tempo de execução usado pelo app é especificado em app.yaml, que também define env: flex, estabelecendo que o app usa o ambiente flexível.

Se você vier a utilizar qualquer um dos arquivos de configuração opcionais (index.yaml, cron.yaml e dispatch.yaml), implante-os separadamente com o comando gcloud. Por exemplo:

gcloud app deploy cron.yaml

Limpeza

Exclua seu projeto do GCP para não ser cobrado pelos recursos usados nele.

Saiba mais sobre o ambiente flexível do App Engine

Eis aqui alguns tópicos para você continuar aprendendo sobre o App Engine.

--

--