S3P는 대규모 AWS S3 버킷에 대해 복사, 나열, 동기화 및 기타 대량 작업을 수행하는 근본적으로 빠른 방법을 제공합니다.
일반적인 작업을 위한 명령줄 도구로 사용하거나 상상할 수 있는 거의 모든 것을 위한 라이브러리로 사용할 수 있습니다.
S3의 API는 일련의 항목을 나열하는 방식으로 구성됩니다. 1000개의 항목을 요청하고 기다렸다가 다음 1000개를 요청합니다. 이것이 거의 모든 S3 도구가 작동하는 방식입니다. 그러나 S3P는 항목을 병렬로 나열할 수 있습니다. 이는 S3의 기능을 활용하여 주어진 키와 같거나 그 이후에 처음 1000개의 항목을 요청합니다. 그런 다음 알고리즘 이분법과 일부 지능형 휴리스틱의 도움으로 S3P는 임의 수준의 병렬 처리로 버킷의 내용을 스캔할 수 있습니다. 실제로 S3P는 기존 방법보다 최대 20배 빠르게 버킷을 나열할 수 있습니다.
S3P는 정말 멋지고 빠른 S3 목록 도구입니다. 요약, 복사 및 동기화는 모두 개체를 훨씬 빠르게 나열하는 S3P의 핵심 기능으로 향상됩니다.
S3P를 실행하기 위해 단일 EC2 인스턴스를 사용하여 동일한 지역의 두 버킷 간에 최대 8기가바이트/초의 복사 속도를 유지했습니다.
Medium의 S3P에 대해 자세히 알아보세요.
NodeJS
AWS-CLI
대용량 파일을 복사하려면 aws-cli
필요합니다. 기본적으로 100MB보다 큰 파일은 aws-cli
사용하여 복사됩니다. 이는 성능면에서 좋은 절충안입니다. 그러나 --large-copy-threshold
옵션을 사용하여 해당 임계값을 5GB로 변경할 수 있습니다.
왜?
aws-sdk
훨씬 더 복잡한 솔루션 없이는 5GB보다 큰 파일 복사를 지원하지 않습니다.
키 이름은 제한된 문자 집합을 사용해야 합니다.
<space>
!"#$%&'()*+,-./
0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstuvwxyz{|}~
왜? Aws-S3는 키 내림차순 나열을 지원하지 않으므로 S3P는 문자 범위 기반 분할 정복 알고리즘을 사용합니다.
s3p는 aws-cli가 사용하는 것과 동일한 자격 증명을 사용하므로 해당 설명서(https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)를 참조하십시오.
s3p를 직접 설치할 필요는 없습니다. NodeJS가 설치되어 있으면 npx
사용하여 s3p를 직접 실행할 수 있습니다.
내장된 도움말은 모든 명령, 옵션을 자세히 설명하고 많은 예를 제공합니다.
# list commands and get overall help
npx s3p help
각 명령에 대한 자세한 도움말과 예를 보려면 --help
옵션을 사용하십시오.
# get specific command help and example uses
npx s3p cp --help
s3p를 로컬로 설치하면 더 빠르게 실행할 수도 있습니다.
# install s3p on your current machine
npm install s3p -g
# now it runs from the local install:
npx s3p help
성능 외에도 S3P는 사용자 정의 목록, 복사 및 비교를 위한 유연한 옵션을 제공합니다.
놀랍게도 많은 이점을 확인하기 위해 클라우드에서 S3P를 실행할 필요조차 없습니다. 로컬 시스템에서 실행할 수 있으며 S3 복사는 S3P를 직접 거치지 않으므로 AWS 대역폭을 사용하지 않습니다.
S3 버킷 목록 성능은 거의 타격을 받을 수 있습니다. 20,000 초당 50,000개 항목(S3Pv3.5 기준).
S3 버킷 복사 성능은 초당 8GB를 초과할 수 있습니다.
예, 초당 9GB가 지속되는 것을 보았습니다! 이는 평균 파일 크기가 100MB보다 약간 큰 버킷에 있었습니다. S3P는 단일 c5.2xlarge 인스턴스에서 실행되었습니다. 이에 비해 aws-s3-cp가 150mB/s 이상을 얻는 것을 본 적이 없습니다. 53배 이상 빠릅니다.
평균 파일 크기는 s3p의 전체 초당 바이트 수에 큰 영향을 미칩니다.
위치 | 명령 | aws-cli | s3p | 속도 향상 | 평균 크기 |
---|---|---|---|---|---|
현지의 | ㅋㅋㅋ | 2500개 항목/초 | 50000개 항목/초 | 20배 | 해당사항 없음 |
현지의 | CP | 30mB/초 | 150mB/초 | 5배 | 512KB |
EC2 | CP | 150mB/초 | 8GB/초 | 54배 | 100MB |
S3P는 수백만 개의 항목과 수백 테라바이트의 버킷에서 작동하도록 개발되었습니다. 현재 S3P는 여전히 단일 코어 NodeJS 애플리케이션일 뿐입니다. 작업자를 포크하거나 Elastic-Queue와 같은 인스턴스 전체에 작업을 분산함으로써 훨씬 더 대규모 병렬 S3 작업을 수행할 수 있는 기회가 있습니다. 누군가 aws-cli보다 100~1000배 빠른 솔루션이 필요한 경우 알려주십시오. 우리는 당신과 함께 일하고 싶습니다.
- [email protected]
모든 문서는 CLI 도움말 페이지에 포함되어 있습니다. 사용:
# get a list of commands
npx s3p help
# get a list of options for a command
# example:
npx s3p cp --help
CLI의 모든 기능을 API로도 사용할 수 있습니다. API를 배우려면 먼저 CLI 옵션을 배우고, 특정 CLI 명령에 대한 API 호출을 배우려면 --api-example
옵션을 사용하여 명령줄에서 해당 명령을 실행하십시오. 그러면 해당 명령을 프로그래밍 방식으로 호출하기 위한 예제 JavaScript 코드가 출력됩니다.
참고: 명령줄에서
--api-example
사용하면 명령이 실제로 실행되지 않습니다. S3P는 CLI 명령에 해당하는 JavaScript 만 콘솔에 출력한 다음 종료됩니다.
달리다:
> npx s3p ls --bucket foo --quiet --api-example
산출:
require ( "s3p" ) . ls ( {
bucket : "foo" ,
quiet : true ,
} ) ;
// > Promise
테스트 실행:
> node
반죽:
require ( "s3p" )
. ls ( {
bucket : "foo" ,
quiet : true ,
} )
. then ( out => console . log ( out ) ) ;
산출:
[
'item1' ,
'item2' ,
'item3' ,
... 8463 more items
}
S3P는 원래 GenUI.com이 Resolution Bioscience, Inc.와 함께 개발했습니다.
GenUI는 시애틀에 본사를 둔 기술 상용화 소프트웨어 컨설팅 회사입니다. 우리는 소프트웨어 로드맵을 가속화합니다. 언제든지 GenUI에 연락하여 귀하의 프로젝트에 대해 알려주십시오. 우리는 당신의 의견을 듣고 싶습니다.