web-dev-qa-db-fra.com

Existe-t-il un serveur qui fournit localement une API de style Amazon S3?

Nous fabriquons des logiciels distributifs qui stockent certaines données (pièces jointes) dans a) une base de données ou b) Amazon S3. La base de données est utilisée car elle ne nécessite aucune autre configuration. Amazon S3 est la meilleure option.

Ce que nous voulons maintenant, c'est une solution pour les clients qui ne veulent pas utiliser Amazon S3. Nous pouvons évidemment utiliser simplement le système de fichiers mais cela peut être problématique s'il y a plusieurs serveurs Web et que les fichiers doivent être répliqués; cela nous oblige également à écrire du code supplémentaire pour gérer les diverses permations de problèmes qui peuvent survenir.

Ce que nous préférerions, c'est s'il y avait un logiciel serveur qui reproduit essentiellement l'API d'Amazon S3. De cette façon, nos clients peuvent installer le serveur sur une boîte; et nous n'avons pas besoin de changer de code. Alors ... existe-t-il un tel logiciel?

62

Ceci est possible via OpenStack Object Storage (nom de code Swift) , qui est logiciel open source pour créer un stockage d'objets redondant et évolutif en utilisant des clusters de serveurs standardisés, en particulier son couche API S3 récemment ajoutée (facultative), qui émule l'API S3 REST en plus du stockage d'objets.

Voir Configurer le stockage d'objets avec l'API S pour la documentation officielle - un petit tutoriel plus perspicace et illustré concernant l'ensemble de la configuration est disponible dans API S3 sur OpenStack Swift (qui s'appuie sur le plus complexe Installer un OpenStack Swift cluster sur EC2 cependant).


Mise à jour

Une alternative remarquable est Ceph , qui est un système de stockage unifié et distribué conçu pour d'excellentes performances, fiabilité et évolutivité - intéressant, il fournit les trois modèles de stockage courants, c'est-à-dire - Object Storage , Block Storage and a File System and the RADOS Gateway fournit Amazon S3 et OpenStack Swift interfaces compatibles vers le magasin d'objets RADOS [accentuation], voir API RADOS S pour plus de détails sur les fonctionnalités de l'API S3 actuellement prises en charge.

32
Steffen Opel

Minio sera utile pour cela. Écrit en Go et simple à déployer.

Téléchargements binaires ici: https://min.io/download

Pour exécuter en tant que serveur S3:

minio server path/to/disk/storage

La clé d'accès et le secret seront sortis sur la console.

37
Krishna Srinivas

Nous avons rencontré le problème de tester notre code basé sur S3 localement et avons en fait implémenté un petit serveur Java, qui émule l'API objet S3. Comme cela pourrait être utile à d'autres, nous avons configuré un dépôt github avec avec un petit site Web: http://s3ninja.net - tous OpenSource sous la licence MIT.

Étant assez simple et minimaliste, cet outil est parfait à des fins de test et de développement. Cependant, pour une utilisation en production, on peut vouloir ajouter un peu de sécurité (même si les hachages AWS sont déjà vérifiés dans l'API - seule l'interface graphique est complètement non protégée). En outre, il ne fait aucune réplication ni mise à l'échelle. Ce ne serait donc pas un bon choix pour les grandes configurations.

9
Andreas Haufler

Avez-vous regardé Cloudian ? Nous l'utilisons en interne dans notre entreprise pour développer notre application S3. J'utilise l'édition communautaire qui est gratuite jusqu'à 10 To de stockage. Il a une assez bonne couverture S3 ou couvre au moins la plupart des choses que mon application utilise (j'utilise des versions et des téléchargements en plusieurs parties, donc je pense que mon application est avancée). Les identifiants de version et les identifiants multiparties, etc. qu'il génère sont différents de ceux que vous obtenez d'AWS, mais boto n'a jusqu'à présent rien à redire. Il fonctionne également avec s3fs et d'autres navigateurs s3 sket que j'ai essayés.

À mon avis, c'est un bon outil de développement par rapport à l'API AWS S3 et devrait répondre à vos besoins. Vous pouvez pointer votre application vers votre serveur Cloudian local, puis lorsque vous êtes prêt pour la production, vous pouvez la rediriger vers Amazon. Votre kilométrage peut varier ... Bonne chance.

7
MeSee

J'ai récemment commencé à utiliser Skylable pour mes besoins S3, c'est gratuit (GPL). Leur stockage d'objets prend en charge la réplication, la haute disponibilité et la déduplication et il est entièrement compatible S3. Vous pouvez exécuter leurs logiciels sur un seul serveur (fer, machine virtuelle ou conteneur) si vous n'avez pas besoin de redondance ou vous pouvez utiliser plus de nœuds si vous avez besoin de HA.

Le nombre de répliques peut être choisi par compartiment, comme avec Swift. J'ai commencé avec 2 nœuds dans la réplique 2 et j'ai ajouté plus de nœuds à mesure que notre base d'utilisateurs commençait à croître, pour faire face au trafic réseau supplémentaire et aux besoins d'espace.

Ajouter plus de nœuds est vraiment facile et peut être fait sur un cluster en direct.

D'après mon expérience, Skylable s'est révélé plus rapide et plus fiable que Swift. Il est écrit en C et OCaml, il n'est pas interprété. L'empreinte mémoire est vraiment faible, donc je peux exécuter un nœud même sur des VPS bon marché.

Récemment, ils ont annoncé qu'ils travaillaient sur les API Swift, apparemment leur objectif est de remplacer Swift.

4
Andrea Grandi

Alors que la question initiale concerne les logiciels compatibles S3 pour (ce qui semble) une utilisation en production, beaucoup sont intéressés par le même logiciel, mais pour le développement local et les tests.

En ce qui concerne la solution prête pour la production, il existe un excellent logiciel de stockage compatible S3 appelé Riak CS , il est solide et éprouvé en production depuis des années, un inconvénient - ce n'est pas simple à configurer. Il y a quelques limitations, mais rien de majeur qui fait obstacle, voir api/compatibilité documentation .

Déjà quelques bonnes réponses pour le développement et les tests, cela sera utile pour les utilisateurs de Docker - il y a docker-riak-cs image qui permet de lancer rapidement l'instance de Riak CS. Je l'utilise depuis près de 2 ans pour le développement local et les tests d'intégration avec beaucoup de succès.

2
Ian Bytchek

Comme cela a déjà été mentionné: vous pouvez essayer d'utiliser Swift comme alternative à Amazon S3. Jetez un œil à SwiftFS système de fichiers, il vous permet de monter le conteneur OpenStack stocké dans Swift en tant que système de fichiers local.

2
Paul

Si vous voulez avoir une API de type S3 mais hébergez vous-même les données, la mention de minio est parfaite.

Si vous voulez écrire des services qui interagissent avec S3 mais que vous voulez les tester localement pour la vitesse, vous pouvez utiliser Localstack que je ne pense pas avoir vu mentionné ici. Il émule non seulement S3 mais également de nombreux autres services AWS. Je ne recommanderais pas de l'utiliser pour des fichiers clients réels car il s'agit d'un magasin de données en mémoire pour testinng uniquement.

https://github.com/localstack/localstack

https://bluesock.org/~willkg/blog/dev/using_localstack_for_s3.html

0
dragon788