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:
-o enable_noobj_cache # s3fs has a huge performance hit for large directories without this enabled
-o stat_cache_expire=30 # the ideal time will vary according to your usage
-o enable_content_md5 # it's beyond me why this safety check is disabled by default
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 )
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.9G 1.4G 6.2G 18% /
s3fs 256T 0 256T 0% /srv/s3fs/example-bucket
Por supuesto, puedes montar el cubo en cualquier lugar. Simplemente lo tengo en / srv / s3fs.