AWS S3 버킷 이름을 바꾸는 방법


150

마이그레이션 등의 모든 힘든 작업 후에 CNAME을 사용하여 콘텐츠를 제공해야하는 경우 (예 : media.abc.com) 알아 두십시오. 버킷 이름은 media.abc.com/S3/amazon.com으로 시작해야 완벽하게 작동합니다.

S3는 콘솔에서 직접 이름을 바꿀 수 없습니다.

이 문제를 해결할 방법이 있습니까?

답변:


104

유일한 방법은 올바른 이름으로 새 버킷을 만든 다음 이전 버킷에서 새 버킷으로 모든 객체를 복사하는 것입니다. Aws CLI를 사용하여 수행 할 수 있습니다.


2
위의 솔루션 @navjot에 대한 요금이 있습니까?
pavitran

@pavitran nope, 그것은 여전히 ​​갈 길입니다
Tashows

8
@Tashows pavitran은 chageges가 아닌 chaRges에 대해 질문했습니다. 버킷 항목을 복사하는 데 실제로 요금이 부과되는 한, 각 항목에 대해 1 GET 및 1 PUT 운영 비용이 있다고 생각합니다.
guival

5
@Tashows 실제로 S3가격표 에 COPY 작업 항목 이 실제로 있습니다. 실제로 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
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실제로 복사하고 삭제하므로 재정 비용이 같아야합니다 (제 생각에).
Flimm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.