Cách đổi tên tên nhóm AWS S3


150

Sau tất cả các công việc khó khăn của việc di chuyển, v.v. Chỉ cần nhận ra rằng Nếu cần phục vụ nội dung bằng CNAME (ví dụ: media.abc.com). Tên nhóm cần bắt đầu với media.abc.com/S3/amazon.com để đảm bảo nó hoạt động hoàn hảo.

Chỉ cần nhận ra rằng S3 không cho phép đổi tên trực tiếp từ bảng điều khiển.

Có cách nào để giải quyết vấn đề này không?

Câu trả lời:


104

Tôi nghĩ cách duy nhất là tạo một thùng mới với tên chính xác và sau đó sao chép tất cả các đối tượng của bạn từ thùng cũ sang thùng mới. Bạn có thể làm điều đó bằng cách sử dụng Aws CLI.


2
Có bất kỳ khoản phí nào cho giải pháp trên @navjot không?
pavitran

@pavitran nope, đó vẫn là con đường để đi
Tashows

8
@Tashows pavitran đã hỏi về chaRges, không phải chaNges. Theo như tôi biết thực sự có chi phí cho việc sao chép các mục trong thùng, tôi tin rằng chi phí vận hành 1 GET và 1 PUT cho mỗi mục.
guival

5
@Tashows Trên thực tế có một mục nhập cho các hoạt động COPY trên bảng giá cho S3 , nó thực sự chỉ bằng chi phí khi thực hiện PUT (vì vậy không có chi phí NHẬN thêm).
guival

3
Lưu ý rằng bạn cũng có thể cắt và dán bằng bảng điều khiển web, cho những người không muốn làm điều này thông qua CLI.
mahemoff

241

Giải pháp

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

Giải trình

Không có chức năng đổi tên nhóm cho S3 vì về mặt kỹ thuật không có thư mục nào trong S3 nên chúng tôi phải xử lý mọi tệp trong nhóm.

Đoạn mã trên sẽ 1. tạo một nhóm mới, 2. sao chép các tập tin và 3. xóa nhóm cũ. Đó là nó.

Nếu bạn có nhiều tệp trong thùng của mình và bạn lo lắng về chi phí, hãy đọc tiếp. Đằng sau những gì xảy ra là tất cả các tệp trong nhóm được sao chép đầu tiên và sau đó bị xóa. Nó sẽ có chi phí không đáng kể nếu bạn có một vài nghìn tệp. Nếu không hãy kiểm tra câu trả lời này để xem điều này sẽ tác động đến bạn như thế nào.

Thí dụ

Trong ví dụ sau, chúng tôi tạo và điền vào nhóm cũ và sau đó đồng bộ hóa các tệp với thùng mới. Kiểm tra đầu ra của các lệnh để xem AWS làm gì.

> # 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
Câu trả lời này giống như câu trả lời được chấp nhận, ngoại trừ bài đăng này cung cấp một ví dụ từng bước rất hữu ích về cách thực hiện. (Tuy nhiên, ví dụ nên được rút ngắn. Tuy nhiên, không cần phải hiển thị việc tạo một thùng cũ ví dụ và sử dụng biến hậu tố.) Tuy nhiên, phần giải thích của câu trả lời này không làm tôi hài lòng. Nó nói rằng việc thiếu các thư mục trong S3 là lý do tại sao thủ tục khó xử này là bắt buộc. Vì câu hỏi ban đầu không đề cập đến các thư mục, tôi không hiểu làm thế nào giải thích việc không thể đổi tên các thùng S3.
LS

2
Đã thử phương pháp này ... có vẻ hiệu quả ... tuy nhiên vì một số lý do kỳ lạ, tôi không thể xem bất kỳ mục nào (hình ảnh). Tôi có thể điều hướng qua trình duyệt thông qua các mục trên bảng điều khiển s3 ... nhưng không thể xem chúng qua url hoặc tải xuống. Bất cứ ý tưởng tại sao? Quyền dường như là giống hệt nhau. Có một số quyền đặc biệt để tìm ra?
bmiskie

1
@duality_ bạn có thể thêm vào thông báo câu trả lời của mình về các quyền và bạn có thể sao chép các tệp bằng --acl bucket-owner-full-control(như trong câu trả lời đó )
Евгений Масленков 7/218

1
Lưu ý rằng bạn cũng cần chỉ định vùng, nếu không, các thùng mới của bạn sẽ ở Đông Hoa Kỳ (Bắc Virginia). Ví dụ: aws --region ap-southeast-2 s3 mb s3://new-bucket
cobberboy

1
Nếu bạn đã versioning, bạn sẽ cần phải sử dụng quản lý vòng đời sắp hết hạn phiên bản ... rõ ràng: docs.aws.amazon.com/AmazonS3/latest/dev/...
carlin.scott

38

Có lẽ phiên bản mới hơn của bộ công cụ AWS CLI đã cung cấp mvtùy chọn này.

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

Tôi đang đổi tên xô bằng lệnh sau:

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

9
Điều này làm việc cho tôi. Tuy nhiên, điều quan trọng cần lưu ý là new-bucketphải được tạo trước khi chạy lệnh. Ngoài ra, old-bucketsau đó sẽ trống nhưng KHÔNG bị xóa. Nếu bạn muốn xóa nó sau khi chuyển tất cả các tệp, hãy sử dụng lệnh sau (không có dấu ngoặc nhọn):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
Mabyn

Nếu thùng cũ được sử dụng ở bất cứ đâu, rõ ràng nên thực hiện tốt việc sao chép thùng, kiểm tra với đích mới và chỉ sau đó, xóa thùng cũ. aws s3 mvthực sự sao chép và xóa, vì vậy chi phí tài chính nên như nhau (tôi nghĩ).
Flimm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.