Amazon S3에 대한 sync 명령의 전송 성능을 개선하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 1월 5일

AWS CLI(AWS 명령줄 인터페이스) sync 명령을 사용하여 Amazon S3(Amazon Simple Storage Service)에서 데이터를 전송하고 있습니다. 하지만 전송을 완료하는 데 시간이 오래 걸립니다. sync 명령을 사용한 전송의 성능을 개선하려면 어떻게 해야 합니까?

해결 방법

sync 명령을 실행할 때 전송 시간을 단축하려면 다음 방법을 시도해 보세요.

참고: sync 명령은 소스 버킷과 대상 버킷을 비교하여 대상 버킷에 존재하지 않는 소스 파일을 파악합니다. sync 명령은 또한 대상 버킷의 파일과 비교할 때 수정된 소스 파일을 파악합니다. 그런 다음 sync 명령은 새 소스 파일이나 업데이트된 소스 파일을 대상 버킷에 복사합니다. 소스 및 대상 버킷의 객체 수는 sync 명령이 프로세스를 완료하는 데 걸리는 시간에 영향을 줄 수 있습니다. 전송 크기가 동기화 기간이나 S3에 대한 요청으로 인해 발생할 수 있는 비용에 어떤 영향을 미치는지 이해하는 것이 중요합니다.

AWS CLI의 여러 인스턴스 실행

대량의 데이터를 복사하려면 AWS CLI의 여러 인스턴스를 실행하여 별도의 동기화 작업을 병렬로 수행할 수 있습니다. 예를 들어 서로 다른 접두사에 대해 병렬 동기화 작업을 실행할 수 있습니다.

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder1 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder1             

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder2 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder2

참고: AWS CLI(AWS 명령줄 인터페이스) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

또는 별도의 제외 및 포함 필터에 대해 병렬 동기화 작업을 실행할 수 있습니다. 예를 들어, 다음 작업은 동기화할 파일을 숫자 0~4 및 5~9로 시작하는 키 이름별로 구분합니다.

참고: exclude include 필터를 사용하는 경우에도 sync 명령은 여전히 소스 버킷의 모든 파일을 검토합니다. 이 검토는 대상 버킷에 복사할 소스 파일을 식별하는 데 도움이 됩니다. 서로 다른 키 이름 접두사를 대상으로 하는 동기화 작업이 여러 개인 경우 각 sync 작업은 모든 소스 파일을 검토합니다. 하지만 excludeinclude 필터로 인해, 필터에 포함된 파일만 대상 버킷으로 복사됩니다.

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"  

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"

워크로드 성능 최적화에 대한 자세한 내용은 모범 사례 설계 패턴: Amazon S3 성능 최적화를 참조하세요.

max_concurrent_requests에 대한 AWS CLI 구성 값 수정

잠재적으로 성능을 개선하기 위해 max_concurrent_requests 값을 수정할 수 있습니다. 이 값은 한 번에 Amazon S3에 전송할 수 있는 요청 수를 설정합니다. 기본값은 10이며 더 높은 값으로 늘릴 수 있습니다. 하지만 다음 사항에 유의하십시오.

  • 스레드를 더 많이 실행하면 시스템에서 더 많은 리소스를 사용합니다. 원하는 최대 동시 요청 수를 지원하기에 충분한 리소스가 시스템에 있는지 확인해야 합니다.
  • 동시 요청이 너무 많으면 시스템에 과부하가 발생하여 연결 시간 초과가 발생하거나 시스템의 응답이 느려질 수 있습니다. AWS CLI의 시간 초과 문제를 방지하려면 -cli-read-timeout 값 또는 -cli-connect-timeout 값을 0으로 설정합니다.

(선택 사항) 인스턴스 구성 확인

Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스를 사용하여 동기화 작업을 실행하는 경우 다음을 고려합니다.

  • 사용 중인 인스턴스 유형을 검토합니다. 큰 인스턴스 유형은 높은 대역폭과 Amazon EBS(Amazon Elastic Block Store) 최적화 네트워크를 제공하므로 더 향상된 결과를 제공할 수 있습니다.
  • 인스턴스가 버킷과 다른 AWS 리전에 있는 경우 동일한 리전에 있는 인스턴스를 사용할 것을 고려합니다. 지연 시간을 줄이려면 인스턴스와 Amazon S3 버킷 간의 지리적 거리를 줄입니다.
  • 인스턴스가 소스 버킷과 동일한 리전에 있는 경우에는 Amazon S3용 Amazon VPC(Amazon Virtual Private Cloud) 엔드포인트 설정을 고려합니다. VPC 엔드포인트는 전반적인 성능을 개선하는 데 도움이 될 수 있습니다.