한 Amazon S3 버킷에서 다른 버킷으로 많은 데이터를 전송하는 가장 좋은 방법은 무엇입니까?

최종 업데이트 날짜: 2019년 12월 16일

한 Amazon Simple Storage Service(Amazon S3) 버킷에서 다른 버킷으로 많은 데이터(1TB 이상)를 전송하려고 합니다. 어떻게 해야 합니까? 

간략한 설명

사용 사례에 따라 다음 옵션 중 하나를 사용하여 버킷 간 데이터 전송을 수행할 수 있습니다.

  • AWS CLI(명령줄 인터페이스)를 사용하여 병렬 업로드 실행
  • AWS SDK 사용
  • 교차 리전 복제 또는 동일한 리전 복제 사용
  • Amazon S3 배치 작업 사용
  • Amazon EMR에서 S3DistCp 사용

​해결 방법

AWS CLI를 사용하여 병렬 업로드 실행

참고: 최신 버전의 AWS CLI를 사용하고 있는지 확인하는 것이 좋습니다. 자세한 내용은 AWS CLI 설치를 참조하십시오.

전송을 여러 개의 상호 배타적 작업으로 분할하면 멀티 스레딩을 통해 전송 시간을 개선할 수 있습니다. 예를 들어, AWS CLI를 사용하여 aws s3 cp, aws s3 mv 또는 aws s3 sync의 여러 병렬 인스턴스를 실행할 수 있습니다. AWS CLI의 각 인스턴스에 대해 --exclude 및 --include 파라미터를 사용하는 동안 추가 업로드 스레드를 생성할 수 있습니다. 이러한 파라미터는 파일 이름을 기준으로 작업을 필터링합니다.

참고: --exclude--include 파라미터는 클라이언트 측에서 처리됩니다. 이 때문에 로컬 시스템의 리소스가 작업 성능에 영향을 줄 수 있습니다.

예를 들어, 모든 파일 이름이 숫자로 시작하는 많은 데이터를 한 버킷에서 다른 버킷으로 복사하려면 AWS CLI의 두 인스턴스에서 다음 명령을 실행할 수 있습니다. 먼저, 다음 명령을 실행하여 이름이 0~4로 시작하는 파일을 복사합니다.

aws s3 cp s3://source-awsexamplebucket/ s3://destination-awsexamplebucket/ --recursive --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"

그런 다음, 다음 명령을 실행하여 이름이 5~9로 시작하는 파일을 복사합니다.

aws s3 cp s3://source-awsexamplebucket/ s3://destination-awsexamplebucket/ --recursive --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"

또한 다음 AWS CLI 구성을 사용자 지정하여 데이터 전송 속도를 높일 수 있습니다.

  • multipart_chunksize: 이 값은 AWS CLI가 개별 파일에 대한 멀티파트 업로드에서 업로드하는 각 파트의 크기를 설정합니다. 이 설정을 사용하면 더 빠른 업로드 속도를 위해 더 큰 파일(예: 300MB)을 더 작은 파트로 나눌 수 있습니다.
    참고: 멀티파트 업로드를 수행하려면 단일 파일을 10,000개 이하의 개별 파트로 업로드해야 합니다. 설정한 청크 크기가 파트 파일 크기 및 파트 수의 균형을 맞추는지 확인해야 합니다.
  • max_concurrent_requests: 이 값은 한 번에 Amazon S3에 전송할 수 있는 요청 수를 설정합니다. 기본값은 10입니다. 50과 같은 더 높은 값으로 늘릴 수 있습니다.
    참고: 스레드를 더 많이 실행하면 시스템에서 더 많은 리소스가 소비됩니다. 원하는 최대 동시 요청 수를 지원하기에 충분한 리소스가 시스템에 있는지 확인해야 합니다.

AWS SDK 사용

매우 많은 객체에 대한 데이터 전송을 수행하려는 경우 AWS SDK를 통한 사용자 지정 애플리케이션 구축 방법을 고려하십시오. AWS CLI가 복사 작업을 수행할 수도 있지만, 수십억 규모의 객체에서 전송을 수행할 경우 사용자 지정 애플리케이션이 더 효율적일 수 있습니다.

교차 리전 복제 또는 동일한 리전 복제 사용

소스 버킷에서 CRR(교차 리전 복제) 또는 SRR(동일한 리전 복제)을 설정하면 Amazon S3은 소스 버킷의 새 객체를 대상 버킷에 비동기적으로 자동 복제합니다. 접두사 또는 태그를 사용하여 복제되는 객체를 필터링하도록 선택할 수 있습니다. 복제 구성 및 필터 지정에 대한 자세한 내용은 복제 구성 개요를 참조하십시오.

복제가 구성되면 새 객체만 대상 버킷에 복제됩니다. 대상 버킷으로 기존 객체는 복제되지 않습니다. 기존 객체를 복제하려면 소스 버킷에 복제를 설정한 후 다음 cp 명령을 실행할 수 있습니다.

aws s3 cp s3://source-awsexamplebucket s3://source-awsexamplebucket --recursive --storage-class STANDARD

이 명령은 소스 버킷의 객체를 소스 버킷으로 다시 복사하여 대상 버킷으로의 복제를 트리거합니다.

참고: 비프로덕션 환경에서 cp 명령을 테스트하는 것이 모범 사례입니다. 그러면 정확한 사용 사례에 맞춰 파라미터를 구성할 수 있습니다.

Amazon S3 배치 작업 사용

Amazon S3 배치 작업을 사용하면 단일 요청으로 여러 객체를 복사할 수 있습니다. 배치 작업을 생성할 때 Amazon S3 인벤토리 보고서 또는 CSV 파일을 사용하여 작업을 수행할 객체를 지정합니다. 그런 다음, Amazon S3 배치 작업은 API를 호출하여 작업을 수행합니다.

배치 작업이 완료되면 알림을 받고 작업에 대한 완료 보고서를 받도록 선택할 수 있습니다.

Amazon EMR에서 S3DistCp 사용

Amazon EMR의 S3DistCp 작업은 Amazon S3 버킷 간 많은 객체의 병렬 복사를 수행할 수 있습니다. 먼저, S3DistCp는 소스 버킷의 파일을 Amazon EMR 클러스터의 작업자 노드로 복사합니다. 그런 다음, 작업은 작업자 노드에서 대상 버킷에 파일을 씁니다. S3DistCp 사용에 대한 자세한 지침은 Amazon EMR에서 S3DistCp를 사용하여 HDFS와 Amazon S3 사이에서 데이터를 효율적으로 이동하는 7가지 팁을 참조하십시오.

중요: 이 옵션을 사용하려면 Amazon EMR을 사용해야 하므로 Amazon EMR 요금을 검토해야 합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?