Jak zmienić nazwę AWS S3 Bucket


150

Po wszystkich trudnych pracach migracyjnych itp. Po prostu zdaj sobie sprawę, że jeśli potrzebujesz, aby obsługiwać zawartość za pomocą CNAME (np. Media.abc.com). Nazwa zasobnika musi zaczynać się od media.abc.com/S3/amazon.com, aby zapewnić jej idealne działanie.

Po prostu uświadom sobie, że S3 nie zezwala na bezpośrednią zmianę nazwy z konsoli.

Czy są jakieś sposoby obejścia tego?

Odpowiedzi:


104

Myślę, że jedynym sposobem jest utworzenie nowego zasobnika o poprawnej nazwie, a następnie skopiowanie wszystkich obiektów ze starego zasobnika do nowego zasobnika. Możesz to zrobić za pomocą interfejsu wiersza polecenia Aws.


2
czy za powyższe rozwiązanie @navjot są jakieś opłaty?
pavitran

@pavitran nope, to wciąż jest droga
Tashows

8
@Tashows pavitran pytał o zmiany, a nie o zmiany. O ile wiem, za kopiowanie elementów wiadra rzeczywiście są naliczane opłaty, uważam, że koszt operacji 1 GET i 1 PUT dla każdego elementu.
guival

5
@Tashows Właściwie w tabeli cen dla S3 jest wpis dotyczący operacji COPY , w rzeczywistości jest to taki sam koszt jak wykonanie PUT (więc nie ma dodatkowego kosztu GET).
guival

3
Zauważ, że możesz również wycinać i wklejać za pomocą konsoli internetowej, dla osób, które nie chcą tego robić przez CLI.
mahemoff

241

Rozwiązanie

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

Wyjaśnienie

Nie ma funkcji zmiany nazwy zasobnika dla S3, ponieważ technicznie nie ma folderów w S3, więc musimy obsłużyć każdy plik w zasobniku.

Powyższy kod 1. utworzy nowy zasobnik, 2. skopiuje pliki i 3. usunie stary zasobnik. Otóż ​​to.

Jeśli masz dużo plików w swoim wiadrze i martwisz się o koszty, czytaj dalej. Za kulisami dzieje się tak, że wszystkie pliki w zasobniku są najpierw kopiowane, a następnie usuwane. Jeśli masz kilka tysięcy plików, powinno to kosztować niewielką kwotę. W przeciwnym razie sprawdź tę odpowiedź, aby zobaczyć, jak to wpłynie na Ciebie.

Przykład

W poniższym przykładzie tworzymy i zapełniamy stary zasobnik, a następnie synchronizujemy pliki z nowym. Sprawdź dane wyjściowe poleceń, aby zobaczyć, co robi 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

8
Ta odpowiedź jest taka sama, jak zaakceptowana odpowiedź, z wyjątkiem tego, że ta wiadomość zawiera bardzo pomocny przykład krok po kroku, jak to zrobić. (Przykład należy jednak skrócić. Nie ma potrzeby przedstawiania tworzenia przykładowego starego wiadra i używania zmiennej typu sufiks). Część wyjaśniająca tej odpowiedzi mnie jednak nie satysfakcjonuje. Mówi się, że brak folderów w S3 jest powodem, dla którego ta niezręczna procedura jest wymagana. Ponieważ w oryginalnym pytaniu nie było wzmianki o folderach, nie rozumiem, jak to wyjaśnia niemożność zmiany nazw zasobników S3.
LS

2
Wypróbowałem tę metodę ... wydawało się, że działa ... jednak z jakiegoś dziwnego powodu nie mogę wyświetlić żadnego elementu (zdjęć). Mogę poruszać się za pomocą przeglądarki po elementach na desce rozdzielczej s3 ... ale nie mogę ich wyświetlić za pośrednictwem adresu URL ani pobrać. Jakieś pomysły, dlaczego? Uprawnienia wydają się być identyczne. Czy są jakieś specjalne uprawnienia, na które należy zwrócić uwagę?
bmiskie

1
@duality_ czy możesz dodać do swojej odpowiedzi powiadomienie o uprawnieniach i możliwości kopiowania plików --acl bucket-owner-full-control(jak w tej odpowiedzi )
Евгений Масленков

1
Pamiętaj, że musisz również określić region, w przeciwnym razie nowe zasobniki będą znajdować się w wschodnich stanach USA (Północna Wirginia). Np. aws --region ap-southeast-2 s3 mb s3://new-bucket
cobberboy

1
Jeśli masz włączoną wersję, będziesz musiał użyć zarządzania cyklem życia, aby wygaśnąć
carlin.scott

38

Prawdopodobnie późniejsza wersja zestawu narzędzi AWS CLI zapewniła taką mvopcję.

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

Zmieniam nazwy zasobników za pomocą następującego polecenia:

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

9
To zadziałało dla mnie. Należy jednak pamiętać, że new-bucketprzed uruchomieniem polecenia należy najpierw utworzyć. Ponadto old-bucketbędzie wtedy pusty, ale NIE zostanie usunięty. Jeśli chcesz go usunąć po przesłaniu wszystkich plików, użyj następującego polecenia (bez nawiasów kątowych):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
Mabyn

Jeśli stary zasobnik jest używany w dowolnym miejscu, oczywiście dobrą praktyką jest skopiowanie go, przetestowanie z nowym miejscem docelowym, a dopiero potem usunięcie starego zasobnika. aws s3 mvfaktycznie kopiuje i usuwa, więc koszty finansowe powinny być takie same (myślę).
Flimm
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.