Cloud Functions é o serviço de compute serverless event-driven do GCP. Executa código em resposta a eventos sem gerenciar servidores. Você paga apenas pelo tempo de execução.

Equivalente ao AWS Lambda e ao Azure Functions.

Gerações

1ª geração2ª geração
BaseApp EngineCloud Run
Timeout máx9 min60 min
Concorrência1 request/instânciaAté 1000/instância
Tamanho máx100 MB1 GB
TriggersHTTP, Pub/Sub, GCS, FirestoreHTTP, Pub/Sub, Eventarc (CloudEvents)

A 2ª geração é o padrão atual e recomendado. Internamente roda como um container no Cloud Run.

Triggers principais

HTTP

import functions_framework
 
@functions_framework.http
def minha_funcao(request):
    dados = request.get_json()
    return {"status": "ok", "recebido": dados}, 200

Pub/Sub

import base64
import json
import functions_framework
 
@functions_framework.cloud_event
def processar_mensagem(cloud_event):
    dados = base64.b64decode(cloud_event.data["message"]["data"])
    payload = json.loads(dados)
    print(f"Processando: {payload}")

Cloud Storage (via Eventarc)

import functions_framework
 
@functions_framework.cloud_event
def ao_criar_objeto(cloud_event):
    bucket = cloud_event.data["bucket"]
    nome   = cloud_event.data["name"]
    print(f"Novo objeto: gs://{bucket}/{nome}")

Deploy via CLI

# 2ª geração: HTTP trigger
gcloud functions deploy minha-funcao \
  --gen2 \
  --runtime=python311 \
  --region=us-central1 \
  --source=. \
  --entry-point=minha_funcao \
  --trigger-http \
  --allow-unauthenticated
 
# 2ª geração: Pub/Sub trigger
gcloud functions deploy processar-mensagem \
  --gen2 \
  --runtime=python311 \
  --region=us-central1 \
  --source=. \
  --entry-point=processar_mensagem \
  --trigger-topic=meu-topico
 
# 2ª geração: GCS trigger (via Eventarc)
gcloud functions deploy ao-criar-objeto \
  --gen2 \
  --runtime=python311 \
  --region=us-central1 \
  --source=. \
  --entry-point=ao_criar_objeto \
  --trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
  --trigger-event-filters="bucket=meu-bucket"

Variáveis de ambiente e secrets

# Variável de ambiente simples
gcloud functions deploy minha-funcao \
  --set-env-vars PROJETO_ID=meu-projeto,AMBIENTE=prod
 
# Secret do Secret Manager
gcloud functions deploy minha-funcao \
  --set-secrets DB_PASSWORD=projects/meu-projeto/secrets/db-password:latest

Padrões em engenharia de dados

Ingestão event-driven: arquivo chega no GCS, uma Pub/Sub notification é disparada e a Cloud Function valida e enfileira para processamento.

Micro-ETL leve: transformações simples que não justificam um job Dataflow (ex: converter CSV para JSON e salvar no GCS).

Webhook para Pub/Sub: receber eventos de APIs externas (webhooks) e publicar no Pub/Sub para consumo downstream.

Trigger de pipelines: Cloud Function recebe evento e dispara job no Dataflow, DAG no Composer ou job no BigQuery.

Limites e quando NÃO usar

  • Timeout de 60 min (2ª gen): não adequado para jobs longos de ETL
  • Sem estado persistente: use Firestore, GCS ou Memorystore para estado
  • Para pipelines complexos de dados: preferir Dataflow ou Cloud Composer
  • Para containers com dependências pesadas: preferir Cloud Run diretamente

Ver também: gcp | gcp-cloud-storage | gcp-dataflow | gcp-cloud-composer | gcp-boas-praticas | pipeline-de-dados