최소 비용으로 두 S3 버킷간에 파일을 이동하는 방법은 무엇입니까?


44

Amazon S3 버킷에 수백만 개의 파일이 있으며 이러한 파일을 최소 비용으로 또는 가능한 경우 비용없이 다른 버킷과 폴더로 옮기고 싶습니다. 모든 버킷은 동일한 영역에 있습니다.

어떻게 할 수 있습니까?

답변:


53

수백만은 큰 숫자입니다. 나중에 다시 설명하겠습니다.

접근 방식에 관계없이 기본 메커니즘은 한 버킷에서 다른 버킷으로 직접 복사해야합니다. 이러한 방식으로 (버킷이 같은 지역에 있기 때문에) 대역폭에 대한 비용이 발생하지 않습니다. 다른 접근 방식은 단순히 비효율적입니다 (예 : 파일 다운로드 및 다시 업로드).

버킷 사이의 복사는 'PUT 복사'를 사용하여 수행됩니다. 즉 'x-amz-copy-source'헤더를 포함하는 PUT 요청입니다. 이것은 COPY 요청으로 분류됩니다. 파일이 복사되고 기본적으로 관련 메타 데이터가 복사됩니다. ACL을 동시에 설정하려면 'x-amz-acl'을 올바른 값으로 포함해야합니다 (그렇지 않으면 기본값은 개인용 임). COPY 요청에 대해 요금이 청구됩니다 (1,000 달러 요청 당 0.01 달러). 불필요한 파일은 복사 된 후 삭제할 수 있습니다 (삭제 요청은 청구되지 않음). (내가 확실하지 않은 한 가지 점은 객체가 소스 버킷에서 먼저 가져와야하기 때문에 COPY 요청에 GET 요청에 대한 요금이 부과되는지 여부입니다. 요청).

위의 요금은 피할 수없는 것처럼 보입니다-백만 개의 물건에 대해 약 $ 10 (또는 $ 11)를보고 있습니다. 결국 대상 버킷에서 실제로 파일을 생성해야하므로 다른 접근 방식 (예 : 파일 tar-gzipping, Amazon Import / Export 등)은이 비용을 부담하지 않습니다. 전송해야 할 객체가 2 백만 개 이상인 경우 아마존에 문의하는 동안 가치가있을 수 있습니다.

위의 (피할 수없는 가격)을 감안할 때 다음으로 고려해야 할 것은 시간입니다. 이는 '수백만 개의 파일'을 복사 할 때 큰 요소가 될 것입니다. 버킷간에 직접 복사를 수행 할 수있는 모든 도구에는 동일한 요금이 부과됩니다. 불행히도 파일 당 하나의 요청 (복사), 삭제 요청 및 ACL 데이터 읽기 요청 (파일이 ACL이 다른 경우)이 필요합니다. 가장 빠른 속도는 가장 병렬 작업을 실행할 수있는 모든 것에서 나옵니다.

상당히 실행 가능한 몇 가지 명령 줄 접근 방식이 있습니다.

  • s3cmd-modification (특정 pull 요청)에는 병렬 cp 및 mv 명령이 포함되어 있으며 좋은 옵션입니다.
  • AWS 콘솔은 직접 복사를 수행 할 수 있습니다. 그러나 그것이 얼마나 유사한 지 말할 수는 없습니다.
  • Tim Kay의 aws 스크립트는 복사를 수행 할 수 있지만 병렬은 아닙니다. 원하는 전체 사본을 실행하도록 스크립트를 작성해야합니다 (이 경우 가장 좋은 옵션은 아니지만 훌륭한 스크립트입니다).
  • CloudBerry S3 Explorer , Bucket ExplorerCloudBuddy 는 모두 각 작업의 효율성을 모르지만 작업을 수행 할 수 있어야합니다. 그래도 대부분의 멀티 스레드 기능을 사용하려면 소프트웨어를 구입해야합니다.
  • 사용 가능한 SDK 중 하나를 사용하여 나만의 스크립트를 작성하십시오.

s3fs가 작동 할 가능성이 있습니다-상당히 병렬 적이며 동일한 버킷 사이의 사본을 지원합니다-다른 버킷 사이의 사본을 지원하지 않지만 다른 버킷 사이의 이동을 지원할 수 있습니다 .

s3cmd-modification으로 시작하여 성공했는지 확인하거나 더 나은 솔루션을 얻으려면 Amazon에 문의하십시오.


버킷 익스플로러가 나를 위해 잘 작동하는 것 같습니다 (현재 두 버킷간에 파일 이동)
국수

3
어디에 aws s3 sync s3://source s3://destination적합합니까?
Olivier Lalonde

7

오래된 주제이지만 동일한 시나리오를 조사하는 사람을위한 것입니다. 시간이 지남에 따라 20,000 개 이상의 개체가 필요했습니다. AWS Linux / Centos에서 실행되며 각 객체는 대부분 비디오 및 다양한 미디어 파일과 함께 대부분 이미지입니다.

AWS CLI 도구를 사용하여 파일을 버킷 A에서 버킷 B로 복사

A. 새 버킷 생성

$ aws s3 mb s3://new-bucket-name

B. 기존 버킷을 새 버킷과 동기화

