241 votes

Comment renommer le nom d'un Bucket AWS S3 ?

Après toutes les difficultés liées à la migration, etc. Je viens de réaliser que If doit servir le contenu en utilisant des CNAME (par exemple media.abc.com). Le nom du bucket doit commencer par media.abc.com/S3/amazon.com pour que cela fonctionne parfaitement.

Il faut savoir que S3 ne permet pas de renommer directement à partir de la console.

Existe-t-il un moyen de contourner ce problème ?

384voto

duality_ Points 2589

Solution

aws s3 mb s3://[new-bucket]
aws s3 sync s3://[old-bucket] s3://[new-bucket]
aws s3 rb --force s3://[old-bucket]

Explication

Il n'y a pas de fonctionnalité de renommage pour S3 car il n'y a techniquement pas de dossiers dans S3 et nous devons donc gérer chaque fichier à l'intérieur du seau.

Le code ci-dessus va 1. créer un nouveau panier, 2. copier les fichiers et 3. supprimer l'ancien panier. C'est tout.

Si vous avez beaucoup de fichiers dans votre seau et que vous vous inquiétez des coûts, lisez ce qui suit. En coulisses, tous les fichiers contenus dans la corbeille sont d'abord copiés, puis supprimés. Le coût devrait être insignifiant si vous avez quelques milliers de fichiers. Dans le cas contraire, vérifiez cette réponse pour voir quel serait l'impact sur vous.

Exemple

Dans l'exemple suivant, nous créons et remplissons l'ancien seau, puis synchronisons les fichiers avec le nouveau. Vérifiez la sortie des commandes pour voir ce que fait AWS.

> # bucket suffix so we keep it unique
> suffix="ieXiy2"  # used `pwgen -1 -6` to get this
>
> # populate old bucket
> echo "asdf" > asdf.txt
> echo "yxcv" > yxcv.txt
> aws s3 mb s3://old-bucket-$suffix
make_bucket: old-bucket-ieXiy2
> aws s3 cp asdf.txt s3://old-bucket-$suffix/asdf.txt
upload: ./asdf.txt to s3://old-bucket-ieXiy2/asdf.txt
> aws s3 cp yxcv.txt s3://old-bucket-$suffix/yxcv.txt
upload: ./yxcv.txt to s3://old-bucket-ieXiy2/yxcv.txt
>
> # "rename" to new bucket
> aws s3 mb s3://new-bucket-$suffix
make_bucket: new-bucket-ieXiy2
> aws s3 sync s3://old-bucket-$suffix s3://new-bucket-$suffix
copy: s3://old-bucket-ieXiy2/yxcv.txt to s3://new-bucket-ieXiy2/yxcv.txt
copy: s3://old-bucket-ieXiy2/asdf.txt to s3://new-bucket-ieXiy2/asdf.txt
> aws s3 rb --force s3://old-bucket-$suffix
delete: s3://old-bucket-ieXiy2/asdf.txt
delete: s3://old-bucket-ieXiy2/yxcv.txt
remove_bucket: old-bucket-ieXiy2

136voto

liferacer Points 978

Je pense que la seule solution est de créer un nouveau bucket avec le nom correct et de copier tous les objets de l'ancien bucket vers le nouveau bucket. Vous pouvez le faire en utilisant Aws CLI.

61voto

Il est probable qu'une version ultérieure du kit d'outils AWS CLI ait fourni l'option mv opción.

$ aws --version
aws-cli/1.15.30 Python/3.6.5 Darwin/17.6.0 botocore/1.10.30

Je renomme les buckets à l'aide de la commande suivante :

aws s3 mv s3://old-bucket s3://new-bucket --recursive

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X