Auteur:


Date:
17/12/2012

Catégories:
Open-source
Planet-libre
Web

Tags:



Gérer son compte Amazon S3 en ligne de commande

Il y a quelques jours, un billet sur le blog officiel de GitHub a particulièrement attiré mon attention. Pour faire court, GitHub vient de supprimer le "Tab Download" qui proposait un moyen simple d’héberger le téléchargement des sources/binaires en dehors du gestion de configurationen version. J'utilisais cette solution pour héberger les archives des différentes versions de Glances  que j'utilisais dans mon script d'installation setup.py.

capture_057

J'ai donc du trouver une solution alternative pour héberger ces fichiers. Trois solutions se présentaient à moi:

  • Utiliser le "Tab Tag" de Github dans lequel est automatiquement généré les versions tagués (au sens Git). J'ai rapidement écarté cette solution car j'ai besoin d'un système plus souple (pour héberger par exemple des versions bêta, non taguées) et ouvert (par exemple pour héberger les futures binaires pour Glances Windows).
  • Héberger ces fichiers sur mon serveur dédié. C'est la solution la plus logique mais qui ne présente pas, à mon goût, assez de robustesse. En effet, en cas de panne/problème de mon serveur (ou de l'hébergeur) je souhaite que les utilisateurs puissent continuer à mettre à jour ou installer Glances.
  • Utiliser un service en ligne fait pour cela comme Amazon Simple Storage Service (Amazon S3 pour les intimes).

C'est donc sur cette dernière solution que je suis parti.

Amazon S3 ? C'est quoi donc ?

C'est un service dans "les nuages" permettant de stocker des objets (répertoires, fichiers) dans des buckets (librairies). On peut ensuite accéder à nos objet via une simple URL (par exemple: https://s3.amazonaws.com/glances/glances-1.5.1.tar.gz).

Il est payant mais relativement peu coûteux pour l’hébergement de petits fichiers (voir la grille tarifaire ici et le détail de l'offre ).

J'ai donc commencé par créer un compte puis par tester le stockage de mes premiers fichiers à partir de la console en ligne proposée par Amazon.

capture_058

Comme la plupart des interfaces de ce type, elle est très simple à utiliser mais montre ces limites quand on souhaite automatiser les taches comme par exemple publier par script un nouveau fichier dans une librairie.

s3cmd, le couteau suisse de Amazon S3

Heureusement, la ligne de commande vient à notre secours grâce au logiciel open-source s3cmd.

On commence par installer s3cmd sur notre système GNU/Linux (Debian / Ubuntu):

Puis on effectue la configuration initiale qui va permettre de donner les autorisation nécessaire à votre machine pour accéder à votre espace S3. Pour cela, nous avons besoins des clés publique (1) et privé (2) de notre compte Amazon AWS (via cette page):

capture_055

... de saisir la commande suivante:

et de se laisser guider...

Une fois cette commande terminé, vous devriez pouvoir accéder à votre compte Amazon S3 depuis la ligne de commande de votre machine.

Guide d'utilisation de s3cmd

Créer un bucket (mb)

Un bucket est le conteneur de plus haut niveau dans la terminologie d'Amazon S3. On peut le voir comme un disque dur dédié ou comme une librairie. Dans mon cas précis, j'ai donc commencé par créer le bucket glances en utilisant la commande suivante:

Affiche la liste de vos buckets

On peut vérifier que l'opération c'est bien passée en affichant la liste des buckets disponibles:

Ajouter un nouveau fichier (objet) dans un bucket

On peut ensuite ajouter un objet de type fichier dans ce bucket.

Par défaut, un objet est privé (donc seulement accessible avec les clés privée et publique de votre compte).

 

Pour créer le même objet mais de manière publique (donc accessible depuis une URL), on doit saisir:

Afficher le contenu d'un bucket

Pour afficher le contenu d'un bucket:

Comment télécharger ces objets ?

Pour télécharger un fichier depuis un bucket, on peut soit directement utiliser son URL publique (pour les objets publics) : https://s3.amazonaws.com/glances/glances-1.5.1.tar.gz

ou en ligne de commande (pour tous les objets):

Supprimer un fichier dans un bucket

On doit saisir la ligne de commande:

Supprimer un bucket

Un bucket doit être vide avant d'être supprimé par la commande:

Synchronisation

Si vous souhaitez, avec s3cmd, gérer des structures de données plus complexes sur votre espace Amazon S3, il est également possible d'utiliser les fonctions de synchronisation (voir la documentation ici).

Mot de fin

Pour finir j'ai donc modifié mon script de génération de nouvelle version de Glances pour automatiser l'upload vers Amazon S3 et aussi changé mon script setup.py de cette façon:

capture_060

Et vous ? Que pensez-vous d'Amazon S3 ? Utlisateur ? Avec s3cmd ?

  • http://tanguy.ortolo.eu/ Elessar

    Amazon S3, buckets, objects, API spécifique, tout ça pour un service qui se trouvait déjà il y a trente ans, de l’hébergement de fichiers ? Franchement, ce serait plus simple de trouver un hébergeur avec accès FTP ou SFTP non ?

    • http://www.nicolargo.com nicolargo

      Comme je le dis dans l’article l’avantage principal de Amazon S3 est la robustesse au panne que tu n’as pas avec un serveur FTP /SFTP (à moins d’avoi une grosse infrastructure à dispo).

  • who

    Un petit retour sur le coût (surement difficile à estimer aujourd’hui) sera bienvenu :)

  • N.

    Utiliser un tag pour une bêta est un usage totalement licite, qui permet d’éviter d’avoir de la bêta plutôt alpha…

  • François

    De mon coté, je vais distribuer toutes mes archives via ma machine auto-hébergée. Les archives sont petites, ne sont pas destinées à un très grand nombre de requêtes, c’est donc suffisant. Si le contraire arrive, alors les bonnes distributions feront des paquets et le problème d’indisponibilité ne sera plus aussi critique. Et mettre en place un miroir, ce n’est pas non plus impossible.

    Je m’attendais plus ou moins à ce que ce genre de décisions de github arrive.

  • Mustapha

    Bonjour,

    Il y a des hébergeur français qui propose des espaces de stockage comme par exemple Ikoula avec son offre Ikeepincloud basé sur des logiciels libres http://www.ikeepincloud.com/

  • deogracia

    Hi,

    Pas mal l’article et tes articles en général ^^

    Par contre, je bloque un peu car pour t’identifier sur S3, tu fais utiliser la clé générale. Du coup, si ces accès sont intercepter d’une manière ou d’une autre, nous avons accès non seulement à S3 mais à tous les services AWS, si je ne me trompe pas (http://docs.amazonwebservices.com/AWSSecurityCredentials/1.0/AboutAWSCredentials.html#AccessKeys).

    Du coup, j’ai contourné ce problème en créer un compte via IAM et ne donner accès à ce nouveau compte qu’au(x) bucket(s) nécessaire.

    ++

  • http://twitter.com/nikkau Nikkau

    Le truc que je trouve dommage avec cette solution c’est que ça va te coûter du fric proportionnellement à ton succès, ce qui me semble anormal et triste pour le monde de l’open source.

    Après, j’ai pas de meilleure façon de faire à proposer, c’est ce que je préconiserais aussi, il y a quelques années je m’occupais d’un podcast audio et j’avais rien trouvé de mieux que S3 pour héberger proprement mes mp3.

    Et c’est évidement plus pour le principe qu’autre chose, il faudra vraiment beaucoup de DL avant que ça te coûte cher.