Transferencia de archivos y EDI

El archivo no llegó, y nadie se dio cuenta hasta el lunes.

La transferencia de archivos es el proceso más antiguo de la empresa y normalmente el menos vigilado: un script de shell en cron, sin reintentos, sin alertas, sin registro de lo que se movió. Dagu conserva los comandos de transferencia y añade a su alrededor la espera de llegada, la verificación, los reintentos y el historial.

Esperar un archivo es un paso, no un bucle de sondeo que tienes que mantener
Reintentos y alertas de fallo en cada transferencia
Se ejecuta dentro de la red, así que los archivos no dan un rodeo por un servicio en la nube
Autoalojamiento gratuito, sin licencia por conexión
01

La integración que nadie moderniza

Archivos de pedidos, facturas, extracciones de nóminas, datos bancarios y feeds de inventario siguen moviéndose como archivos y a hora fija. La transferencia en sí es un problema resuelto. Lo que suele faltar es todo lo demás que la rodea.

  • El script sabe enviar el archivo. No sabe qué hacer cuando el otro extremo está caído
  • El fallo lo descubre una persona aguas abajo, a menudo días después, porque un archivo que falta se parece a un día tranquilo
  • Nadie puede responder qué archivo se movió, cuándo, ni si estaba completo, porque nada lo registró
02

Esperar un archivo es un paso

La mayoría de los planificadores obligan a escribir un bucle de sondeo con sleep y contador, y luego a mantenerlo. Dagu tiene una acción de espera, así que la ventana de llegada se declara en lugar de programarse, y un archivo que nunca aparece hace fallar la ejecución en vez de dejarla colgada.

  • wait.file sondea la aparición, o la desaparición, de una ruta al intervalo que elijas
  • Un tiempo de espera convierte una entrega fallida en una ejecución fallida con alerta, en lugar de una tarea detenida hasta que alguien mire
  • La verificación se ejecuta como paso propio, de modo que un archivo truncado o corrupto detiene la importación en vez de alimentarla
Entrada: esperar, verificar, importar, archivar
# edi-inbound.yaml
schedule: "0 * * * *"
max_active_runs: 1

s3:
  bucket: corp-edi-archive
  region: ap-northeast-1

steps:
  - id: wait_for_delivery
    action: wait.file
    with:
      path: /var/spool/edi/orders.csv
      poll_interval: 30s
    timeout_sec: 1800

  - id: verify
    run: |
      cd /var/spool/edi
      sha256sum -c orders.csv.sha256
    depends: wait_for_delivery

  - id: import
    run: /opt/core/import-orders.sh /var/spool/edi/orders.csv
    depends: verify
    retry_policy:
      limit: 2
      interval_sec: 300

  - id: archive
    action: s3.upload
    with:
      key: edi/inbound/orders.csv
      source: /var/spool/edi/orders.csv
    depends: import

  - id: mark_done
    action: file.move
    with:
      source: /var/spool/edi/orders.csv
      destination: /var/spool/edi/done/orders.csv
      create_dirs: true
    depends: archive

handler_on:
  failure:
    run: /opt/edi/notify-failure.sh

mail_on:
  failure: true
03

El silencio es el modo de fallo

Una transferencia que falla haciendo ruido es un problema pequeño. Una transferencia que falla en silencio se convierte en un proyecto de conciliación. La capa operativa es la parte que merece la pena añadir.

  • retry_policy cubre que el otro extremo sea brevemente inalcanzable, que es la mayoría de los fallos de transferencia
  • mail_on.failure y handler_on.failure hacen que una entrega perdida llegue a alguien en la misma hora
  • max_active_runs: 1 evita que una transferencia lenta se solape con la siguiente programada y envíe el mismo archivo dos veces
04

Ambos extremos siguen dentro de tu perímetro

Que los archivos no puedan salir de la red es lo normal en banca, sanidad y sector público. Un único binario en tu propio servidor llega al socio por SFTP y al sistema central en local, sin servicios de terceros por el camino.

  • sftp.upload y sftp.download transfieren con autenticación por clave y, si hace falta, a través de un host bastión
  • El mismo flujo llega a un sistema local por SSH y a un almacenamiento de objetos para la copia de archivo
  • Nada se retransmite por la nube de un proveedor, así que las cuestiones de residencia de datos y auditoría siguen siendo simples
Salida: extraer, suma de comprobación, enviar
# edi-outbound.yaml
schedule: "30 18 * * 1-5"
max_active_runs: 1

