답변:
유일한 방법은 올바른 이름으로 새 버킷을 만든 다음 이전 버킷에서 새 버킷으로 모든 객체를 복사하는 것입니다. Aws CLI를 사용하여 수행 할 수 있습니다.
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
--acl bucket-owner-full-control
(즉,에서 같은 답 )
aws --region ap-southeast-2 s3 mb s3://new-bucket
아마도 이후 버전의 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
new-bucket
명령을 실행하기 전에 먼저 작성해야합니다. 또한는 old-bucket
비어 있지만 삭제되지는 않습니다. 모든 파일을 전송 한 후 파일을 삭제하려면 다음 명령을 사용하십시오 (각괄호 제외).aws s3api delete-bucket --bucket <old-bucket> --region <region id>
aws s3 mv
실제로 복사하고 삭제하므로 재정 비용이 같아야합니다 (제 생각에).