Pular para conteúdo

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 Created ao criar, 404 quando não existe, 400 para 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)