So benennen Sie den Namen des AWS S3-Buckets um


150

Nach all den harten Arbeiten der Migration usw. Stellen Sie einfach fest, dass Sie den Inhalt mithilfe von CNAME (z. B. media.abc.com) bereitstellen müssen. Der Bucket-Name muss mit media.abc.com/S3/amazon.com beginnen, damit er einwandfrei funktioniert.

Beachten Sie nur, dass S3 kein direktes Umbenennen von der Konsole aus zulässt.

Gibt es Möglichkeiten, dies zu umgehen?

Antworten:


103

Ich denke, die einzige Möglichkeit besteht darin, einen neuen Bucket mit dem richtigen Namen zu erstellen und dann alle Ihre Objekte vom alten Bucket in den neuen Bucket zu kopieren. Sie können dies mit Aws CLI tun.


2
Gibt es Gebühren für die oben genannte Lösung @navjot?
Pavitran

@pavitran nein, das ist noch der
richtige

8
@Tashows pavitran fragte nach chaRges, nicht nach chaNges. Soweit ich weiß, fallen für das Kopieren von Eimerartikeln tatsächlich Gebühren an. Ich glaube, dass für jeden Artikel 1 GET- und 1 PUT-Betriebskosten anfallen.
Guival

5
@Tashows Tatsächlich gibt es in der Preistabelle für S3 tatsächlich einen Eintrag für COPY-Vorgänge. Es sind tatsächlich genau die gleichen Kosten wie bei einem PUT (es fallen also keine zusätzlichen GET-Kosten an).
Guival

3
Beachten Sie, dass Sie auch über die Webkonsole ausschneiden und einfügen können, wenn Sie dies nicht über die CLI tun möchten.
Mahemoff

241

Lösung

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

Erläuterung

Es gibt keine Umbenennungs-Bucket-Funktionalität für S3, da es in S3 technisch keine Ordner gibt, sodass wir jede Datei im Bucket verarbeiten müssen.

Der obige Code erstellt 1. einen neuen Bucket, 2. kopiert Dateien und 3. löscht den alten Bucket. Das ist es.

Wenn Sie viele Dateien in Ihrem Eimer haben und sich Sorgen über die Kosten machen, lesen Sie weiter. Hinter den Kulissen werden alle Dateien im Bucket zuerst kopiert und dann gelöscht. Es sollte einen unbedeutenden Betrag kosten, wenn Sie ein paar tausend Dateien haben. Überprüfen Sie andernfalls diese Antwort , um festzustellen , wie sich dies auf Sie auswirken würde.

Beispiel

Im folgenden Beispiel erstellen und füllen wir den alten Bucket und synchronisieren dann die Dateien mit dem neuen. Überprüfen Sie die Ausgabe der Befehle, um festzustellen, was AWS tut.

> # 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

8
Diese Antwort ist die gleiche wie die akzeptierte Antwort, außer dass dieser Beitrag ein sehr hilfreiches Schritt-für-Schritt-Beispiel dafür enthält. (Das Beispiel sollte jedoch gekürzt werden. Es ist nicht erforderlich, die Erstellung eines alten Beispiel-Buckets und die Verwendung einer Suffix-Variablen zu zeigen.) Der Erklärungsteil dieser Antwort befriedigt mich jedoch nicht. Das Fehlen von Ordnern in S3 ist der Grund, warum dieses umständliche Verfahren erforderlich ist. Da in der ursprünglichen Frage keine Ordner erwähnt wurden, verstehe ich nicht, wie dies die Unfähigkeit erklärt, S3-Buckets umzubenennen.
LS

2
Versuchte diese Methode ... schien zu funktionieren ... aber aus irgendeinem seltsamen Grund kann ich keine der Elemente (Bilder) anzeigen. Ich kann über den Browser durch die Elemente im s3-Dashboard navigieren ... kann sie jedoch nicht über eine URL anzeigen oder herunterladen. Irgendwelche Ideen warum? Berechtigungen scheinen identisch zu sein. Gibt es spezielle Berechtigungen, auf die Sie achten müssen?
Bmiskie

1
@duality_ können Sie in Ihre Antwort Benachrichtigung über Berechtigungen hinzufügen und dass Sie Dateien mit --acl bucket-owner-full-control(wie in dieser Antwort ) kopieren können
Евгений Масленков

1
Beachten Sie, dass Sie auch die Region angeben müssen, da sich Ihre neuen Eimer sonst im US-Osten (North Virginia) befinden. ZB aws --region ap-southeast-2 s3 mb s3://new-bucket
Cobberboy

1
Wenn Sie die Versionierung aktiviert
carlin.scott

37

Wahrscheinlich bot eine spätere Version des AWS CLI-Toolkits die mvOption.

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

Ich benenne Buckets mit dem folgenden Befehl um:

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

9
Das hat bei mir funktioniert. Es ist jedoch wichtig zu beachten, dass das new-bucketzuerst erstellt werden muss, bevor der Befehl ausgeführt wird. Außerdem ist das old-bucketdann leer, aber NICHT gelöscht. Wenn Sie es nach der Übertragung aller Dateien löschen möchten, verwenden Sie den folgenden Befehl (ohne die spitzen Klammern):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
Mabyn

Wenn der alte Bucket irgendwo verwendet wird, empfiehlt es sich offensichtlich, den Bucket zu kopieren, mit dem neuen Ziel zu testen und erst dann den alten Bucket zu löschen. aws s3 mvkopiert und löscht tatsächlich, daher sollten die finanziellen Kosten gleich sein (glaube ich).
Flimm
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.