Transfert de fichiers et EDI

Le fichier n'est pas arrivé, et personne ne l'a vu avant lundi.

Le transfert de fichiers est le plus vieux traitement de l'entreprise et généralement le moins surveillé : un script shell dans cron, sans relance, sans alerte, sans trace de ce qui a circulé. Dagu conserve les commandes de transfert et ajoute autour d'elles l'attente d'arrivée, la vérification, les relances et l'historique.

Attendre un fichier est une étape, pas une boucle de scrutation à maintenir
Relances et alertes d'échec sur chaque transfert
S'exécute dans le réseau, les fichiers ne font aucun détour par un service cloud
Auto-hébergement gratuit, sans licence par connexion
01

L'intégration que personne ne modernise

Fichiers de commandes, factures, extractions de paie, données bancaires et flux de stock circulent encore sous forme de fichiers, à heure fixe. Le transfert lui-même est un problème résolu. Ce qui manque, c'est presque toujours tout ce qui l'entoure.

  • Le script sait envoyer le fichier. Il ne sait pas quoi faire quand l'autre extrémité est indisponible
  • L'échec est découvert par une personne en aval, souvent des jours plus tard, car un fichier manquant ressemble à une journée calme
  • Personne ne peut dire quel fichier a circulé, quand, ni s'il était complet, faute d'enregistrement
02

Attendre un fichier est une étape

La plupart des ordonnanceurs obligent à écrire une boucle de scrutation avec un sleep et un compteur, puis à la maintenir. Dagu propose une action d'attente : la fenêtre d'arrivée se déclare au lieu de se coder, et un fichier qui n'arrive jamais fait échouer l'exécution au lieu de la bloquer.

  • wait.file scrute l'apparition, ou la disparition, d'un chemin à l'intervalle de votre choix
  • Un délai d'expiration transforme une livraison manquée en échec avec alerte, plutôt qu'en tâche bloquée jusqu'à ce que quelqu'un regarde
  • La vérification est une étape à part entière : un fichier tronqué ou corrompu arrête l'import au lieu de l'alimenter
Entrant : attendre, vérifier, importer, archiver
# 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

Le silence est le mode de défaillance

Un transfert qui échoue bruyamment est un petit problème. Un transfert qui échoue en silence devient un chantier de rapprochement. C'est la couche d'exploitation qui vaut la peine d'être ajoutée.

  • retry_policy couvre l'indisponibilité brève de l'autre extrémité, qui représente l'essentiel des échecs de transfert
  • mail_on.failure et handler_on.failure font remonter une livraison manquée à quelqu'un dans l'heure
  • max_active_runs: 1 empêche un transfert lent de chevaucher le suivant et d'envoyer deux fois le même fichier
04

Les deux extrémités restent dans votre périmètre

Des fichiers qui ne peuvent pas sortir du réseau, c'est le cas normal dans la finance, la santé et le secteur public. Un binaire unique sur votre propre hôte atteint le partenaire en SFTP et le système central en local, sans service tiers sur le chemin.

  • sftp.upload et sftp.download transfèrent avec authentification par clé et, au besoin, via un hôte rebond
  • Le même workflow atteint un système sur site en SSH et un stockage objet pour la copie d'archive
  • Rien ne transite par le cloud d'un éditeur : les questions de résidence des données et d'audit restent simples
Sortant : extraire, calculer l'empreinte, envoyer
# 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

Conservez la preuve, pas seulement le fichier

Après un incident, la question porte rarement sur le contenu du fichier. Elle porte sur l'heure d'arrivée, l'intégrité, et sur qui a relancé le traitement.

  • Chaque exécution conserve journaux par étape, statut, durées et nombre de relances
  • Archiver vers un stockage objet comme étape du workflow transforme la rétention en planification plutôt qu'en habitude
  • Les relances empruntent le même chemin enregistré : une reprise manuelle est aussi visible qu'une exécution automatique
06

Facturé par serveur, pas par connexion

Les produits de transfert de fichiers managé se licencient généralement par connexion, par partenaire ou par serveur de transfert, d'où une facture qui croît à chaque nouveau partenaire commercial.

  • L'auto-hébergement Community est gratuit, avec serveurs et workers illimités
  • L'offre sous licence se facture par serveur Dagu et ajoute SSO, séparation des rôles et journal d'audit
  • Ajouter un partenaire revient à ajouter un fichier de workflow, sans changer le nombre de licences
07

Quand un produit MFT est la meilleure réponse

Dagu planifie et supervise des transferts. Ce n'est pas une plateforme MFT complète, et certains besoins en exigent réellement une.

  • Étendue des protocoles : pour AS2, OFTP2 ou une connexion certifiée à un VAN EDI, utilisez un produit conçu pour cela
  • Portails en libre-service pour les partenaires, rotation des identifiants par partenaire et accusés de non-répudiation sont des fonctions MFT, pas des fonctions d'ordonnanceur
  • Un régime de conformité qui impose un produit de transfert certifié n'acceptera pas un orchestrateur généraliste, quelles que soient ses capacités techniques

FAQ

Practical questions before adopting

Dagu remplace-t-il un produit de transfert de fichiers managé ?

Pour du SFTP planifié et de l'intégration par fichiers, généralement oui : il exécute le transfert, attend les arrivées, vérifie, relance, alerte et conserve l'historique. Pour AS2, OFTP2, une connexion certifiée à un VAN EDI, des portails partenaires en libre-service ou des accusés de non-répudiation, non. Ce sont des fonctions de plateforme MFT et un ordonnanceur ne devrait pas prétendre le contraire.

Comment déclencher à l'arrivée d'un fichier plutôt qu'à heure fixe ?

Exécutez le workflow à intervalle court et commencez-le par une étape wait.file, qui scrute le chemin et poursuit dès son apparition. Donnez un délai d'expiration à l'étape pour qu'une livraison qui n'arrive jamais échoue et alerte au lieu d'attendre indéfiniment. Une exécution peut aussi être déclenchée de l'extérieur par webhook si l'émetteur sait en appeler un.

Quels protocoles sont pris en charge ?

SFTP sur SSH est intégré via sftp.upload et sftp.download, et les transferts vers un stockage objet le sont pour les points de terminaison compatibles S3. Tout le reste s'exécute comme une étape de commande ordinaire : vos outils existants pour FTPS, rsync ou un client éditeur continuent de fonctionner, enveloppés de planification et de supervision.

Comment sont gérés les identifiants ?

L'authentification SSH par clé est le mode par défaut, avec prise en charge d'un hôte rebond lorsque le partenaire se trouve derrière. Les secrets se déclarent au niveau du workflow et se résolvent depuis un fournisseur : variables d'environnement, fichier, Vault ou gestionnaire de secrets cloud ; leurs valeurs sont masquées dans les journaux d'exécution.

Cela fonctionne-t-il sans accès internet ?

Oui. Dagu est un binaire autonome qui n'exige ni base de données externe ni broker, il fonctionne donc sur site et en réseau fermé. L'exécution distribuée utilise un coordinateur et des workers en gRPC à l'intérieur de votre propre réseau.

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.