Temporal IA: Producción CI/CD y Despliegue
Tabla de contenidos
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.
kubectl exec -it -n temporal deploy/temporal-server -- tctl workflow list --retention 30Paso 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.keyCrea namespaces de Temporal separados para diferentes equipos usando tctl:
kubectl exec -it -n temporal deploy/temporal-server -- tctl namespace register --namespace ai-pipelines --owner eduardo --retention 30Restringe 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/v1kind: NetworkPolicymetadata: name: temporal-network-policy namespace: temporalspec: podSelector: matchLabels: app: temporal-server ingress: - from: - podSelector: matchLabels: app: temporal-ai-worker ports: - port: 7233 - port: 7234 - port: 7235Paso 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:7233Vigila 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 Workeron: 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/v1kind: Ingressmetadata: 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: 7233Accede 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
- Despliega los manifests en tu cluster de Kubernetes con
kubectl apply -f . - Construye y sube la imagen del worker de Python a tu container registry
- Configura monitoreo con Prometheus para tasas de éxito y latencia
- Configura alertas para workflows fallidos y alta profundidad de cola
- 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.