web-dev-qa-db-fra.com

Comment renommer AWS S3 Bucket name

Après tous les travaux difficiles de la migration, etc. Sachez simplement que Si le besoin est de servir le contenu en utilisant CNAME (par exemple, media.abc.com). Le nom du compartiment doit commencer par media.abc.com/S3/Amazon.com pour garantir son fonctionnement parfait.

Sachez juste que S3 n'autorise pas le renommage direct depuis la console.

Y a-t-il des moyens de contourner ce problème?

129
Carson Lee

Je pense que le seul moyen est de créer un nouveau compartiment avec le nom correct, puis de copier tous vos objets de l’ancien au nouveau compartiment. Vous pouvez le faire en utilisant Aws CLI.

88
liferacer

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 compartiment renommé pour S3 car, techniquement, il n'y a pas de dossiers dans S3. Nous devons donc gérer tous les fichiers du compartiment.

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

Si vous avez beaucoup de fichiers dans votre panier et que vous vous inquiétez des coûts, lisez la suite. En coulisse, tous les fichiers du compartiment sont d'abord copiés, puis supprimés. Cela devrait coûter un montant insignifiant si vous avez quelques milliers de fichiers. Sinon, cochez cette réponse pour voir quel impact cela aurait sur vous.

Exemple

Dans l'exemple suivant, nous créons et remplissons l'ancien compartiment, puis synchronisons les fichiers avec le nouveau. Vérifiez le résultat 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
199
duality_

Une version ultérieure de la boîte à outils AWS CLI a probablement fourni l'option mv.

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

Je renomme des compartiments à l'aide de la commande suivante:

aws s3 mv s3://old-bucket s3://new-bucket --recursive
25
Richard A Quadling