Listes de diffusion S3tools / S3cmd :
S3cmd nécessite Python 2.6 ou version ultérieure. Python 3+ est également pris en charge à partir de S3cmd version 2.
Voir les instructions d'installation.
S3cmd ( s3cmd
) est un outil et un client de ligne de commande gratuit permettant de télécharger, de récupérer et de gérer des données dans Amazon S3 et d'autres fournisseurs de services de stockage cloud qui utilisent le protocole S3, tels que Google Cloud Storage ou DreamHost DreamObjects. Il convient mieux aux utilisateurs expérimentés familiarisés avec les programmes en ligne de commande. Il est également idéal pour les scripts batch et la sauvegarde automatisée sur S3, déclenchée depuis cron, etc.
S3cmd est écrit en Python. Il s'agit d'un projet open source disponible sous GNU Public License v2 (GPLv2) et gratuit pour un usage commercial et privé. Vous n'aurez à payer qu'à Amazon pour utiliser leur stockage.
De nombreuses fonctionnalités et options ont été ajoutées à S3cmd depuis sa toute première version en 2008.... nous avons récemment dénombré plus de 60 options de ligne de commande, notamment les téléchargements partitionnés, le chiffrement, la sauvegarde incrémentielle, la synchronisation s3, la gestion des ACL et des métadonnées, S3. taille du compartiment, politiques du compartiment et bien plus encore !
Amazon S3 fournit un service de stockage géré accessible sur Internet où n'importe qui peut stocker n'importe quelle quantité de données et les récupérer plus tard.
S3 est un service payant exploité par Amazon. Avant de stocker quoi que ce soit dans S3, vous devez créer un compte « AWS » (où AWS = Amazon Web Services) pour obtenir une paire d'identifiants : Access Key et Secret Key. Vous devrez donner ces clés à S3cmd. Considérez-les comme s'il s'agissait d'un nom d'utilisateur et d'un mot de passe pour votre compte S3.
Au moment d’écrire ces lignes, les coûts d’utilisation de S3 sont (en USD) :
0,023 $ par Go et par mois d'espace de stockage utilisé
plus
0,00 $ par Go – toutes les données téléchargées
plus
0,000 $ par Go - premier 1 Go/mois de données téléchargées 0,090 $ par Go - jusqu'à 10 To/mois de données téléchargées 0,085 $ par Go - 40 To/mois de données téléchargées 0,070 $ par Go - 100 To/mois de données téléchargées 0,050 $ par Go - données téléchargées /mois plus de 150 To
plus
0,005 $ pour 1 000 requêtes PUT, COPY ou LIST 0,004 $ pour 10 000 GET et toutes les autres requêtes
Si, par exemple, le 1er janvier vous téléchargez 2 Go de photos au format JPEG de vos vacances en Nouvelle-Zélande, fin janvier, vous serez facturé 0,05 $ pour l'utilisation de 2 Go d'espace de stockage pendant un mois, 0,0 $ pour le téléchargement de 2 Go de données et un quelques centimes pour les demandes. Cela représente un peu plus de 0,06 $ pour une sauvegarde complète de vos précieuses photos de vacances.
En février, on n'y touche pas. Vos données sont toujours sur les serveurs S3, vous payez donc 0,06 $ pour ces deux gigaoctets, mais aucun centime ne sera facturé pour un transfert. Cela représente 0,05 $ comme coût continu de votre sauvegarde. Pas trop mal.
En mars, vous autorisez l'accès en lecture anonyme à certaines de vos photos et vos amis en téléchargent, disons, 1 500 Mo. Les fichiers vous appartenant, vous êtes responsable des frais engagés. Cela signifie qu'à la fin du mois de mars, vous serez facturé 0,05 $ pour le stockage, plus 0,045 $ pour le trafic de téléchargement généré par vos amis.
Il n’y a pas de contrat mensuel minimum ni de frais d’installation. Ce que vous utilisez est ce que vous payez. Au début, ma facture s'élevait à 0,03 $ US, voire à zéro.
C'est en un mot le modèle de tarification d'Amazon S3. Consultez la page d'accueil d'Amazon S3 pour plus de détails.
Inutile de dire que tout cet argent est facturé par Amazon lui-même, il n'y a évidemment aucun paiement pour l'utilisation de S3cmd :-)
Les fichiers stockés dans S3 sont appelés « objets » et leurs noms sont officiellement appelés « clés ». Comme cela prête parfois à confusion pour les utilisateurs, nous appelons souvent les objets « fichiers » ou « fichiers distants ». Chaque objet appartient exactement à un « seau ».
Pour décrire les objets dans le stockage S3, nous avons inventé un schéma de type URI sous la forme suivante :
s3://BUCKET
ou
s3://BUCKET/OBJECT
Les buckets sont un peu comme des répertoires ou des dossiers avec quelques restrictions :
C'est une bonne idée d'utiliser des noms de compartiment compatibles DNS. Cela signifie par exemple que vous ne devez pas utiliser de caractères majuscules. Bien que la conformité DNS ne soit pas strictement requise, certaines fonctionnalités décrites ci-dessous ne sont pas disponibles pour les compartiments nommés incompatibles avec DNS. Une étape supplémentaire consiste à utiliser un nom de domaine complet (FQDN) pour un compartiment, ce qui présente encore plus d'avantages.
Recherchez « Hôtes virtuels » plus loin dans ce texte pour plus de détails sur les compartiments nommés FQDN.
Contrairement aux buckets, il n'y a presque aucune restriction sur les noms d'objets. Il peut s'agir de n'importe quelle chaîne UTF-8 d'une longueur maximale de 1 024 octets. Il est intéressant de noter que le nom de l'objet peut contenir une barre oblique (/), donc my/funny/picture.jpg
est un nom d'objet valide. Notez qu'il n'y a pas de répertoires ni de compartiments appelés my
et funny
- il s'agit en réalité d'un seul nom d'objet appelé my/funny/picture.jpg
et S3 ne se soucie pas du tout qu'il ressemble à une structure de répertoires.
L'URI complet d'une telle image pourrait être, par exemple :
s3://my-bucket/my/funny/picture.jpg
Les fichiers stockés dans S3 peuvent être privés ou publics. Les versions privées ne sont lisibles que par l'utilisateur qui les a téléchargées, tandis que les versions publiques peuvent être lues par n'importe qui. De plus, les fichiers publics sont accessibles via le protocole HTTP, et pas seulement à l'aide s3cmd
ou d'un outil similaire.
L'ACL (Access Control List) d'un fichier peut être définie au moment du téléchargement à l'aide des options --acl-public
ou --acl-private
avec les commandes s3cmd put
ou s3cmd sync
(voir ci-dessous).
Alternativement, l'ACL peut être modifiée pour les fichiers distants existants avec la commande s3cmd setacl --acl-public
(ou --acl-private
).
Accédez à https://aws.amazon.com/s3, cliquez sur le bouton « S'inscrire au service Web » dans la colonne de droite et procédez à l'enregistrement. Vous devrez fournir les détails de votre carte de crédit afin de permettre à Amazon de vous facturer l'utilisation de S3. À la fin, vous devriez avoir vos clés d'accès et secrètes.
Si vous configurez un utilisateur IAM distinct, la clé d'accès de cet utilisateur doit disposer d'au moins les autorisations suivantes pour pouvoir effectuer quoi que ce soit :
D'autres exemples de politiques sont disponibles sur https://docs.aws.amazon.com/AmazonS3/latest/dev/example-policies-s3.html
s3cmd --configure
Il vous sera demandé les deux clés - copiez-les et collez-les depuis votre e-mail de confirmation ou depuis la page de votre compte Amazon. Soyez prudent lorsque vous les copiez ! Ils sont sensibles à la casse et doivent être saisis avec précision, sinon vous continuerez à recevoir des erreurs concernant des signatures invalides ou similaires.
N'oubliez pas d'ajouter les autorisations s3:ListAllMyBuckets aux clés, sinon vous obtiendrez une erreur AccessDenied lors du test d'accès.
s3cmd ls
pour répertorier tous vos compartiments.Comme vous venez de commencer à utiliser S3, vous ne possédez actuellement aucun compartiment. La sortie sera donc vide.
s3cmd mb s3://my-new-bucket-name
Comme mentionné ci-dessus, les noms de compartiment doivent être uniques parmi tous les utilisateurs de S3. Cela signifie que les noms simples comme "test" ou "asdf" sont déjà pris et que vous devez inventer quelque chose de plus original. Pour démontrer autant de fonctionnalités que possible, créons un bucket nommé FQDN s3://public.s3tools.org
:
$ s3cmd mb s3://public.s3tools.org
Bucket 's3://public.s3tools.org' created
s3cmd ls
Vous devriez maintenant voir votre bucket fraîchement créé :
$ s3cmd ls
2009-01-28 12:34 s3://public.s3tools.org
$ s3cmd ls s3://public.s3tools.org
$
C'est effectivement vide.
$ s3cmd put some-file.xml s3://public.s3tools.org/somefile.xml
some-file.xml -> s3://public.s3tools.org/somefile.xml [1 of 1]
123456 of 123456 100% in 2s 51.75 kB/s done
Téléchargez une arborescence à deux répertoires dans le « répertoire » virtuel du bucket :
$ s3cmd put --recursive dir1 dir2 s3://public.s3tools.org/somewhere/
File 'dir1/file1-1.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-1.txt' [1 of 5]
File 'dir1/file1-2.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-2.txt' [2 of 5]
File 'dir1/file1-3.log' stored as 's3://public.s3tools.org/somewhere/dir1/file1-3.log' [3 of 5]
File 'dir2/file2-1.bin' stored as 's3://public.s3tools.org/somewhere/dir2/file2-1.bin' [4 of 5]
File 'dir2/file2-2.txt' stored as 's3://public.s3tools.org/somewhere/dir2/file2-2.txt' [5 of 5]
Comme vous pouvez le voir, nous n’avons pas eu besoin de créer le « répertoire » /somewhere
. En fait, il ne s'agit que d'un préfixe de nom de fichier, pas d'un véritable répertoire et il n'est pas nécessaire de le créer au préalable.
Au lieu d'utiliser put
avec l'option --recursive
, vous pouvez également utiliser la commande sync
:
$ s3cmd sync dir1 dir2 s3://public.s3tools.org/somewhere/
$ s3cmd ls s3://public.s3tools.org
DIR s3://public.s3tools.org/somewhere/
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
Utilisez --recursive (ou -r) pour lister tous les fichiers distants :
$ s3cmd ls --recursive s3://public.s3tools.org
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
2009-02-10 05:13 18 s3://public.s3tools.org/somewhere/dir1/file1-1.txt
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir1/file1-2.txt
2009-02-10 05:13 16 s3://public.s3tools.org/somewhere/dir1/file1-3.log
2009-02-10 05:13 11 s3://public.s3tools.org/somewhere/dir2/file2-1.bin
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir2/file2-2.txt
$ s3cmd get s3://public.s3tools.org/somefile.xml some-file-2.xml
s3://public.s3tools.org/somefile.xml -> some-file-2.xml [1 of 1]
123456 of 123456 100% in 3s 35.75 kB/s done
$ md5sum some-file.xml some-file-2.xml
39bcb6992e461b269b95b3bda303addf some-file.xml
39bcb6992e461b269b95b3bda303addf some-file-2.xml
Les sommes de contrôle du fichier d'origine correspondent à celles récupérées. On dirait que ça a fonctionné :-)
Pour récupérer une « arborescence de répertoires » entière à partir de S3, utilisez la fonction get récursive :
$ s3cmd get --recursive s3://public.s3tools.org/somewhere
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as './somewhere/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as './somewhere/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as './somewhere/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as './somewhere/dir2/file2-1.bin'
File s3://public.s3tools.org/somewhere/dir2/file2-2.txt saved as './somewhere/dir2/file2-2.txt'
Comme le répertoire de destination n'a pas été spécifié, s3cmd
a enregistré la structure des répertoires dans un répertoire de travail actuel ('.').
Il existe une différence importante entre :
get s3://public.s3tools.org/somewhere
et
get s3://public.s3tools.org/somewhere/
(notez la barre oblique finale)
s3cmd
utilise toujours la dernière partie du chemin, c'est-à-dire le mot après la dernière barre oblique, pour nommer les fichiers.
Dans le cas de s3://.../somewhere
la dernière partie du chemin est « quelque part » et donc la récupération récursive nomme les fichiers locaux comme quelque part/dir1, quelque part/dir2, etc.
D'un autre côté, dans s3://.../somewhere/
la dernière partie du chemin est vide et s3cmd ne créera que 'dir1' et 'dir2' sans le préfixe 'somewhere/' :
$ s3cmd get --recursive s3://public.s3tools.org/somewhere/ ~/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as '~/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as '~/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as '~/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as '~/dir2/file2-1.bin'
Voir? Il s'agit ~/dir1
et non ~/somewhere/dir1
comme c'était le cas dans l'exemple précédent.
Supprimez tout sous s3://public.s3tools.org/somewhere/
$ s3cmd del --recursive s3://public.s3tools.org/somewhere/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt deleted
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt deleted
...
Essayez maintenant de supprimer le bucket :
$ s3cmd rb s3://public.s3tools.org
ERROR: S3 error: 409 (BucketNotEmpty): The bucket you tried to delete is not empty
Aïe, nous avons oublié s3://public.s3tools.org/somefile.xml
. Nous pouvons quand même forcer le retrait du bucket :
$ s3cmd rb --force s3://public.s3tools.org/
WARNING: Bucket is not empty. Removing all the objects from it first. This may take some time...
File s3://public.s3tools.org/somefile.xml deleted
Bucket 's3://public.s3tools.org/' removed
L'utilisation de base est aussi simple que celle décrite dans la section précédente.
Vous pouvez augmenter le niveau de verbosité avec l'option -v
et si vous souhaitez vraiment savoir ce que fait le programme sous son capot, exécutez-le avec -d
pour voir toutes les sorties de « débogage ».
Après l'avoir configuré avec --configure
toutes les options disponibles sont insérées dans votre fichier ~/.s3cfg
. C'est un fichier texte prêt à être modifié dans votre éditeur de texte préféré.
Les commandes de transfert (put, get, cp, mv et sync) continuent le transfert même si un objet échoue. Si un échec se produit, l'échec est envoyé à stderr et l'état de sortie sera EX_PARTIAL (2). Si l'option --stop-on-error
est spécifiée ou si l'option de configuration stop_on_error est vraie, les transferts s'arrêtent et un code d'erreur approprié est renvoyé.
Pour plus d'informations, reportez-vous à la page d'accueil de S3cmd / S3tools.
Copyright (C) 2007-2023 TGRMN Software (https://www.tgrmn.com), Sodria SAS (https://www.sodria.com/) et contributeurs
Ce programme est un logiciel gratuit ; vous pouvez le redistribuer et/ou le modifier selon les termes de la licence publique générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, soit (à votre choix) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d’ADAPTATION À UN USAGE PARTICULIER. Voir la licence publique générale GNU pour plus de détails.