Temporal IA: Producción CI/CD y Despliegue

2026.03.14
Technology
753 Words
Temporal IA: Producción CI/CD y Despliegue

Parte 3 de 3. Lee la Parte 1 para la arquitectura y la Parte 2 para el deployment.

Repaso rápido: el servidor de Temporal gestiona el estado mediante cuatro servicios (Frontend, History, Matching, Worker) mientras los workers ejecutan activities. Temporal persiste cada transición en PostgreSQL y la indexa en Elasticsearch. he ejecutado este stack por meses en pipelines de IA y estos patrones separan un despliegue confiable de uno problemático. Visita Conoce al Ingeniero.

Paso 5: Configurar Persistencia y Retención

Temporal almacena el historial de workflows en PostgreSQL para siempre por defecto. Treinta días de retención cubren la mayoría de los casos. Configura Elasticsearch Index Lifecycle Management para rotar índices a los 30 días y eliminarlos a los 90. Consulta la documentación de PostgreSQL para estrategias de backup y la guía de Elasticsearch para políticas de ciclo de vida de índices.

Terminal window
kubectl exec -it -n temporal deploy/temporal-server -- tctl workflow list --retention 30

Paso 6: Implementar el Saga Pattern para IA

El saga pattern garantiza consistencia de datos en workflows multi-paso. Si un paso falla, cada paso anterior se compensa. El worker de la Parte 2 lo demuestra: si la summarización falla, el compensation handler revierte el texto generado.

Casos de Uso en IA

  • Pipelines Multi-Modelo: Generar con GPT-4o, traducir con Llama 3, resumir con Claude, y compensar todo si algún paso falla.
  • Human-in-the-Loop: Esperar aprobación humana post-generación, compensar si es rechazada.
  • Actualizaciones Multi-Base de Datos: Actualizar tres bases de datos, revertir todas si una falla.
  • Pago + Contenido: Cobrar al cliente, generar contenido, reversar el pago si la generación falla.

Paso 7: Configuración de Seguridad

Producción requiere mTLS entre servidor y workers. Usa cert-manager u OpenSSL, monta los certificados como Kubernetes secrets y configura Temporal con variables de entorno TLS. Consulta la documentación de Temporal para configuración TLS y los docs de Kubernetes para integración con cert-manager.

- name: TLS_ENABLED
value: "true"
- name: TLS_CERT_PATH
value: /etc/tls/tls.crt
- name: TLS_KEY_PATH
value: /etc/tls/tls.key

Crea namespaces de Temporal separados para diferentes equipos usando tctl:

Terminal window
kubectl exec -it -n temporal deploy/temporal-server -- tctl namespace register --namespace ai-pipelines --owner eduardo --retention 30

Restringe el acceso de red a los puertos de Temporal con NetworkPolicies de Kubernetes, permitiendo ingress solo desde los pods de workers. Para más seguridad, consulta Seguridad en Automatización de IA:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: temporal-network-policy
namespace: temporal
spec:
podSelector:
matchLabels:
app: temporal-server
ingress:
- from:
- podSelector:
matchLabels:
app: temporal-ai-worker
ports:
- port: 7233
- port: 7234
- port: 7235

Paso 8: Monitoreo con Prometheus

Temporal expone métricas de Prometheus en el puerto 7233 por defecto. Consulta la documentación de Prometheus para configuración de scraping. Apunta al pod del servidor con un job de scraping:

- job_name: 'temporal'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
action: keep
regex: temporal-server
- target_label: __address__
replacement: temporal-server.temporal.svc.cluster.local:7233

Vigila cuatro métricas clave: temporal_workflow_completed, temporal_activity_failed, temporal_task_queue_depth, temporal_worker_pollers. Alerta sobre workflows fallidos y picos de profundidad de cola.

Paso 9: Patrón Híbrido n8n → Temporal

Ejecuta el editor visual de n8n junto con el motor de confiabilidad de Temporal. El handoff toma tres pasos: n8n activa un workflow de Temporal mediante un webhook HTTP (un proxy pequeño de Flask o FastAPI funciona si es necesario), Temporal ejecuta el workflow de IA con garantías de saga, luego Temporal señaliza a n8n al completar. Los equipos no técnicos obtienen activaciones confiables mediante n8n mientras los ingenieros mantienen la lógica core en Temporal.

{
"nodes": [
{
"type": "n8n-nodes-base.httpRequest",
"name": "Trigger Temporal Workflow",
"parameters": {
"url": "http://temporal-proxy:8080/signal",
"method": "POST",
"body": { "prompt": "{{$json.prompt}}" }
}
},
{
"type": "n8n-nodes-base.wait",
"name": "Wait for Completion",
"parameters": { "amount": 5, "unit": "minutes" }
},
{
"type": "n8n-nodes-base.httpRequest",
"name": "Check Workflow Status",
"parameters": {
"url": "http://temporal-server:7233/namespaces/default/workflows/{{$json.workflowId}}"
}
}
]
}

CI/CD para Workers de Temporal

Configura un pipeline de GitHub Actions que construye, testea y despliega workers en cada push a main. Instala dependencias de Python, ejecuta pytest, construye una imagen Docker etiquetada con el SHA del commit, la sube a tu registry y despliega el manifest actualizado en Kubernetes.

name: Deploy Temporal Worker
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
run: pytest tests/
- name: Build and push image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: your-registry/temporal-ai-worker:${{ github.sha }}
- name: Deploy to Kubernetes
uses: azure/k8s-deploy@v4
with:
namespace: temporal
manifests: temporal-worker.yaml
images: your-registry/temporal-ai-worker:${{ github.sha }}

Acceder a la Web UI de Temporal

Temporal incluye una web UI para gestión de workflows. Expónla mediante un Ingress con TLS vía cert-manager:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: temporal-web
namespace: temporal
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- temporal.yourdomain.com
secretName: temporal-tls
rules:
- host: temporal.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: temporal-server
port:
number: 7233

Accede a https://temporal.yourdomain.com para ver workflows en ejecución, buscar en el historial y terminar ejecuciones atascadas.

Preguntas Frecuentes

¿Cómo migro las bases de datos de Temporal? Detén el servidor, haz backup de PostgreSQL, restaura en la nueva instancia, actualiza conexiones y reinicia. Prueba siempre en staging primero.

¿Puedo ejecutar Temporal sin Elasticsearch? Sí, pero pierdes visibilidad searchable. Sin él solo puedes listar por ID. Para producción con cientos de ejecuciones diarias, Elasticsearch es esencial.

¿Cuál es la diferencia entre un workflow y una activity? Un workflow orquesta el proceso: secuencia de pasos, manejo de errores. Una activity es una unidad de trabajo: llamar una API, procesar datos. Las activities tienen tu lógica de negocio.

Próximos Pasos

  1. Despliega los manifests en tu cluster de Kubernetes con kubectl apply -f .
  2. Construye y sube la imagen del worker de Python a tu container registry
  3. Configura monitoreo con Prometheus para tasas de éxito y latencia
  4. Configura alertas para workflows fallidos y alta profundidad de cola
  5. Revisa la guía n8n vs Temporal para elegir la herramienta adecuada

Para lectura adicional, consulta la comparativa n8n vs Temporal, Pipelines de IA Event-Driven y Kubernetes Security Best Practices.

# Temporal # workflows-ia # Kubernetes # orquestacion-workflows # python