O Google Cloud Run recebe uma imagem de contêiner e a executa sem que você precise tocar em um único servidor. Ele escala para zero quando ocioso e escala automaticamente sob carga. Se sua carga de trabalho é stateless e conteinerizada, o Cloud Run vale a pena ser avaliado com seriedade.

O que é o Google Cloud Run?

O Google Cloud Run é uma plataforma de computação totalmente gerenciada, construída sobre o Knative. Você fornece um contêiner, define alguns parâmetros de configuração, e ele cuida de todo o resto: provisionamento, escalonamento, balanceamento de carga e encerramento de TLS. A cobrança é feita por cada 100ms de tempo real de processamento de requisições, portanto serviços ociosos não geram custo algum.

Por que escolher o Google Cloud Run?

  • Sem infraestrutura para gerenciar. Você escreve código e constrói contêineres; o Cloud Run cuida do restante.
  • Escala automaticamente de zero a milhares de instâncias concorrentes com base no tráfego.
  • Pague apenas pelos recursos consumidos durante o processamento ativo de requisições.
  • Aceita qualquer linguagem ou binário que rode dentro de um contêiner.

Primeiros Passos com o Google Cloud Run

Pré-requisitos

  • Uma conta Google Cloud com faturamento habilitado.
  • Docker instalado localmente.
  • O CLI gcloud instalado e autenticado.

Etapa 1: Escreva sua Aplicação

Comece escrevendo uma aplicação simples. Para fins de demonstração, usaremos um app básico em Node.js:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello, Google Cloud Run!');
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log(`App listening on port ${port}`);
});

Etapa 2: Conteinerize sua Aplicação

Crie um Dockerfile para sua aplicação:

FROM node:14

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install

COPY . .

ENV PORT 8080
EXPOSE 8080

CMD [ "node", "index.js" ]

Etapa 3: Construa e Teste seu Contêiner Localmente

Construa sua imagem Docker:

docker build -t gcr.io/your-project-id/your-app .

Execute seu contêiner localmente para testar:

docker run -p 8080:8080 gcr.io/your-project-id/your-app

Acesse http://localhost:8080 para verificar se está funcionando.

Etapa 4: Implante no Google Cloud Run

Autentique-se no Google Cloud:

gcloud auth login

Defina o ID do seu projeto:

gcloud config set project your-project-id

Envie sua imagem Docker para o Google Container Registry:

docker push gcr.io/your-project-id/your-app

Implante seu contêiner no Cloud Run:

gcloud run deploy your-app \
  --image gcr.io/your-project-id/your-app \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

Etapa 5: Teste sua Aplicação Implantada

Após a implantação, o Google Cloud Run fornecerá uma URL para o seu serviço. Acesse a URL para ver sua aplicação em produção.

Dicas para Otimizar seu Serviço no Cloud Run

  • Use imagens base mínimas. Imagens menores iniciam mais rápido e reduzem sua superfície de ataque.
  • Ajuste a configuração de concorrência. Por padrão, cada instância lida com 80 requisições simultâneas, mas cargas de trabalho vinculadas à CPU devem usar um valor menor.
  • Defina limites explícitos de CPU e memória para evitar picos inesperados de cobrança.

Integração com Outros Serviços do Google Cloud

O Cloud Run se conecta facilmente ao restante do GCP:

  • Cloud SQL para bancos de dados relacionais gerenciados, usando o sidecar Cloud SQL Auth Proxy.
  • Cloud Pub/Sub para invocação orientada a eventos: o Pub/Sub envia mensagens para o endpoint do seu Cloud Run.
  • Cloud Storage para armazenamento de objetos, acessado via biblioteca cliente padrão.

Conclusão

O Cloud Run elimina a maior parte do overhead operacional associado à execução de serviços conteinerizados. A principal restrição é a statelessness: instâncias podem ser criadas ou destruídas a qualquer momento, portanto qualquer estado precisa existir fora do contêiner, em um banco de dados ou cache. Dentro dessa restrição, é um destino de implantação prático e econômico.

Leitura Adicional


Samuel Fajreldines é especialista nos ecossistemas JavaScript e TypeScript, expert em DevOps e Arquitetura Serverless, e proficiente em frameworks PHP.