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

최종 업데이트 날짜: 2020년 7월 9일

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

해결 방법

동기화 명령을 실행할 때 전송 시간을 단축하려면 다음 방법을 시도해 보십시오.

참고: 동기화 명령은 원본 버킷과 대상 버킷을 비교하여 대상 버킷에 없는 소스 파일 또는 대상 버킷의 파일과 비교하여 수정된 소스 파일이 있는지 결정합니다. 그런 다음 동기화 명령은 새 소스 파일이나 업데이트된 소스 파일을 대상 버킷에 복사합니다. 원본 및 대상 버킷의 객체 수는 동기화 명령이 프로세스를 완료하는 데 걸리는 시간에 영향을 줄 수 있습니다. 전송 크기가 동기화 기간에 어떤 영향을 줄 수 있는지 이해하고 작업과 관련된 Amazon 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

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

참고: 제외 및 포함 필터를 사용하는 경우에도 sync 명령은 원본 버킷의 모든 파일을 검토하여 대상 버킷에 복사해야 하는 소스 파일을 결정합니다. 즉, 서로 다른 키 이름 접두사를 대상으로 하는 동기화 작업이 여러 개인 경우 각 동기화 작업이 모든 소스 파일을 검토합니다. 하지만 제외 및 포함 필터로 인해, 필터에 포함된 파일만 대상 버킷으로 복사됩니다.

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 Elastic Compute Cloud(Amazon EC2)를 사용하는 경우 인스턴스 구성을 확인하십시오.

EC2 인스턴스를 사용하여 동기화 작업을 실행하는 경우 다음을 고려하십시오.

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