ssh:
  user: edi
  host: sftp.partner.example.com
  key: ~/.ssh/edi_key

steps:
  - id: extract
    run: /opt/core/export-invoices.sh ./outgoing/invoices.csv
    retry_policy:
      limit: 2
      interval_sec: 120

  - id: checksum
    run: |
      cd ./outgoing
      sha256sum invoices.csv > invoices.csv.sha256
    depends: extract

  - id: send_file
    action: sftp.upload
    with:
      source: ./outgoing/invoices.csv
      destination: /inbound/invoices.csv
    depends: checksum
    retry_policy:
      limit: 3
      interval_sec: 60

  - id: send_checksum
    action: sftp.upload
    with:
      source: ./outgoing/invoices.csv.sha256
      destination: /inbound/invoices.csv.sha256
    depends: send_file

handler_on:
  failure:
    run: /opt/edi/notify-failure.sh

mail_on:
  failure: true
05

Guarda la evidencia, no solo el archivo

Después de un incidente, la pregunta rara vez es qué contenía el archivo. Es cuándo llegó, si estaba completo y quién lo volvió a ejecutar.

  • Cada ejecución conserva registros por paso, estado, tiempos y número de reintentos
  • Archivar al almacenamiento de objetos como paso del flujo convierte la retención en una planificación en lugar de una costumbre
  • Las reejecuciones pasan por el mismo camino registrado, así que una recuperación manual es tan visible como la ejecución automática
06

Precio por servidor, no por conexión

Los productos de transferencia gestionada de archivos suelen licenciarse por conexión, por socio o por servidor de transferencia, y por eso la factura crece cada vez que el negocio añade un socio comercial.

  • El autoalojamiento Community es gratuito, con servidores y workers ilimitados
  • El nivel con licencia se cobra por servidor Dagu y añade SSO, separación de roles y registro de auditoría
  • Añadir un socio significa añadir un archivo de flujo, lo que no cambia el número de licencias
07

Cuándo un producto MFT es la mejor respuesta

Dagu planifica y supervisa transferencias. No es una plataforma MFT completa, y hay requisitos que realmente piden una.

  • Amplitud de protocolos: si necesitas AS2, OFTP2 o una conexión certificada a una VAN EDI, usa un producto hecho para eso
  • Portales de autoservicio para socios, rotación de credenciales por socio y acuses de no repudio son funciones de MFT, no de un planificador
  • Los regímenes de cumplimiento que exigen un producto de transferencia certificado no aceptarán un orquestador de propósito general, haga lo que haga técnicamente

FAQ

Practical questions before adopting

¿Dagu sustituye a un producto de transferencia gestionada de archivos?

Para SFTP programado e integración basada en archivos, normalmente sí: ejecuta la transferencia, espera las llegadas, verifica, reintenta, alerta y guarda historial. Para AS2, OFTP2, conectividad certificada a una VAN EDI, portales de autoservicio para socios o acuses de no repudio, no. Esas son funciones de plataforma MFT y un planificador no debería fingir lo contrario.

¿Cómo disparo con la llegada de un archivo en vez de por horario?

Ejecuta el flujo con una planificación corta y ábrelo con un paso wait.file, que sondea la ruta y continúa en cuanto aparece. Dale un tiempo de espera al paso para que una entrega que nunca llega falle y alerte en lugar de esperar para siempre. Una ejecución también puede iniciarse desde fuera mediante un webhook cuando el emisor puede llamar a uno.

¿Qué protocolos se admiten?

SFTP sobre SSH está integrado como sftp.upload y sftp.download, y las transferencias a almacenamiento de objetos están integradas para endpoints compatibles con S3. Todo lo demás se ejecuta como un paso de comando corriente, así que las herramientas existentes para FTPS, rsync o un cliente del proveedor siguen funcionando, envueltas en planificación y supervisión.

¿Cómo se gestionan las credenciales?

La autenticación SSH por clave es la opción por defecto, con soporte de host bastión cuando el socio está detrás de uno. Los secretos se declaran a nivel de flujo y se resuelven desde un proveedor como variables de entorno, un archivo, Vault o un gestor de secretos en la nube, y sus valores se ocultan en los registros de ejecución.

¿Funciona donde no hay acceso a internet?

Sí. Dagu es un binario autocontenido que no requiere base de datos externa ni broker, así que se ejecuta en local y en redes cerradas. La ejecución distribuida usa un coordinador y workers por gRPC dentro de tu propia red.

Next step

Start with one workflow.

Install Dagu, move one script that runs on cron today into YAML, and decide from a real run history.