Как переименовать AWS S3 Bucket в имя

151

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

Просто поймите, что S3 не позволяет прямое переименование из консоли.

Есть ли способы обойти это?

Карсон Ли
источник

Ответы:

104

Я думаю, что единственный способ - создать новое ведро с правильным именем и затем скопировать все ваши объекты из старого в новое. Вы можете сделать это с помощью Aws CLI.

liferacer
источник
2
есть ли плата за вышеуказанное решение @navjot?
Павитран
@pavitran Нет, это все еще путь
Ташоу
8
@Tashows pavitran спрашивал о chaRges, а не о chaNges. Насколько я знаю, действительно есть плата за копирование элементов корзины, я считаю, что стоимость операций 1 GET и 1 PUT для каждого элемента.
Гиваль
5
@Tashows На самом деле в таблице ценообразования для S3 есть запись для операций COPY , это фактически та же стоимость, что и для PUT (поэтому нет дополнительной стоимости GET).
Гиваль
3
Обратите внимание, что вы также можете вырезать и вставлять с помощью веб-консоли, для людей, которые не хотят делать это через CLI.
mahemoff
243

Решение

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
duality_
источник
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
cobberboy
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фактически копирует и удаляет, поэтому финансовые затраты должны быть одинаковыми (я думаю).
Флим