더 빠른 s3 버킷 복제


93

s3cmd 보다 버킷 복제를위한 더 나은 명령 줄 도구를 찾으려고했습니다 . s3cmd각 파일을 다운로드하고 업로드하지 않고도 버킷을 복제 할 수 있습니다. s3cmd를 사용하여 버킷을 복제하기 위해 일반적으로 실행하는 명령은 다음과 같습니다.

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2

이것은 작동하지만 API를 통해 한 번에 하나씩 각 파일을 복사하므로 매우 느립니다. s3cmd병렬 모드로 실행할 수 있다면 매우 기쁠 것입니다.

사람들이보다 빠른 버킷을 복제하는 데 사용하는 명령 줄 도구 또는 코드로 사용할 수있는 다른 옵션이 s3cmd있습니까?

편집 : s3cmd-modification 이 정확히 내가 찾고있는 것 같습니다. 안타깝게도 작동하지 않습니다. 다른 옵션이 있습니까?


6
이 질문이 반복적으로 닫히는 이유는 많은 개발자가 문제를 겪은 것 같기 때문에 확실하지 않습니다. 어쨌든, 나는 그것을 매우 병렬 방식으로 해결했습니다. 여기 링크가 있습니다 : github.com/cobbzilla/s3s3mirror 감사합니다! -조나단.
cobbzilla

답변:


166

AWS CLI는 작업을 완벽하게 수행하는 것으로 보이며 공식적으로 지원되는 도구라는 보너스가 있습니다.

aws s3 sync s3://mybucket s3://backup-mybucket

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

기본적으로 동시 전송을 지원합니다. http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests를 참조 하십시오.

많은 수의 작은 파일을 빠르게 전송하려면 EC2 인스턴스에서 스크립트를 실행하여 지연 시간 max_concurrent_requests을 줄이고 증가시켜 지연 시간 의 영향을 줄이십시오. 예 :

aws configure set default.s3.max_concurrent_requests 200

4
파일 수정 시간, 크기 등을 기준으로 비 동시 동기화를 지원합니다. 시도했을 때 엄청나게 빠른 속도였습니다. 객체는 로컬 머신으로 다운로드하지 않고 S3에서 직접 복사됩니다. 기본적으로 병렬로 실행되지는 않지만 동시에 별도의 하위 폴더에서 여러 개의 동기화 명령을 실행할 수 있습니다. 어쨌든 병렬로 실행할 필요가 없을 정도로 충분히 빠릅니다. 몇 분 만에 100GB의 데이터를 복제했습니다.
python1981 2014 년

10
파일 수가 많으면 지옥처럼 느려집니다.
Phương Nguyễn

14
많은 작은 파일을 전송할 때 지연 시간이 핵심 제약이되므로 EC2 인스턴스에서이 명령을 실행하는 것이 필수적입니다.
python1981 2014-08-27

1
나는 이것을 사용하여 도커를 구축하고 꽤 잘 작동합니다. github.com/sunshineo/s3-bucket-copier
Gordon Sun

3
이제 동시 동기화를 지원합니다. :-) docs.aws.amazon.com/cli/latest/topic/…
python1981

70

AWS 콘솔을 사용해도 괜찮다면 다음을 수행 할 수 있습니다.

  1. 첫 번째 버킷의 모든 파일 / 폴더를 선택합니다.
  2. 조치> 복사를 클릭하십시오.
  3. 새 버킷을 만들고 선택합니다.
  4. 조치> 붙여 넣기를 클릭하십시오.

여전히 상당히 느리지 만 그대로 두어도됩니다.


소스 버킷의 내용이 대상에 복사 될 때 내 시스템에 복사됩니까? 네트워크 활동이 많고 브라우저 검사기가 매우 느려 분석하기가 어렵습니다. 내 컴퓨터에서 600K / s를 출력합니다. 그러면 아마존 네트워크 내에서 전송을 시작하는 것이 훨씬 더 빨라질 것입니다. 대신 거기에서 시도해보십시오.
Brad Goss 2013 년

9
오늘이 방법을 사용했습니다. 파일을 로컬 시스템으로 가져 오지 않습니다. 직접 복사하고 훨씬 빠릅니다.
Greg Benedict

7
여전히 파일 목록을 가져옵니다. 목록이 너무 길면 (제 경우에는 수십만 개의 파일) 속도가 느립니다. 그리고 요령 / 시간 제한은 매우 가능성이 높습니다
푸옹 응웬

