Як перейменувати ім'я відра AWS S3


150

Після всіх жорстких робіт з міграції тощо. Просто зрозумійте, що якщо потрібно подавати вміст за допомогою CNAME (наприклад, media.abc.com). Ім'я відра потрібно починати з media.abc.com/S3/amazon.com, щоб забезпечити його бездоганну роботу.

Просто зрозумійте, що S3 не дозволяє пряме перейменування з консолі.

Чи є способи обійти це?

Відповіді:


104

Я думаю, що єдиний спосіб - створити нове відро з правильною назвою, а потім скопіювати всі свої об’єкти зі старого відра в нове. Ви можете зробити це за допомогою Aws CLI.


2
чи є плата за вищезазначене рішення @navjot?
павітран

@pavitran nope, це все-таки шлях
Tashows

8
@Tashows pavitran запитував про звинувачення, а не про ChaNges. Наскільки я знаю, за копіювання предметів відра є плата, я вважаю, що 1 GET і 1 операція PUT для кожного предмета.
guival

5
@Tashows Насправді в таблиці цін на S3 фактично є запис для операцій КОПІЮВАННЯ , це фактично така ж вартість, як і PUT (тому додаткові витрати GET немає).
guival

3
Зауважте, ви також можете вирізати та вставити за допомогою веб-консолі для людей, які не хочуть цього робити через CLI.
mahemoff

241

Рішення

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

Пояснення

Для S3 немає функцій перейменування ковша, тому що в S3 технічно немає папок, тому нам доводиться обробляти кожен файл у відрі.

Код, наведений вище: 1. створить нове відро, 2. скопіює файли та 3. видалить старе. Це воно.

Якщо у вашому відрі багато файлів і ви турбуєтесь про витрати, тоді читайте далі. За лаштунками відбувається те, що всі файли у відрі спочатку копіюються, а потім видаляються. Це має коштувати незначної суми, якщо у вас є кілька тисяч файлів. Інакше перевірте цю відповідь, щоб побачити, як це вплине на вас.

Приклад

У наступному прикладі ми створюємо та заповнюємо старе відро, а потім синхронізуємо файли з новим. Перевірте вихід команд, щоб побачити, що робить 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
Ця відповідь така ж, як і прийнята відповідь, за винятком того, що ця публікація дає дуже корисний покроковий приклад того, як це зробити. (Однак приклад слід скоротити. Немає необхідності показувати створення прикладу старого відра та використання змінної суфікса.) Однак частина пояснення цієї відповіді мене не влаштовує. Він говорить про відсутність папок у S3, тому необхідна ця незручна процедура. Оскільки в оригінальному запитанні не згадувалися папки, я не розумію, як це пояснює неможливість перейменувати відра S3.
LS

2
Перепробуваний цей метод ... виявився спрацьованим ... однак, з якихось дивних причин я не можу переглянути жоден предмет (зображення). Я можу переходити через браузер через елементи на панелі інструментів s3 ..., але не можу переглядати їх через URL або завантажувати їх. Будь-які ідеї чому? Дозвіли здаються однаковими. Чи є якісь спеціальні дозволи, на які слід звернути увагу?
bmiskie

1
@duality_ чи можете ви додати у відповідь сповіщення про дозволи та про те, що ви можете скопіювати файли за допомогою --acl bucket-owner-full-control(як у цій відповіді )
Евгений Масленков

1
Зауважте, що вам також потрібно вказати регіон, інакше ваші нові відра будуть знаходитися на Сході США (Північна Вірджинія). Напр. aws --region ap-southeast-2 s3 mb s3://new-bucket
коббербой

1
Якщо ви ввімкнули версію, вам потрібно буде використовувати управління життєвим циклом, щоб закінчити термін дії версій ... мабуть: docs.aws.amazon.com/AmazonS3/latest/dev/…
carlin.scott

38

Ймовірно, пізніша версія набору інструментів AWS CLI надала mvможливість.

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

Я перейменую відра за допомогою наступної команди:

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

9
Це працювало для мене. Однак важливо зауважити, що new-bucketспочатку слід створити команду перед запуском команди. Також old-bucketзаповіт буде порожнім, але НЕ видалено. Якщо ви хочете видалити його після передачі всіх файлів, використовуйте таку команду (без кутових дужок):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
Mabyn

Якщо старе відро використовується де-небудь, очевидно, добре скопіювати відро, протестувати з новим пунктом призначення та лише після цього видалити старе відро. aws s3 mvнасправді копіює та видаляє, тому фінансові витрати повинні бути однаковими (я думаю).
Flimm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.