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ção | 2ª geração | |
|---|---|---|
| Base | App Engine | Cloud Run |
| Timeout máx | 9 min | 60 min |
| Concorrência | 1 request/instância | Até 1000/instância |
| Tamanho máx | 100 MB | 1 GB |
| Triggers | HTTP, Pub/Sub, GCS, Firestore | HTTP, 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}, 200Pub/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:latestPadrõ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