Utilisation de la commande s5cmd
S5cmd est une interface en ligne de commande pour piloter son Amazon S3, ou dans le cadre du Mésocentre, piloter son stockage Ceph via l'API S3. Pour l'installer sur votre poste, récupérez les binaires disponibles ici : https://github.com/peak/s5cmd . Ce logiciel a l'avantage d'être un binaire statique, ne nécessitant aucune dépendance, et n'ayant pas besoin d'un environnement d'exécution particulier (par exemple, pas de python).
Il est déployé par défaut sur toutes les ressources de calcul du mésocentre et accessible via le module s5cmd :
$ module load s5cmd
Configuration de s5cmd pour le serveur de stockage du Mésocentre
Permissions
Tout d'abord, contactez le support pour demander la création d'un compte. On vous fournira alors vos clés d'accès (MYACCESSKEY
et MYSECRETKEY
) qui sont spécifiques des projets ouverts.
Vous pouvez indiquer de différentes manières (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) à s5cmd
d'utiliser ces clés :
-
Via un fichier
~/.aws/config
:[default] aws_access_key_id = MYACCESSKEY aws_secret_access_key = MYSECRETKEY
-
Via des variables d'environnement :
$ export AWS_ACCESS_KEY_ID=MYACCESSKEY $ export AWS_SECRET_ACCESS_KEY=MYSECRETKEY
Vous pouvez ajouter ces variables d'environnement à votre fichier ~/.bashrc
.
Attention
Notez que ces variables devront être définies dans vos scripts de jobs, qui ne chargent pas nécessairement ~/.bashrc
.
Notez que le [default]
représente le nom d'un profil correspondant à un projet. Si vous avez plusieurs projets, vous avez plusieurs paires de clés d'accès à gérer. Dans ce cas le fichier ~/.aws/config
est vide et est remplacé par le fichier ~/.aws/credentials
qui ressemblera à :
[default]
aws_access_key_id = MYACCESSKEY_for_default
aws_secret_access_key = MYSECRETKEY_for_default
[my_perfect_project]
aws_access_key_id = MYACCESSKEY_for_my_perfect_project
aws_secret_access_key = MYSECRETKEY_for_my_perfect_project
s5cmd
il est nécessaire de spécifier l'option --profile
, par exemple :
$ s5cmd --profile=my_perfect_project ls
Accès à l'adresse de stockage S3 du Mésocentre
À chaque invocation de l'outil s5cmd
il est nécessaire de spécifier le paramètre --endpoint-url="https://s3.mesocentre.uca.fr"
:
$ s5cmd --endpoint-url="https://s3.mesocentre.uca.fr" ls
~/.bashrc
de cette manière:
$ export S3_ENDPOINT_URL=https://s3.mesocentre.uca.fr
~/.bashrc
, cela reste possible. Par exemple:
$ alias sxcmd='s5cmd --endpoint-url="https://s3.mesocentre.uca.fr"'
Commandes usuelles de s5cmd
On vérifie dans un premier temps que l'accès fonctionne :
$ sxcmd ls
# ou
$ s5cmd ls
Et on va créer un nouveau bucket (mb
) :
$ s5cmd mb s3://monbucket42
mb s3://monbucket42/
Nom du bucket
Il est important de réfléchir au nom de son bucket :
- un bucket ne peut pas être renommé ;
- il est impossible de créer un bucket dont le nom a déjà été pris par un autre utilisateur ;
- le nom du bucket doit respecter certaines règles.
Règles de nommage d'un bucket
Il convient de nommer un bucket en respectant les règles énoncées ici, en particulier pour pouvoir monter un bucket dans le système de fichiers en utilisant goofys, le nom doit être compatible avec les règles DNS :
- entre 3 et 63 caractères, et ne peut contenir que des lettres minuscules, des chiffres, des points (.) et des tirets (-) ;
- les noms ne doivent pas contenir de tiret bas (underscore _) ; le nom
Mon_Bucket_De_Donnees
n'est pas correct, nimon_bucket_de_donnees
; - les noms ne doivent pas ressembler à une adresse IP (ie
192.168.5.4
) ; - les noms ne doivent pas commencer par un point ni un tiret (
.monbucket
) ; - les noms ne doivent pas se terminer par un point ni un tiret (
monbucket.
) ; - deux points ne doivent pas être adjacents (
mon..bucket
) ; - les tirets et les points ne doivent pas être adjacents (
mon-.bucket
).
Que l'on peut lister en faisant (ls
) :
$ s5cmd ls
2024/09/18 12:42:02 s3://monbucket42
Je peux ajouter des fichiers à monbucket42 (cp
) :
$ s5cmd cp mkdocs.yml s3://monbucket42
cp mkdocs.yml s3://monbucket42/mkdocs.yml
Que je vois appraître :
$ s5cmd ls s3://monbucket42
2023/09/18 13:05:45 118997 mkdocs.yml
Ou je peux aussi ajouter des répertoires (cp
) :
$ s5cmd cp docs s3://monbucket42
cp docs/aubi/biomaj.md s3://monbucket42/docs/aubi/biomaj.md
cp docs/oscar/images.md s3://monbucket42/docs/oscar/images.md
[...]
cp docs/cluster/slurm/overview.md s3://monbucket42/docs/cluster/slurm/overview.md
cp docs/s3/rclone.md s3://monbucket42/docs/s3/rclone.md
Qui apparaît :
$ s5cmd ls s3://monbucket42
DIR docs/
2023/09/18 13:05:45 118997 mkdocs.yml
$ sxcmd ls s3://monbucket42/docs/
DIR aubi/
DIR cluster/
DIR formation/
DIR mesocentre/
DIR oscar/
DIR s3/
2023/09/18 13:45:45 3965 index.md
Attention, petite subtilité, si vous voulez envoyer uniquement le contenu d'un répertoire (et pas le répertoire lui-même), pensez à mettre un / après le nom :
$ s5cmd cp monrepertoire/ s3://monbucket42
Pour connaître la taille de votre bucket (du
) :
$ s5cmd du 's3://monbucket42/*'
32782970 bytes in 89 objects: s3://monbucket42/*
Pour récupérer l'un des fichiers (cp
) :
$ s5cmd cp s3://monbucket42/docs/mesocentre/publis.md .
cp s3://monbucket42/docs/mesocentre/publis.md publis.md
Pour copier un fichier d'un endroit à un autre du bucket, ou de 2 buckets différents (cp
) :
$ s5cmd cp s3://monbucket42/docs/files/20161007-tutoriel-mesocentre.pdf s3://monbucket42/autre_dossier/fichier.pdf
Ou pour déplacer un fichier (mv
) :
$ s5cmd mv s3://monbucket42/autre_dossier/fichier.pdf s3://monbucket42/formation.pdf
Pour supprimer un fichier (rm
) :
$ s5cmd rm s3://monbucket42/formation.pdf
Pour supprimer un bucket, il faut d'abord vider son contenu :
$ s5cmd rm 's3://monbucket42/*'
Puis on peut supprimer le bucket :
$ s5cmd rb s3://monbucket42
rb 's3://monbucket42/'
Si vous avez besoin de synchroniser un répertoire local avec un répertoire S3, utilisez la commande sync
. Elle utilisera les MD5 des fichiers pour savoir quoi envoyer et quoi mettre à jour sur votre S3 ou en local sur votre disque dur :
$ s5cmd sync docs s3://monbucket42/docs/
D'une manière générale, l'aide de s5cmd
fournit de nombreux exemples :
$ s5cmd help sync
$ s5cmd cp --help
Vous trouverez par exemple quelques options d'intérêt pour la commande cp
:
--show-progress
: affiche une barre de progression lors de la copie. Utile pour les gros fichiers.--concurrency 8
: effectue les transferts avec 8 threads en parallèle.
Vitesse
Si vous constatez des lenteurs d'accès aux objets stockés sur le S3, vérifiez si la variable d'environnement no_proxy
est bien positionnée :
$ export no_proxy=127.0.0.1,localhost,192.168.53.0/24,s3.mesocentre.uca.fr
$ unset http_proxy
$ unset https_proxy