Cara mengganti nama AWS S3 Bucket name

150

Setelah semua kerja keras migrasi dll. Sadarilah bahwa Jika perlu menyajikan konten menggunakan CNAME (mis. Media.abc.com). Nama bucket harus dimulai dengan media.abc.com/S3/amazon.com untuk memastikannya berfungsi dengan sempurna.

Sadarilah bahwa S3 tidak mengizinkan penggantian nama langsung dari konsol.

Apakah ada cara untuk mengatasi ini?

Carson Lee
sumber

Jawaban:

104

Saya pikir satu-satunya cara adalah membuat ember baru dengan nama yang benar dan kemudian menyalin semua objek Anda dari ember lama ke ember baru. Anda dapat melakukannya menggunakan Aws CLI.

liferacer
sumber
2
apakah ada biaya untuk solusi di atas @navjot?
pavitran
@pavitran nggak, itu masih jalan
Tashows
8
@Tashows pavitran bertanya tentang chaRges, bukan chaNges. Sejauh yang saya tahu memang ada biaya untuk menyalin item ember, saya percaya 1 GET dan 1 PUT biaya operasi untuk setiap item.
guival
5
@Tashows Sebenarnya sebenarnya ada entri untuk operasi COPY di tabel penetapan harga untuk S3 , sebenarnya biaya yang sama dengan melakukan PUT (jadi tidak ada biaya GET tambahan).
guival
3
Catatan Anda juga dapat memotong dan menempel menggunakan konsol web, untuk orang-orang yang tidak ingin melakukan ini melalui CLI.
mahemoff
241

Larutan

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

Penjelasan

Tidak ada fungsi ganti nama bucket untuk S3 karena secara teknis tidak ada folder di S3 sehingga kami harus menangani setiap file di dalam bucket.

Kode di atas 1. akan membuat ember baru, 2. menyalin file dan 3. menghapus ember lama. Itu dia.

Jika Anda memiliki banyak file di keranjang dan Anda khawatir dengan biayanya, baca terus. Di belakang layar yang terjadi adalah bahwa semua file di dalam ember disalin terlebih dahulu dan kemudian dihapus. Seharusnya biaya yang tidak signifikan jika Anda memiliki beberapa ribu file. Kalau tidak, periksa jawaban ini untuk melihat bagaimana ini akan berdampak pada Anda.

Contoh

Dalam contoh berikut ini kami membuat dan mengisi ember lama dan kemudian menyinkronkan file ke yang baru. Periksa output dari perintah untuk melihat apa yang dilakukan 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
dualitas_
sumber
8
Jawaban ini sama dengan jawaban yang diterima, kecuali postingan ini memberikan contoh langkah demi langkah yang sangat membantu tentang bagaimana melakukannya. (Namun, contohnya harus dipersingkat. Tidak perlu menunjukkan pembuatan contoh ember lama dan menggunakan variabel suffix.) Namun, bagian penjelasan dari jawaban ini tidak memuaskan saya. Dikatakan kurangnya folder di S3 adalah mengapa prosedur canggung ini diperlukan. Karena pertanyaan awal tidak menyebutkan folder, saya tidak mengerti bagaimana itu menjelaskan ketidakmampuan untuk mengganti nama bucket S3.
LS
2
Mencoba metode ini ... tampaknya berhasil ... namun untuk beberapa alasan aneh saya tidak dapat melihat salah satu item (gambar). Saya dapat menavigasi melalui browser melalui item-item di dashboard s3 ... tetapi tidak dapat melihatnya melalui url atau mengunduhnya. Ada ide mengapa? Izin tampaknya identik. Apakah ada izin khusus yang harus diwaspadai?
bmiskie
1
@duality_ dapatkah Anda menambahkan pemberitahuan jawaban tentang izin dan Anda dapat menyalin file dengan --acl bucket-owner-full-control(seperti dalam jawaban itu )
Евгений Масленков
1
Perhatikan bahwa Anda perlu menentukan wilayah juga, jika tidak, keranjang baru Anda akan berada di AS Timur (Virginia Utara). Misalnya aws --region ap-southeast-2 s3 mb s3://new-bucket
cobberboy
1
Jika Anda memiliki versi, Anda harus menggunakan manajemen siklus hidup untuk kedaluwarsa versi ... rupanya: docs.aws.amazon.com/AmazonS3/latest/dev/…
carlin.scott
38

Mungkin versi yang lebih baru dari toolkit AWS CLI menyediakan mvopsi.

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

Saya mengganti nama bucket menggunakan perintah berikut:

aws s3 mv s3://old-bucket s3://new-bucket --recursive
Richard A Quadling
sumber
9
Ini berhasil untuk saya. Namun, penting untuk dicatat bahwa new-bucketharus dibuat terlebih dahulu sebelum menjalankan perintah. Juga, old-bucketmaka akan kosong tetapi TIDAK dihapus. Jika Anda ingin menghapusnya setelah transfer semua file, gunakan perintah berikut (tanpa kurung sudut):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
Mabyn
Jika ember lama digunakan di mana saja, jelas merupakan praktik yang baik untuk menyalin ember, uji dengan tujuan baru, dan hanya kemudian, hapus ember lama. aws s3 mvsebenarnya menyalin dan menghapus, jadi biaya keuangannya harus sama (saya pikir).
Flimm