Mettre à jour
Comme le souligne alberge (+1), de nos jours, l'excellente interface de ligne de commande AWS offre l'approche la plus polyvalente pour interagir avec (presque) tout ce qui concerne AWS - elle couvre la plupart des API de services et propose également des commandes S3 de plus haut niveau pour gérer votre cas d'utilisation spécifique, consultez la référence AWS CLI pour S3 :
- sync - Synchronise les répertoires et les préfixes S3. Votre cas d'utilisation est couvert par l' exemple 2 (une utilisation plus fine avec
--exclude
, --include
et la gestion des préfixes, etc. est également disponible):
La commande de synchronisation suivante synchronise les objets sous un préfixe spécifié et un compartiment avec des objets sous un autre préfixe et compartiment spécifié en copiant des objets s3. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Pour être complet, je mentionnerai que les commandes S3 de niveau inférieur sont également toujours disponibles via la sous-commande s3api , ce qui permettrait de traduire directement toute solution basée sur le SDK vers l'AWS CLI avant d'adopter éventuellement sa fonctionnalité de niveau supérieur.
Réponse initiale
Le déplacement de fichiers entre les compartiments S3 peut être réalisé au moyen de PUT Object - Copy API (suivi de DELETE Object ):
Cette implémentation de l'opération PUT crée une copie d'un objet qui est déjà stocké dans Amazon S3. Une opération de copie PUT équivaut à effectuer un GET puis un PUT. L'ajout de l'en-tête de demande, x-amz-copy-source, permet à l'opération PUT de copier l'objet source dans le compartiment de destination. La source
Il existe des exemples respectifs pour tous les kits SDK AWS existants, consultez Copie d'objets en une seule opération . Naturellement, une solution basée sur des scripts serait le premier choix évident ici, donc Copier un objet à l'aide du kit AWS SDK pour Ruby pourrait être un bon point de départ; si vous préférez Python à la place, la même chose peut être obtenue via boto bien sûr, voir la méthode copy_key()
dans la documentation de l'API S3 de boto .
PUT Object
copie uniquement les fichiers, vous devrez donc supprimer explicitement un fichier via DELETE Object
encore après une opération de copie réussie, mais ce ne sera que quelques lignes supplémentaires une fois que le script global gérant le bucket et les noms de fichiers sera en place (il existe également des exemples respectifs , voir par exemple Suppression d'un objet par requête ).