13
불행히도이 프로세스는 브라우저와 관련이 있습니다. :(에서 워드 프로세서 : "당신이 복사 프로세스를 시작하면 복사가 진행중인 동안 당신은 브라우저의 개방을 유지해야합니다."
데이비드 Lemayian에게

4
8 백만 개의 파일이있는 버킷에서이 작업을 수행하려고합니다. 그것은 ... 모든 체크 박스를 선택 데려다거야 얼마나 많은 달 몰라
크리스 해리슨

27

AWS 웹 콘솔 s3cmd및 AWS CLI를 사용하여 두 개의 버킷을 복제 해 보았습니다 . 이러한 방법은 대부분 작동하지만 고통스럽게 느립니다.

그런 다음 s3s3mirror두 개의 S3 버킷을 동기화하기위한 특수 도구를 찾았습니다 . 다중 스레드이며 내가 시도한 다른 접근 방식보다 훨씬 빠릅니다. 한 AWS 리전에서 다른 리전으로 기가 바이트의 데이터를 빠르게 이동했습니다.

https://github.com/cobbzilla/s3s3mirror 에서 확인 하거나 https://registry.hub.docker.com/u/pmoust/s3s3mirror/ 에서 Docker 컨테이너를 다운로드 하십시오.


1
전송할 파일이 많으면이 작업에 가장 적합한 도구입니다. 부끄러운 그것이 ... 지금까지 답변 목록 아래의
요한 크리 소스 토모

일부 사용자 참고 사항 : 컴파일하려면 Java 6/7이 필요합니다.
Brian

1
저는 이것을 EC2 인스턴스에서 사용하고 있으며 믿을 수 없을 정도로 빠르게 작동합니다! <source-bucket> 및 <destination-bucket>을 실제 버킷 이름 (엔드 포인트 또는 AWS CLI와 같은 이름이 아님)으로 바꿔야했습니다.
ironmouse

1
많은 수의 파일에 대해 다른 것보다 강력하게 권장되는 놀라운 도구입니다. 복사 스레드 수에 대한 제어는 훌륭합니다.
Shaunak

작업을 수행하는 데 타사 애플리케이션이 아닌 aws-cli를 사용하는 것이 더 안전하다고 생각하지 않습니까? 결국 이러한 도구를 사용하려면 자격 증명이나 액세스 키를 제공해야합니다.
Keet Sugathadasa

10

임시 솔루션을 사용 aws cli하여 버킷 간 동기화 :

aws s3 sync속도는 다음에 따라 다릅니다.
-S3 엔드 포인트에 대한 API 호출 대기 시간
-동시 수행 된 API 호출 양

동기화 속도를 높이려면 :
- 실행 aws s3 syncAWS 인스턴스 (FreeBSD의에 c3.large은 OK입니다 ;-))에서
- 갱신 ~ / .aws / config로 :
- max_concurrent_requests = 128
-max_queue_size = 8096

다음 구성 및 인스턴스 유형을 사용하여 474 초 이내에 버킷 (309GB, 72K 파일, us-east-1)을 동기화 할 수있었습니다.

보다 일반적인 솔루션은 AWS DataPipeLine 또는 S3 교차 리전 복제를 고려하십시오.


S3 cp를 사용하면 동일한 성능을 기대할 수 있는지 알고 있습니까? 동기화를 사용했을 때 실제로 309GB를 모두 전송 했습니까? sync는 동일하지 않거나 다른 버킷에있는 파일 만 동기화합니다.
서리가 내린

또한 1k 이하의 파일이 있지만 크기가 더 큰 (10GB) 사용 사례에 대해 어떻게 생각하십니까? 내가 당신과 비슷한 성과를 볼 것이라고 생각하십니까?
서리가

@frosty, 내 경우에는 대상 버킷이 비어 있습니다. awscli문서 당 - aws sync새 파일과 업데이트 된 파일 만 복사합니다. 아마도 당신은 높은 성능을 기대할 것입니다 aws cp(복사는 내부적으로 수행되며 클라이언트는 API 호출을 발행합니다). 성능은 다음 요인에 따라 달라집니다. 1. src 및 dst 리전 간의 지연 시간 (예 : us-east-X에서 us-west-X까지) 2. 클라이언트와 AWS API 엔드 포인트 간의 지연 시간 (API 호출을 발행 할 수있는 속도) 3. 동시 요청 수 (클라이언트가 발행 할 수있는 초당 요청 수) 내 경우에는 309G는 (우리가 동쪽-1) 같은 지역의 버킷 사이에 복사 한
톰 라임

3

이 주제에 대한 Google의 첫 번째 히트작이므로 추가 정보를 추가합니다.

'Cyno'는 이제 병렬 버킷 간 동기화를 지원하는 최신 버전의 s3cmd-modification을 만들었습니다. 정확히 내가 기다리고 있었던 것.

Pull 요청은 https://github.com/pcorliss/s3cmd-modification/pull/2 , 그의 버전은 https://github.com/pearltrees/s3cmd-modification입니다.


s3cmd-modification을 사용하면 복사 시간이 절약되었습니다.
gak 2013 년

2

다른 S3 명령 줄 도구는 모르지만 여기에 아무것도 나타나지 않으면 직접 작성하는 것이 가장 쉬울 수 있습니다.

원하는 언어와 Amazon SDK / Toolkit을 선택하십시오. 그런 다음 소스 버킷 내용을 나열 / 검색하고 각 파일을 복사하면됩니다 (분명히 병렬로).

s3cmd-modification 에 대한 소스를 살펴보면 (그리고 저는 파이썬에 대해 아무것도 모른다는 것을 인정합니다) 버킷 간 코드를 병렬화하지 않은 것처럼 보이지만 아마도 표준 업로드 / 다운로드 병렬 코드를 시작점으로 사용할 수 있습니다. 이 작업을 수행.


네. 나는이 아이디어를 가지고 놀았고 이벤트 머신이나 JRuby로 스레드 된 방식으로 루비로 작성했습니다. 그러나 s3cmd는 이미 완전하고 차라리 그것을 사용하고 싶습니다. 저는 s3cmd 개발자와 이야기를 나누었으며 파이프 라인에 성능 문제를 해결할 수있는 몇 가지 솔루션을 가지고 있습니다.
Sean McCleary 2011 년

1

간단하게 aws s3 cp s3://[original-bucket] s3://[backup-bucket] --recursive잘 작동합니다 (aws cli 설정이 있다고 가정).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.