J'ai besoin de configurer un serveur SFTP qui, essentiellement, a une très grande capacité. Je dois fournir à l'un de nos partenaires les informations de connexion SFTP à un serveur où ils téléchargeront des millions de fichiers, totalisant quelques centaines de téraoctets. Je serai alors sélectif et lirai assez rarement certains de ces fichiers. C'est la seule exigence réelle, tout choix technologique est à gagner.
Ce qui me vient à l'esprit comme le moyen le plus simple est d'avoir une sorte d'instance EC2 exécutant le serveur SFTP de telle sorte que tout ce qui est téléchargé soit soit directement envoyé à S3, soit une sorte de processus découvre les nouveaux fichiers lorsqu'ils sont téléchargés, les copie dans S3 et les supprime du disque.
Est-ce la meilleure façon? Existe-t-il un autre moyen d'obtenir un serveur qui dispose essentiellement d'un "espace disque infini et en croissance magique"?
Merci de votre aide! Daniel
la source
Réponses:
J'ai répondu à cette même question sur Stack Overflow .
s3fs est en effet une solution raisonnable, et dans mon cas, je l'ai couplé avec proftpd avec d'excellents résultats, malgré les problèmes théoriques / potentiels.
Au moment où j'ai écrit la réponse, je n'avais mis cela en place que pour l'un de mes clients consultants ... mais depuis lors, j'ai également commencé à boire mon propre kool-aid et je l'utilise en production dans mon travail de jour. Les entreprises que nous échangeons des données avec téléchargement et téléchargement de fichiers toute la journée sur mon serveur sftp, qui stocke tout directement sur S3. En prime, mon système d'exportation de rapports - qui écrit directement des feuilles de calcul Excel vers S3 - peut exporter des rapports «vers le serveur FTP» en les plaçant simplement directement dans le compartiment du serveur ftp, avec les métadonnées appropriées pour afficher l'uid, le gid et mode de chaque fichier. (s3fs utilise les en-têtes x-amz-meta-uid, -gid et -mode pour émuler les autorisations du système de fichiers). Lorsque le client se connecte au serveur, les fichiers de rapport sont juste ... là.
Je pense que la solution idéale serait probablement un service de passerelle sftp vers S3, mais je n'ai toujours pas réussi à en concevoir un, car cette solution fonctionne très bien ... avec quelques mises en garde, bien sûr:
Les valeurs par défaut de s3fs ne sont pas toutes saines. Vous voudrez probablement spécifier ces options:
Il est probablement préférable d'utiliser une région autre que US-Standard, car c'est la seule région qui n'offre pas de cohérence de lecture après écriture sur les nouveaux objets. (Ou, si vous devez utiliser US-Standard, vous pouvez utiliser le nom
your-bucket.s3-external-1.amazonaws.com
d' hôte presque non documenté de la région us-east-1 pour empêcher le géo-routage de vos demandes, ce qui peut améliorer la cohérence.)J'ai le versionnage d'objet activé sur le compartiment, que s3fs ignore complètement. L'avantage de ceci est que même si un fichier doit être "écrasé", je peux toujours aller au bucketing pour récupérer le fichier "écrasé". La gestion des versions des objets dans S3 a été brillamment conçue de telle manière que les clients S3 qui ne connaissent pas la gestion des versions ne sont en aucun cas désactivés ou confus, car si vous ne faites pas d'appels REST prenant en charge la gestion des versions, les réponses renvoyées par S3 sont compatibles avec les clients qui ont aucun concept de versioning.
Notez également que le transfert de données vers S3 est exempt de frais de transfert de données. Vous ne payez que le prix par demande. Le transfert de données de S3 vers EC2 dans une région est également exempt de frais de transfert de données. Ce n'est que lorsque vous transférez de S3 vers Internet, vers Cloudfront ou vers une autre région AWS que vous payez des frais de transfert. Si vous souhaitez utiliser le stockage à redondance réduite moins cher, s3fs le prend en charge avec
-o use_rrs
.En passant, vous aurez toujours une sensation floue et chaleureuse lorsque vous voyez les 256 téraoctets d'espace libre (et 0 utilisé, car un vrai calcul de tailles est impossible en raison du fait que S3 est un magasin d'objets, pas un système de fichiers ).
Bien sûr, vous pouvez monter le godet n'importe où. Il se trouve que je l'ai dans / srv / s3fs.
la source
setupftpuser
qui appelle l'ftpasswd
utilitaire de ProFTPd pour créer des utilisateurs, créer des répertoires personnels et définir des autorisations. Il sauvegarde également le fichier de mot de passe avant d'apporter des modifications. S'il est appelé sur un utilisateur existant, il vous indique que l'utilisateur est déjà configuré et vous demande si vous souhaitez modifier le mot de passe. Une interface graphique qui a géré essentiellement le même processus, et ça devrait aller si elle est bien écrite.Découvrez la passerelle SFTP sur AWS Marketplace .
Nous avons rencontré des problèmes de fiabilité avec s3fs, nous avons donc développé une solution personnalisée spécialement à cet effet. Nous l'utilisons en production depuis plusieurs années sans problème et l'avons récemment publié sur AWS Marketplace.
la source
Il y a deux options. Vous pouvez utiliser un service SFTP géré natif récemment ajouté par Amazon (qui est plus facile à configurer). Ou vous pouvez monter le compartiment sur un système de fichiers sur un serveur Linux et accéder aux fichiers en utilisant le SFTP comme tout autre fichier sur le serveur (ce qui vous donne un meilleur contrôle).
Service SFTP géré
Dans votre console Amazon AWS, accédez à AWS Transfer for SFTP et créez un nouveau serveur.
Dans la page du serveur SFTP, ajoutez un nouvel utilisateur SFTP (ou des utilisateurs).
Les autorisations des utilisateurs sont régies par un rôle AWS associé dans le service IAM (pour un démarrage rapide, vous pouvez utiliser la stratégie AmazonS3FullAccess ).
Le rôle doit avoir une relation de confiance avec
transfer.amazonaws.com
.Pour plus de détails, consultez mon guide Configuration d'un accès SFTP à Amazon S3 .
Montage du compartiment sur le serveur Linux
Comme @Michael l'a déjà répondu , montez simplement le compartiment en utilisant le
s3fs
système de fichiers (ou similaire) sur un serveur Linux (Amazon EC2) et utilisez le serveur SFTP intégré du serveur pour accéder au compartiment.Voici les instructions de base:
s3fs
access-key-id:secret-access-key
au/etc/passwd-s3fs
Ajoutez une entrée de montage de godet à
fstab
:Pour plus de détails, consultez mon guide Configuration d'un accès SFTP à Amazon S3 .
Utiliser le client S3
Ou utilisez n'importe quel "client FTP / SFTP" gratuit , c'est aussi un "client S3" , et vous n'avez rien configuré côté serveur. Par exemple, mon WinSCP ou Cyberduck .
la source
AWS fournit désormais un service SFTP sur S3 appelé AWS Transfer For SFTP . Il présente les avantages du S3 (stockage distribué hautement durable et disponible) combiné au protocole SFTP bien connu et établi.
Par défaut, les utilisateurs s'authentifient à l'aide de paires de clés privées / publiques et à l'aide de stratégies IAM, vous pouvez configurer des autorisations pour les utilisateurs SFTP sur les compartiments S3. Vous pouvez ajouter des schémas d'authentification en implémentant vos propres fonctionnalités sur AWS API Gateway et AWS Lambda.
Nous avons enveloppé AWS Transfer for SFTP dans un module complémentaire Heroku appelé SFTP To Go pour à la fois fournir des schémas d'authentification flexibles et un coût total de possession inférieur (car un point de terminaison de service a un coût fixe sur AWS, mais peut être partagé par de nombreux utilisateurs sans aucune sécurité ou compromis sur les performances.
la source