Comment renommer le nom du compartiment AWS S3

151

Après tous les travaux difficiles de migration, etc. Sachez simplement que si vous devez servir le contenu en utilisant CNAME (par exemple, media.abc.com). Le nom du bucket doit commencer par media.abc.com/S3/amazon.com pour s'assurer qu'il fonctionne parfaitement.

Sachez simplement que S3 n'autorise pas le changement de nom direct depuis la console.

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

Carson Lee
la source

Réponses:

104

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

liferacer
la source
2
y a-t-il des frais pour la solution ci-dessus @navjot?
pavitran
@pavitran non, c'est toujours le chemin à parcourir
Tashows
8
@Tashows pavitran posait des questions sur les chaRges, pas sur les chaNges. Autant que je sache, il y a effectivement des frais pour copier des éléments de seau, je crois que 1 GET et 1 PUT coûtent l'opération pour chaque élément.
guival
5
@Tashows En fait, il y a en fait une entrée pour les opérations COPY sur la table de tarification de S3 , c'est en fait le même coût que de faire un PUT (donc il n'y a pas de coût GET supplémentaire).
guival
3
Notez que vous pouvez également couper et coller à l'aide de la console Web, pour les personnes qui ne souhaitent pas le faire via CLI.
mahemoff
243

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 de compartiment pour S3 car il n'y a techniquement aucun dossier dans S3, nous devons donc gérer chaque fichier dans le compartiment.

Le code ci-dessus 1. créera un nouveau compartiment, 2. copiera les fichiers et 3. supprimera l'ancien compartiment. C'est tout.

Si vous avez beaucoup de fichiers dans votre compartiment et que vous vous inquiétez des coûts, lisez la suite. Dans les coulisses, tous les fichiers du bucket sont d'abord copiés puis supprimés. Cela devrait coûter un montant insignifiant si vous avez quelques milliers de fichiers. Sinon, vérifiez cette réponse pour voir comment cela vous affecterait.

Exemple

Dans l'exemple suivant, nous créons et remplissons l'ancien bucket, 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
dualité_
la source
8
Cette réponse est la même que la réponse acceptée, sauf que cette publication donne un exemple étape par étape très utile de la façon de le faire. (L'exemple devrait être raccourci, cependant. Il n'est pas nécessaire de montrer la création d'un ancien bucket d'exemple et l'utilisation d'une variable de suffixe.) La partie explication de cette réponse ne me satisfait pas, cependant. Il dit que le manque de dossiers dans S3 est la raison pour laquelle cette procédure délicate est nécessaire. Étant donné que la question d'origine ne mentionnait pas les dossiers, je ne comprends pas comment cela explique l'incapacité de renommer les compartiments S3.
LS
2
J'ai essayé cette méthode ... semblait fonctionner ... mais pour une raison étrange, je ne peux voir aucun des éléments (images). Je peux naviguer via le navigateur à travers les éléments du tableau de bord s3 ... mais je ne peux pas les afficher via une URL ou les télécharger. Des idées pourquoi? Les autorisations semblent être identiques. Y a-t-il des autorisations spéciales à rechercher?
bmiskie le
1
@duality_ pouvez-vous ajouter dans votre réponse une notification concernant les autorisations et avec lequel vous pouvez copier des fichiers --acl bucket-owner-full-control(comme dans cette réponse )
Евгений Масленков
1
Notez que vous devez également spécifier la région, sinon vos nouveaux compartiments seront situés dans la région USA Est (Virginie du Nord). Par exemple aws --region ap-southeast-2 s3 mb s3://new-bucket
cobberboy
1
Si vous avez activé la gestion des versions, vous devrez utiliser la gestion du cycle de vie pour faire expirer les versions ... apparemment: docs.aws.amazon.com/AmazonS3/latest/dev/…
carlin.scott
38

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

$ 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
Richard A Quadling
la source
9
Cela a fonctionné pour moi. Cependant, il est important de noter que le new-bucketdoit être créé avant d'exécuter la commande. De plus, le old-bucketsera alors vide mais PAS supprimé. Si vous souhaitez le supprimer après le transfert de tous les fichiers, utilisez la commande suivante (sans les crochets angulaires):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
Mabyn
Si l'ancien bucket est utilisé n'importe où, il est évidemment recommandé de copier le bucket, de tester avec la nouvelle destination, et seulement ensuite, de supprimer l'ancien bucket. aws s3 mveffectivement copie et supprime, donc les coûts financiers devraient être les mêmes (je pense).
Flimm