Google Cloud: App Engine e serviços¶
Esta página trata do Google Cloud Platform (GCP) a partir do App Engine, a plataforma de aplicações (PaaS) do Google. Os conceitos gerais de nuvem (modelos de serviço, regiões, IAM, custos) estão em Nuvem, com a tabela de equivalência entre provedores (equivalência); aqui ficam o que é específico do Google.
Definição: Google App Engine (GAE)
App Engine é uma plataforma PaaS para hospedar aplicações web e APIs sem gerenciar servidores: você envia o código e o Google cuida de infraestrutura, balanceamento, autoscaling e monitoração, cobrando pelo uso. Suporta Java, Python, Go, Node.js, PHP, Ruby e outros.
Ambientes padrão e flexível¶
| Standard | Flexible | |
|---|---|---|
| Execução | Dentro de uma sandbox com runtimes gerenciados | Contêineres Docker em VMs do Compute Engine |
| Escala | Muito rápida, inclusive a zero | Mais lenta, mínimo de uma instância |
| Restrições | Limites de sistema de arquivos, threads, bibliotecas e tempo de requisição | Quase nenhuma: qualquer biblioteca/binário |
| Quando usar | APIs e sites de tráfego variável, custo baixo | Necessidade de dependências nativas ou ambiente customizado |
Conceitos: uma aplicação (projeto) tem serviços, cada serviço tem versões e as versões têm instâncias; é possível dividir tráfego entre versões (canary,
rollback). O comportamento é descrito em um arquivo de configuração (app.yaml ou appengine-web.xml: runtime, escala, variáveis de ambiente). Há cotas e limites
gratuitos (armazenamento, operações por dia, tráfego); passou do limite, o recurso é bloqueado ou cobrado. O console mostra instâncias, logs, tráfego e cotas.
Hoje: o Google recomenda Cloud Run (contêineres sem servidor, que escalam a zero) e Cloud Functions para novos projetos; o App Engine continua existindo, com runtimes modernos (Java 17/21, Python, Node, Go), e a sandbox antiga do Java 8 deixou de ser a referência.
Serviços REST em Java (Spring Boot) no App Engine¶
- O livro usa Spring Boot (Maven) com
@RestController,@GetMapping/@PostMapping,@PathVariable,ResponseEntity(Spring). O App Engine usava Jetty, então se excluía o Tomcat das dependências; atualmente basta o runtime Java moderno ou um contêiner no Cloud Run. - Fluxo: desenvolver e depurar localmente (servidor de desenvolvimento), testar com Postman (ambientes por URL: local x nuvem), publicar com
gcloud app deploy(Google Cloud SDK/gcloud) ou pelo plugin da IDE. - Códigos HTTP corretos:
201 Createdao criar,404quando não existe,400para entrada inválida (Backend). - Logs: use SLF4J/
java.util.logging; as mensagens vão para o Cloud Logging (antes, "Stackdriver Logging"), com filtro por severidade, serviço e versão.
Armazenamento de dados¶
- Cloud Datastore (hoje Firestore em modo Datastore): banco NoSQL de documentos/entidades, sem servidor, com transações atômicas, alta disponibilidade e escala automática.
Modelo: entidades com propriedades e chaves; consultas indexadas (índices compostos declarados em
index.yaml, que o emulador local gera); ordenação, filtros e paginação por cursor. Não é relacional (sem joins): modele para as consultas (NoSQL). - Cloud SQL: MySQL/PostgreSQL/SQL Server gerenciados (pago); Cloud Storage para objetos; Memorystore para cache.
- Memcache (JCache) no App Engine: cache em memória compartilhado entre instâncias, útil, por exemplo, para guardar usuários autenticados e evitar consultas repetidas ao banco; hoje, Memorystore (Redis). Atenção: cache é volátil e pode desaparecer, então o sistema deve funcionar sem ele.
Segurança¶
- HTTP Basic Authentication: o cliente envia
Authorization: Basic base64(usuario:senha); simples, só aceitável com HTTPS, e a senha trafega em cada requisição. Com Spring Security, usuários e papéis (ROLE_ADMIN,ROLE_USER) ficam em um repositório (Datastore) e as permissões são controladas por anotações (@PreAuthorize/@Secured) (Segurança). Guarde senhas com hash forte (BCrypt), nunca em texto. - OAuth 2.0: substitui o envio da senha por tokens de acesso com expiração e escopos; o serviço valida o token (JWT ou introspecção). Veja os grant types, JWT e OIDC em Segurança; no GCP há Identity Platform/Firebase Auth e IAM para acesso entre serviços.
- Segredos e chaves: Secret Manager, não no repositório.
Notificações, tarefas agendadas e integração¶
- Firebase Cloud Messaging (FCM): serviço do Google para enviar mensagens push a apps Android, iOS e Web. O app móvel se registra e envia o token do dispositivo ao seu serviço, que guarda o token (por usuário) e chama a API do FCM para entregar a notificação; o servidor nunca fala direto com o aparelho (Angular e Firebase, Flutter).
- Tarefas agendadas (cron): o App Engine chama uma URL do seu serviço em horários definidos (
cron.yaml); o serviço agendado executa e é acompanhado no console. Hoje: Cloud Scheduler (agendamento) + Cloud Tasks (filas de tarefas assíncronas) + Pub/Sub (mensageria) (EDA). Cuidado: a tarefa agendada deve ser idempotente (pode ser chamada duas vezes) e terminar dentro do limite de tempo.
Mapa rápido: App Engine e o resto do GCP¶
| Necessidade | Serviço do Google Cloud |
|---|---|
| Aplicação web/API gerenciada | App Engine (standard/flexible) |
| Contêineres sem servidor | Cloud Run |
| Funções por evento | Cloud Functions |
| Kubernetes gerenciado | GKE |
| NoSQL de documentos | Firestore/Datastore, Bigtable (colunas) |
| SQL gerenciado | Cloud SQL, Spanner (global) |
| Objetos / cache | Cloud Storage / Memorystore |
| Mensageria / agendamento | Pub/Sub, Cloud Tasks, Cloud Scheduler |
| Logs, métricas e traces | Cloud Logging / Monitoring / Trace |
| Push móvel | Firebase Cloud Messaging |
Para responder em entrevista¶
| Pergunta | Ideias para a resposta |
|---|---|
| "O que é o App Engine?" | PaaS do Google: sobe o código e a plataforma cuida de infraestrutura e autoscaling; ambientes standard (sandbox, escala a zero) e flexible (contêineres) |
| "App Engine x Cloud Run x GKE?" | PaaS pronto, contêineres sem servidor, Kubernetes completo: do mais gerenciado ao mais controle |
| "Quando usar Datastore/Firestore?" | Dados de documentos/entidades com consultas simples e escala automática; sem joins, modele para as consultas |
| "Como proteger uma API simples?" | HTTPS + token (OAuth2/JWT), papéis, segredos no gerenciador de segredos; evitar Basic sem TLS |
| "Como enviar notificações push?" | FCM: o app registra o token, o servidor guarda e dispara pela API |
| "Quais os riscos de um PaaS?" | Limites da sandbox, lock-in do provedor, custos variáveis por uso (Nuvem) |