AWS vient de lancer l'une des fonctionnalités de stockage les plus attendues : S3 Files. S3 Files place une interface de système de fichiers compatible EFS directement devant vos buckets S3. Quand j'ai entendu parler de cette fonctionnalité (dans le cadre du programme Community Builders) j'ai tout de suite pensé au cas d'usage du SFTP sur AWS.
Si vous payez actuellement AWS Transfer Family pour donner à vos partenaires un accès SFTP à S3, lisez attentivement ce qui suit. Il existe désormais une alternative nettement moins chère et plus puissante.
Qu'est-ce que S3 Files ?
S3 Files crée un système de fichiers NFS haute performance adossé à un bucket S3. Voyez-le comme une couche EFS qui lit et écrit directement dans les objets S3, avec une synchronisation bidirectionnelle automatique. Tout fichier écrit via le système de fichiers apparaît comme un objet S3, et tout objet uploadé dans S3 devient visible via le système de fichiers.
Les propriétés clés :
- Latence sub-milliseconde pour les opérations fichier
- Synchronisation automatique entre le système de fichiers et le bucket S3 (via EventBridge sous le capot)
- Montable sur ECS Fargate, ECS Managed Instances, EKS et EC2
- Protocole NFS standard — pas de client spécial nécessaire côté compute (ECS/EKS le gèrent nativement)
- Points d'accès avec contrôle d'identité POSIX (uid/gid)
- S3 Versioning requis et exploité pour la cohérence
Le problème avec AWS Transfer Family
AWS Transfer Family est la solution "officielle" pour exposer des endpoints SFTP adossés à S3. Ça fonctionne, mais avec des inconvénients sérieux :
C'est cher
Transfer Family facture 0,30 $/heure rien que pour l'endpoint — soit ~216 $/mois avant même de transférer un seul octet. Ajoutez les coûts de transfert de données par-dessus. Pour un service que beaucoup d'équipes utilisent pour quelques dépôts de fichiers quotidiens, c'est difficile à justifier.
C'est une boîte noire
Vous obtenez un endpoint SFTP, mais vous ne contrôlez pas le serveur. L'authentification personnalisée nécessite des hooks Lambda. Le logging est limité. Vous ne pouvez pas vous connecter en SSH pour débugger. Vous ne pouvez pas personnaliser le comportement du serveur SFTP, ajouter des scripts de pré/post-traitement, ou exécuter quoi que ce soit à côté.
La nouvelle architecture : atmoz/sftp + S3 Files sur ECS Fargate
Voici ce que nous allons mettre en place :
Les composants :
- Bucket S3 avec versioning activé (requis par S3 Files)
- Système de fichiers S3 Files pointant vers le bucket, avec des mount targets dans votre VPC
- Volume EFS pour les clés SSH persistantes (empreinte stable entre les redémarrages et le scaling)
-
Service ECS Fargate exécutant atmoz/sftp avec le volume S3 Files monté sur
/home - Network Load Balancer exposant le port 22
-
Enregistrement DNS pour
sftp.votredomaine.com(optionnel)
Les fichiers uploadés via SFTP atterrissent sur le montage S3 Files → apparaissent dans S3 en quelques secondes → déclenchent les notifications S3 pour le traitement en aval.
Comparaison des coûts
| Composant | Transfer Family | S3 Files + Fargate |
|---|---|---|
| Coût de base | 0,30 $/h (~216 $/mois) | NLB : ~16 $/mois |
| Compute | Inclus | Fargate 0.25 vCPU / 512 Mo : ~9 $/mois |
| Stockage | Tarification S3 | Tarification S3 (identique) |
| Transfert de données | 0,04 $/Go via SFTP | Tarification NLB standard |
| Minimum mensuel | ~216 $ | ~25 $ |
C'est environ 8 fois moins cher au niveau de base. Pour les cas d'usage SFTP à trafic faible à moyen (c'est-à-dire la majorité), les économies sont significatives.
Pourquoi c'est mieux que du SFTP sur EFS
Avant S3 Files, l'approche DIY classique consistait à monter EFS sur Fargate et faire tourner atmoz/sftp. C'est exactement ce que nous faisions. Ça marchait, mais avec une limitation fondamentale : vos fichiers vivaient dans EFS, pas dans S3.
Ça signifiait :
- Pas de notifications S3 à l'arrivée des fichiers
- Pas de politiques de cycle de vie S3
- Pas de réplication cross-region S3
- Pas d'accès direct aux fichiers via l'API S3
- Tarification EFS (0,30 $/Go pour Standard) vs S3 (0,023 $/Go)
- Stratégie de backup séparée nécessaire
Avec S3 Files, les données vivent dans S3. Vous bénéficiez de tout l'écosystème S3 — notifications, règles de cycle de vie, réplication, analytics, tiering Glacier — tout en ayant un système de fichiers montable pour votre serveur SFTP.
Traitement événementiel des fichiers
Transfer Family et notre approche S3 Files écrivent tous deux dans S3, donc vous obtenez les mêmes capacités événementielles dans les deux cas :
- Notifications S3 → SQS/SNS/Lambda pour un traitement immédiat à l'arrivée d'un fichier
- Notifications S3 → EventBridge pour des règles de routage complexes
- S3 Inventory pour l'audit
- S3 Object Lock pour la conformité
- S3 Replication pour répliquer les fichiers uploadés vers une autre région ou un autre compte
La différence n'est pas dans les fonctionnalités — c'est dans le coût. Vous obtenez exactement le même pipeline événementiel S3 pour ~25 $/mois au lieu de ~216 $/mois.
L'implémentation Terraform
Comme aws_s3files_file_system n'est pas encore dans le provider Terraform AWS (PR #47325 ouverte et priorisée), nous gérons les ressources S3 Files via terraform_data avec des provisioners local-exec appelant l'AWS CLI.
Les ressources clés :
# Système de fichiers S3 Files — créé via AWS CLI
resource "terraform_data" "s3files_file_system" {
provisioner "local-exec" {
command = <<-EOT
aws s3files create-file-system \
--bucket "$BUCKET_ARN" \
--role-arn "$ROLE_ARN" \
--accept-bucket-warning \
--region "$REGION"
EOT
}
}
# Mount targets dans chaque sous-réseau privé
resource "terraform_data" "s3files_mount_targets" {
for_each = toset(var.private_subnet_ids)
provisioner "local-exec" {
command = <<-EOT
aws s3files create-mount-target \
--file-system-id "$FS_ID" \
--subnet-id "${each.value}" \
--security-groups "$SG_ID"
EOT
}
}
# La task definition ECS utilise s3filesVolumeConfiguration
volume = {
sftp-home = {
s3files_volume_configuration = {
file_system_arn = local.s3files_fs_arn
root_directory = "/"
}
}
}
Le code Terraform complet est disponible en tant que module Terraform. Le provider Terraform AWS ne supporte pas encore aws_s3files_file_system (PR #47325 ouverte et priorisée), donc les ressources S3 Files sont actuellement gérées via terraform_data + AWS CLI. Je m'engage à mettre à jour ce module pour utiliser les ressources Terraform natives dès que le provider intégrera le support S3 Files.
Configuration IAM
Deux rôles IAM sont nécessaires :
Rôle de service S3 Files — assumé par
elasticfilesystem.amazonaws.compour synchroniser entre le système de fichiers et le bucket S3. Nécessite un accès S3 en lecture/écriture sur le bucket + des permissions EventBridge pour la détection des changements.Rôle de tâche ECS — nécessite
s3files:ClientMount,s3files:ClientWrite, ets3:GetObject/s3:ListBucketsur le bucket pour des lectures optimisées.
Quand Transfer Family reste pertinent
Pour être honnête, Transfer Family n'est pas mort pour tous les cas d'usage :
- Gestion managée des clés SFTP et des utilisateurs — Transfer Family intègre nativement des fournisseurs d'identité (AD, authentification Lambda custom). Avec atmoz/sftp, vous gérez les utilisateurs via la configuration.
- Support du protocole AS2 — si vous avez besoin d'AS2, Transfer Family reste la seule option managée.
- FTPS — Transfer Family supporte FTPS nativement.
- Tolérance zéro aux opérations — si vous ne pouvez vraiment pas gérer un conteneur, Transfer Family est entièrement managé.
Mais pour la grande majorité des cas d'usage SFTP — des partenaires qui déposent des fichiers à traiter — l'approche S3 Files est moins chère, plus flexible, et offre une meilleure observabilité.
Pour démarrer
Prérequis : Les commandes aws s3files nécessitent AWS CLI v2.34.26 ou ultérieur. Vous avez également besoin de jq (utilisé par les scripts des provisioners Terraform). Mettez à jour la CLI avec brew upgrade awscli ou consultez le guide d'installation AWS CLI.
- Créer un bucket S3 avec le versioning activé
- Créer un rôle IAM pour S3 Files avec les politiques de confiance et de permissions requises
- Créer un système de fichiers S3 Files via la console ou
aws s3files create-file-system - Créer des mount targets dans vos sous-réseaux VPC
- Créer un EFS pour les clés SSH persistantes
- Déployer un service ECS Fargate avec atmoz/sftp, en montant S3 Files sur
/homeet EFS sur/etc/ssh/ - Placer un NLB devant, pointer votre DNS dessus
- Configurer les notifications S3 sur le bucket pour le traitement en aval
Ou utilisez simplement le module Terraform — le tout se déploie en moins de 10 minutes.
Test de bout en bout
Après terraform apply, le serveur SFTP est prêt en environ 8 minutes (l'essentiel du temps est consacré à la mise à disposition des mount targets S3 Files). Voici un test rapide :
# Upload d'un fichier
echo "Hello from S3 Files SFTP!" > test.txt
sshpass -p demo sftp -o StrictHostKeyChecking=no -P 22 demo@<sftp_endpoint> <<EOF
cd upload
put test.txt
bye
EOF
# Vérifier qu'il est arrivé dans S3 (attendre ~30-60s pour la synchro)
aws s3 cp s3://<sftp_bucket_name>/demo/upload/test.txt -
# Output: Hello from S3 Files SFTP!
Nous avons également vérifié que les clés SSH persistent entre les redémarrages de tâches — l'empreinte du serveur reste identique après un redéploiement forcé, grâce au volume EFS monté sur /etc/ssh/.
Conclusion
S3 Files comble le fossé entre système de fichiers et stockage objet d'une manière qui rend beaucoup de services AWS coûteux redondants. Pour le SFTP en particulier, la combinaison atmoz/sftp + S3 Files sur Fargate vous offre :
- ~8x moins cher que Transfer Family
- Contrôle total sur le serveur SFTP
- Notifications S3 natives pour le traitement événementiel
- S3 comme source de vérité — règles de cycle de vie, réplication, analytics fonctionnent
- Infrastructure as Code avec Terraform (même avant le support natif du provider)
L'époque où il fallait payer 216 $/mois minimum pour un endpoint SFTP managé est révolue pour la plupart des équipes. S3 Files est la pièce manquante qui rend le SFTP DIY sur AWS non seulement viable, mais ~8x moins cher.

Top comments (0)