$ aws s3 sync s3://old-bucket-name s3://new-bucket-name

20,000 개 이상의 객체 복사 중 ...

시작 17:03

종료 17:06

20,000 개 이상의 객체에 대한 총 시간 = 약 3 분

새 버킷이 올바르게 구성되면 권한, 정책 등이 있고 이전 버킷을 제거하려고합니다.

C. 기존 버킷 제거 / 삭제

$ aws s3 rb --force s3://old-bucket-name

구세주. 300GB 이상을 복사하고 있습니다. 팁 : 동일한 지역의 버킷에서 복사하면 다른 지역보다 훨씬 빠릅니다 (저는 덜 저렴합니다).
Marcelo Agimóvel 5

나는 당신의 방법에 문제가 있었다 : 파일 프라이버시는 모두 PRIVATE로 설정되었다.
Marcelo Agimóvel

5

이것이 최선의 방법인지는 모르겠지만 AWS 관리 콘솔에는 잘라 내기 / 복사 / 붙여 넣기 기능이 있습니다. 사용하기 쉽고 효율적입니다.


6
그것은 백만 개의 파일로 잘 작동하지 않을 것입니다.
James

@James는 고통스럽게 그것을 확인할 수 있습니다;)
rob

3

아마 지금까지 좋은 해결책을 찾았을 것입니다.하지만 최근에와 같이이 문제가 발생하는 다른 사람들을 위해 하나의 S3 버킷을 다른 것으로 미러링하기위한 간단한 유틸리티를 만들었습니다. 동시에 동시에 CPU와 메모리 효율적인 방식.

아파치 라이센스에 따라 github에 있습니다 : https://github.com/cobbzilla/s3s3mirror

당신이 그것을 시도하기로 결정하면 의견이 있으면 알려 주시기 바랍니다.


나는 s3s3mirror에 대한 훌륭한 경험을했다. m1.small EC2 노드에서 설정하고 약 2 시간 내에 150 만 개의 객체를 복사 할 수있었습니다. Maven과 Java에 익숙하지 않기 때문에 설정이 약간 어려웠지만 Ubuntu에서 모든 것을 설치하려면 apt-get 명령이 필요했습니다. 마지막 참고 사항 : (나처럼) 크고 중요한 s3 버킷에서 알 수없는 스크립트를 실행하는 것이 걱정된다면 copy-from 버킷에서 읽기 전용 액세스 권한을 가진 특수 사용자를 만들고 해당 자격 증명을 사용하십시오. 실수로 삭제 될 가능성이 없습니다.
Micah

다른 계정 간 버킷에 적용 할 수 있습니까?
Oliver Burdekin

@OliverBurdekin 예, 이것을 할 수 있는 --cross-account-copy옵션 -C이 있습니다. 여러 계정으로 복사 할 때 ACL은 복사 되지 않습니다 . 대상 버킷의 소유자는 복사 된 데이터에 대한 모든 권한을 갖습니다.
cobbzilla

감사합니다 @rfcreader이 비용을 어떻게 추정 할 수 있습니까? AWS 비용 계산기를 알고 있지만이 프로세스에 요청 수, 요청 수 등의 측면에서 어떤 과정이 포함 될지 잘 모르겠습니다. CLI를 사용하여 이러한 지표를 계산하는 것이 쉽지만 더 자세한 내용을 알고 있다면 연락하십시오. AWS 지원팀은 "요청자 지불"을 제안했습니다. 하아!
Oliver Burdekin

@OliverBurdekin s3s3mirror는 유형 (GET, COPY, DELETE 등)별로 AWS 요청 수를 추적합니다. 이 통계는 실행시 주기적으로 인쇄되며 마지막에 마지막으로 인쇄됩니다. 개체의 작은 하위 집합을 복사하기 위해 제한 / 테스트 실행을 수행 할 수 있습니다. 그러면 전체 데이터 세트를 복사하는 데 필요한 총 요청 수에 대한 일반적인 느낌이들 것입니다.
cobbzilla

2

AWS CLI는 병렬 프로세스에서 한 버킷을 다른 버킷으로 복사하는 방법을 제공합니다. https://stackoverflow.com/a/40270349/371699 에서 가져온 것 :

다음 명령은 AWS CLI에 1,000 개의 스레드를 사용하여 작업 (각각 작은 파일 또는 여러 부분 복사본의 일부)을 실행하고 100,000 개의 작업을 미리 보도록 지시합니다.

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000

이를 실행 한 후 다음과 같이 simple sync 명령을 사용할 수 있습니다.

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path

m4.xlarge 머신 ​​(AWS--4 코어, 16GB RAM)에서 필자의 경우 (3-50GB 파일) 동기화 / 복사 속도가 약 9.5MiB / s에서 700 + MiB / s로 증가했습니다. 기본 구성보다 70 배.


0

손실 버킷에서 다른 버킷으로 복사 할 파일을 선택하십시오.

  • 작업에서 '복사'를 선택하십시오.
  • 획득 버킷으로 이동하십시오.
  • 작업에서 '붙여 넣기'를 선택하십시오.

1
1 년 전에 다른 사람들이 언급 한 해결책을 반복해야하는 이유는 무엇입니까?
Benjamin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.