Necesito configurar un servidor SFTP que, esencialmente, tenga una capacidad muy grande. Necesito dar a uno de nuestros socios los detalles de inicio de sesión SFTP en un servidor donde cargarán millones de archivos, un total de unos cientos de terabytes. Seré selectivo y raramente leeré algunos de estos archivos. Este es el único requisito real, cualquier opción de tecnología está en juego.
Lo que viene a la mente como la forma más fácil es tener algún tipo de instancia EC2 que ejecute el servidor SFTP de tal manera que cualquier cosa cargada se envíe directamente a S3 o algún tipo de proceso descubra nuevos archivos cuando se carguen y los copie en S3, y los elimina del disco.
Es esta la mejor manera? ¿Hay alguna otra forma de obtener un servidor que esencialmente tenga "espacio en disco infinito y mágicamente creciente"?
¡Gracias por tu ayuda! Daniel
fuente
Respuestas:
Respondí esta misma pregunta en Stack Overflow .
s3fs es de hecho una solución razonable, y en mi caso, lo he combinado con proftpd con excelentes resultados, a pesar de los problemas teóricos / potenciales.
En el momento en que escribí la respuesta, solo había configurado esto para uno de mis clientes de consultoría ... pero desde entonces, también comencé a beber mi propio kool-aid y lo estoy usando en la producción en mi trabajo diario. Las empresas intercambiamos datos con archivos de carga y descarga durante todo el día en mi servidor sftp, que almacena todo directamente en S3. Como beneficio adicional, mi sistema de exportación de informes, que escribe hojas de cálculo de Excel directamente en S3, puede exportar informes "al servidor FTP" simplemente colocándolos directamente en el bucket del servidor ftp, con metadatos apropiados para mostrar el uid, gid y modo de cada archivo. (s3fs usa encabezados x-amz-meta-uid, -gid y -mode para emular los permisos del sistema de archivos). Cuando el cliente inicia sesión en el servidor, los archivos de informe están simplemente ... allí.
Creo que la solución ideal probablemente sería un sftp para el servicio de puerta de enlace S3, pero todavía no he podido diseñar uno, ya que esta solución funciona muy bien ... con algunas advertencias, por supuesto:
No todos los valores predeterminados para s3fs son sanos. Probablemente desee especificar estas opciones:
Probablemente sea mejor usar una región que no sea US-Standard, porque esa es la única región que no ofrece consistencia de lectura después de escritura en objetos nuevos. (O, si necesita usar US-Standard, puede usar el nombre
your-bucket.s3-external-1.amazonaws.com
de host casi indocumentado de la región us-east-1 para evitar que sus solicitudes se enruten geográficamente, lo que puede mejorar la coherencia).Tengo habilitado el control de versiones de objetos en el bucket, del cual s3fs no es completamente consciente. El beneficio de esto es que incluso si un archivo debe ser "pisoteado", siempre puedo ir a versiones de cubos para recuperar el archivo "sobrescrito". El control de versiones de objetos en S3 se diseñó brillantemente de tal manera que los clientes de S3 que desconocen el control de versiones no están deshabilitados ni confundidos de ninguna manera, porque si no realiza llamadas REST con reconocimiento de versiones, las respuestas que S3 devuelve son compatibles con clientes que tienen sin concepto de versionado.
Tenga en cuenta también que la transferencia de datos a S3 está libre de cargos por transferencia de datos. Solo paga el precio por solicitud. La transferencia de datos desde S3 a EC2 dentro de una región también está libre de cargos de transferencia de datos. Solo cuando realiza una transferencia desde S3 a Internet, a Cloudfront o a otra región de AWS, paga los cargos de transferencia. Si desea utilizar el almacenamiento de redundancia reducida de menor precio, s3fs lo admite con
-o use_rrs
.Como un comentario divertido, siempre tendrá una sensación cálida y borrosa cuando vea los 256 terabytes de espacio libre (y 0 usado, ya que un cálculo real de los tamaños no es práctico debido al hecho de que S3 es un almacén de objetos, no un sistema de archivos )
Por supuesto, puedes montar el cubo en cualquier lugar. Simplemente lo tengo en / srv / s3fs.
fuente
setupftpuser
que llama a laftpasswd
utilidad ProFTPd para crear usuarios, crear directorios de inicio y establecer permisos. También realiza una copia de seguridad del archivo de contraseña antes de realizar cambios. Si se llama a un usuario existente, le informa que el usuario ya está aprovisionado y le pregunta si desea cambiar la contraseña. Una GUI que maneja esencialmente el mismo proceso, y debería estar bien si está bien escrita.Eche un vistazo a SFTP Gateway en AWS Marketplace .
Experimentamos problemas de confiabilidad con s3fs, por lo que desarrollamos una solución personalizada específicamente para este propósito. Lo hemos estado utilizando en producción durante varios años sin problemas y recientemente lo lanzamos al AWS Marketplace.
fuente
Hay dos opciones Puede usar un servicio SFTP administrado nativo agregado recientemente por Amazon (que es más fácil de configurar). O puede montar el depósito en un sistema de archivos en un servidor Linux y acceder a los archivos usando SFTP como cualquier otro archivo en el servidor (lo que le da un mayor control).
Servicio SFTP gestionado
En su consola Amazon AWS, vaya a AWS Transfer for SFTP y cree un nuevo servidor.
En la página del servidor SFTP, agregue un nuevo usuario (o usuarios) de SFTP.
Los permisos de los usuarios se rigen por un rol de AWS asociado en el servicio IAM (para comenzar rápidamente, puede usar la política AmazonS3FullAccess ).
El rol debe tener una relación de confianza con
transfer.amazonaws.com
.Para obtener más información, consulte mi guía Configuración de un acceso SFTP a Amazon S3 .
Montaje de cubo a servidor Linux
Como @Michael ya respondió , simplemente monte el depósito utilizando el
s3fs
sistema de archivos (o similar) en un servidor Linux (Amazon EC2) y use el servidor SFTP incorporado del servidor para acceder al depósito.Aquí hay instrucciones básicas:
s3fs
access-key-id:secret-access-key
a la/etc/passwd-s3fs
Agregue una entrada de montaje de cubeta a
fstab
:Para obtener más información, consulte mi guía Configuración de un acceso SFTP a Amazon S3 .
Usar cliente S3
O utilice cualquier "cliente FTP / SFTP" gratuito , que también es un "cliente S3" , y no ha configurado nada en el lado del servidor. Por ejemplo, mi WinSCP o Cyberduck .
fuente
AWS ahora proporciona un servicio SFTP sobre S3 llamado AWS Transfer For SFTP . Tiene los beneficios de S3 (almacenamiento distribuido, altamente duradero, disponible) combinado con el conocido y establecido protocolo SFTP.
De manera predeterminada, los usuarios se autentican usando pares de claves privadas / públicas, y usando las políticas de IAM puede configurar permisos para usuarios de SFTP en cubos S3. Puede agregar esquemas de autenticación implementando su propia funcionalidad en AWS API Gateway y AWS Lambda.
Hemos incluido AWS Transfer for SFTP en un complemento de Heroku llamado SFTP To Go para proporcionar esquemas de autenticación flexibles y un TCO más bajo (como punto final del servicio tiene un costo fijo en AWS, pero muchos usuarios pueden compartirlo sin ningún tipo de seguridad o compromiso de rendimiento.
fuente