Utilisation de la commande s3cmd
Attention
Cet outil est déprécié. Rendez-vous sur la documentation de s5cmd.
S3cmd 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, selon votre distribution, faites
$ sudo apt-get install s3cmd
$ sudo yum install s3cmd
$ sudo pacman -S s3cmd
etc.
Il est déployé par défaut sur toutes les ressources de calcul du mésocentre et accessible via le module s3cmd :
$ module load python/2.7.9 s3cmd
Configuration de s3cmd pour le serveur de stockage du Mésocentre
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
).
Créez un fichier ~/.s3cfg
avec pour contenu :
[default]
access_key = MYACCESSKEY
secret_key = MYSECRETKEY
check_ssl_certificate = True
host_base = s3.mesocentre.uca.fr
host_bucket = s3.mesocentre.uca.fr
bucket_location = fr-clermont-mesocentre
server_side_encryption = False
use_https = True
Commandes usuelles de s3cmd
On vérifie dans un premier temps que l'accès fonctionne :
$ s3cmd ls
Et on va créer un nouveau bucket (mb
) :
$ s3cmd mb s3://monbucket42
Bucket 's3://monbucket42/' created
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 s3fs, 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
) :
$ s3cmd ls
2016-12-01 13:35 s3://monbucket42
Je peux ajouter des fichiers à monbucket42 (put
) :
$ s3cmd put mkdocs.yml s3://monbucket42
upload: 'mkdocs.yml' -> 's3://monbucket42/mkdocs.yml' [1 of 1]
1085 of 1085 100% in 0s 25.37 kB/s done
Que je vois appraître :
$ s3cmd ls s3://monbucket42
2016-12-01 13:37 1085 s3://monbucket42/mkdocs.yml
Ou je peux aussi ajouter des répertoires (put -r
) :
$ s3cmd put -r docs s3://monbucket42
upload: 'docs/applis/hpc2-liste.md' -> 's3://monbucket42/docs/applis/hpc2-liste.md' [1 of 17]
116 of 116 100% in 0s 3.98 kB/s done
[...]
upload: 'docs/slurm/overview.md' -> 's3://monbucket42/docs/slurm/overview.md' [16 of 17]
3067 of 3067 100% in 0s 248.58 kB/s done
upload: 'docs/slurm/resources.md' -> 's3://monbucket42/docs/slurm/resources.md' [17 of 17]
5746 of 5746 100% in 0s 380.51 kB/s done
Qui apparaît :
$ s3cmd ls s3://monbucket42
DIR s3://monbucket42/docs/
2016-12-01 13:37 1085 s3://monbucket42/mkdocs.yml
$ s3cmd ls s3://monbucket42/docs/
DIR s3://monbucket42/docs/applis/
DIR s3://monbucket42/docs/ceph/
DIR s3://monbucket42/docs/css/
DIR s3://monbucket42/docs/files/
DIR s3://monbucket42/docs/img/
DIR s3://monbucket42/docs/infras/
DIR s3://monbucket42/docs/slurm/
2016-12-01 13:40 1778 s3://monbucket42/docs/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 :
$ s3cmd put -r monrepertoire/ s3://monbucket42
Pour connaître la taille de votre bucket (du
) :
$ s3cmd du s3://monbucket42
1234641 18 objects s3://monbucket42/
Pour récupérer l'un des fichiers (get
) :
$ s3cmd get s3://monbucket42/docs/files/20161007-tutoriel-mesocentre.pdf
download: 's3://monbucket42/docs/files/20161007-tutoriel-mesocentre.pdf' -> './20161007-tutoriel-mesocentre.pdf' [1 of 1]
1156910 of 1156910 100% in 0s 9.33 MB/s done
Pour copier un fichier d'un endroit à un autre du bucket, ou de 2 buckets différents (cp
) :
$ s3cmd cp s3://monbucket42/docs/files/20161007-tutoriel-mesocentre.pdf s3://monbucket42/autre_dossier/fichier.pdf
remote copy: 's3://monbucket42/docs/files/20161007-tutoriel-mesocentre.pdf' -> 's3://monbucket42/autre_dossier/fichier.pdf'
Ou pour déplacer un fichier (mv
) :
$ s3cmd mv s3://monbucket42/autre_dossier/fichier.pdf s3://monbucket42/formation.pdf
move: 's3://monbucket42/autre_dossier/fichier.pdf' -> 's3://monbucket42/formation.pdf'
Pour supprimer un fichier (del
ou rm
) :
$ s3cmd del s3://monbucket42/formation.pdf
delete: 's3://monbucket42/formation.pdf'
Pour supprimer un bucket, il faut d'abord vider son contenu :
$ s3cmd la
DIR s3://monbucket42/autre_dossier/
DIR s3://monbucket42/docs/
2016-12-01 13:37 1085 s3://monbucket42/mkdocs.yml
$ s3cmd rm -r s3://monbucket42/autre_dossier/
delete: 's3://monbucket42/autre_dossier/fichier.pdf'
$ s3cmd rm -r s3://monbucket42/docs
delete: 's3://monbucket42/docs/applis/hpc2-liste.md'
[...]
delete: 's3://monbucket42/docs/slurm/overview.md'
delete: 's3://monbucket42/docs/slurm/resources.md'
$ s3cmd rm s3://monbucket42/mkdocs.yml
delete: 's3://monbucket42/mkdocs.yml'
$ s3cmd la
Puis on peut supprimer le bucket :
$ s3cmd rb s3://monbucket42
Bucket 's3://monbucket42/' removed
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 :
$ s3cmd sync docs s3://monbucket42/docs/