Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 Amazon Simple Storage Service(S3) 버킷으로 데이터를 전송하려고 합니다. 전송 속도를 개선하려면 어떻게 해야 합니까?
간략한 설명
Amazon EC2에서 Amazon S3로 데이터를 복사, 이동 또는 동기화하는 데 필요한 전송 속도는 몇 가지 요인에 따라 달라집니다. EC2 인스턴스 및 S3 버킷 간 데이터를 복사, 이동 또는 동기화할 때 전송 속도를 개선하려면 다음 방법를 사용하세요.
- EC2 인스턴스에서 향상된 네트워킹을 사용합니다.
- 데이터 전송에 대해 병렬 워크로드를 사용합니다.
- AWS CLI(AWS 명령줄 인터페이스)에서 업로드 구성을 사용자 지정합니다.
- Amazon S3에 대해 Amazon Virtual Private Cloud(Amazon VPC) 엔드포인트를 사용합니다.
- 지리적으로 떨어진 AWS 리전 간에 S3 Transfer Acceleration을 사용합니다.
- EC2 인스턴스 유형을 업그레이드합니다.
- 청크 전송을 사용합니다.
해결 방법
EC2 인스턴스에서 향상된 네트워킹 사용
향상된 네트워킹에서는 더 높은 대역폭과 초당 패킷(PPS) 성능을 제공하며, 인스턴스 간 지연 시간도 더 낮게 유지됩니다. 추가 비용 없이 향상된 네트워킹을 킬 수 있습니다.
EC2 인스턴스의 PPS 속도가 상한에 도달한 것으로 보이면 인스턴스가 네트워크 인터페이스 드라이버의 상한 임계값에 도달했을 가능성이 높습니다. 이 경우 향상된 네트워킹을 켜는 것이 좋습니다.
참고: 향상된 네트워킹에 대한 인스턴스 요구 사항을 검토해야 합니다.
데이터 전송에 대해 병렬 워크로드 사용
데이터 전송을 완료하는 데 걸리는 전체 시간을 잠재적으로 개선하려면 전송을 상호 배타적인 여러 작업으로 분할하는 것이 좋습니다. 예를 들어 AWS CLI를 사용하는 경우 AWS S3 cp, AWS S3 mv 또는 AWS S3 sync 인스턴스를 실행할 수 있습니다. 데이터가 여러 접두사에 분산되어 있는 경우 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 CLI를 사용하고 있는지 확인하세요.
AWS CLI에서 업로드 구성 사용자 지정
데이터 전송 속도를 높이려면 다음과 같은 Amazon S3에 대한 AWS CLI 구성 값을 사용자 지정하세요.
- multipart_chunksize: 이 값은 AWS CLI가 개별 파일에 대한 멀티파트 업로드에서 업로드하는 각 파트의 크기를 설정합니다. 이 설정을 사용하면 더 빠른 업로드 속도를 위해 큰 파일(예: 300MB)을 더 작은 파트로 나눌 수 있습니다.
참고: 멀티파트 업로드를 수행하려면 단일 파일을 10,000개 이하의 개별 파트로 업로드해야 합니다. 설정한 청크 크기가 파트 파일 크기 및 파트 수의 균형을 맞추는지 확인해야 합니다.
- max_concurrent_requests: 기본적으로 AWS CLI는 멀티스레딩을 지원합니다. max_concurrent_requests 값을 변경하여 한 번에 Amazon S3에 전송할 수 있는 요청 수를 늘릴 수 있습니다. 기본값은 10입니다. 이 값을 늘리면 정체된 응답을 받을 수 있습니다. 하지만 더 높은 max_concurrent_requests 값을 병렬 워크로드와 결합하면 전반적으로 더 나은 전송 속도를 얻을 수 있습니다.
참고: 스레드를 더 많이 실행하면 시스템에서 더 많은 리소스가 소비됩니다. 최대 동시 요청 수를 지원하기에 충분한 리소스가 시스템에 있는지 확인해야 합니다.
Amazon S3에 대해 VPC 엔드포인트 사용
EC2 인스턴스가 S3 버킷과 동일한 리전에 있는 경우 Amazon S3에 대한 VPC 엔드포인트 사용을 고려합니다. VPC 엔드포인트는 전반적인 성능을 개선하고 NAT(네트워크 주소 변환)에 대한 부하를 줄이는 데 도움이 될 수 있습니다.
VPC 엔드포인트를 사용할 경우 또 다른 이점은 인터넷 게이트웨이, NAT 디바이스 또는 VPN 연결 없이 VPC에 대한 프라이빗 연결을 설정할 수 있다는 점입니다. VPC의 인스턴스는 Amazon S3 버킷과 같은 리소스와 통신하기 위해 퍼블릭 IP 주소가 필요하지 않습니다. VPC 엔드포인트를 사용하면 VPC 및 Amazon S3 간 데이터 트래픽이 AWS 네트워크에서 라우팅됩니다.
지리적으로 떨어진 AWS 리전 간에 S3 Transfer Acceleration 사용
EC2 인스턴스 및 S3 버킷이 지리적으로 서로 더 가까운 경우 데이터 전송 속도가 더 빨라질 수 있습니다. 인스턴스 및 버킷이 지리적으로 먼 AWS 리전에 있는 경우 Amazon S3 Transfer Acceleration을 켜는 것이 좋습니다. Transfer Acceleration은 전 세계에 분산된 Amazon CloudFront의 엣지 로케이션을 사용하여 장거리에서 빠르고 안전한 전송을 지원합니다.
Transfer Acceleration을 사용할 경우 추가 요금이 발생하므로 반드시 Amazon S3 요금을 확인하세요. Transfer Acceleration이 사용 사례에 대해 전송 속도를 개선할지 확인하려면 Amazon S3 Transfer Acceleration 속도 비교 도구를 검토하세요.
EC2 인스턴스 유형 업그레이드
높은 EC2 인스턴스 CPU 사용률은 전체적으로 느린 전송 속도의 요인이 될 수 있습니다. 더 높은 메모리와 네트워크 성능을 제공하는 다른 인스턴스 유형으로 인스턴스를 업그레이드할 수 있습니다. 한 인스턴스 유형에 대해 인스턴스 크기가 더 크면 일반적으로 동일한 유형의 더 작은 인스턴스 크기보다 더 좋은 네트워크 성능을 제공합니다.
참고: EC2 인스턴스와 Amazon S3 간에 안정적인 네트워크 연결을 위해 네트워크 연결이 초당 10GB 이상인 인스턴스 유형을 선택합니다.
청크 전송 사용
대용량 파일을 전송하는 경우 멀티파트 업로드 및 원거리 GET이 전체 전송 성능을 개선하는 데 도움이 될 수 있습니다.
관련 정보
모범 사례 설계 패턴: Amazon S3 성능 최적화