![aws cli를 사용한 xargs(Amazon s3 사본)](https://linux55.com/image/113632/aws%20cli%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%9C%20xargs(Amazon%20s3%20%EC%82%AC%EB%B3%B8).png)
내 계정에 있는 2개의 S3 버킷 간에 수백 개의 파일을 복사하는 프로세스 속도를 높이려고 합니다.
Bucket1
dt=2017-01-01/
file1, file2, file3 ... file100
..
..
dt=2017-01-31/
각 파일의 크기는 약 300-400MB이며 경우에 따라 1GB까지 됩니다.
이제 이를 두 번째 버킷, 즉 동일한 구조의 버킷 2에 복사해야 합니다.
aws cli 명령을 사용해 보았지만 속도가 매우 느립니다.
aws s3 cp s3://Bucket1/ s3://Bucket2/ --recursive
다음으로 & - 스크립트를 사용하여 병렬 프로세스를 시작해 보았습니다.
while read line
do
aws s3 cp s3://Bucket1/${line} s3://Bucket2/${line} --recursive &
done < date-list
Contents of date-list
dt=2017-01-01/
dt=2017-01-02/
..
..
이것도 별로 개선되지 않았으며 모든 폴더가 복사되는 것을 볼 수 없습니다. 2017년 1월 5일 이후에는 중단되었습니다. 이유가 궁금합니다.
가능한 솔루션을 찾는 동안 AWS에서 이 블로그를 찾았는데 xargs를 사용하는 것 같습니다.https://aws.amazon.com/blogs/apn/getting-the-most-out-of-the-amazon-s3-cli/
그래서 대신 xargs를 사용하도록 스크립트를 수정했습니다.
while read line
do
echo ${line} | xargs -n1 -P100 -I {} aws s3 cp s3://Bucket1/{} s3://Bucket2/{} --recursive
done < date-list
특정 달의 모든 날짜에 대한 병렬 복사를 트리거하는 방법이 있습니까? 그러다가 어쩌면 1년 후가 될 수도 있습니다. 이제는 매일 복제되고 있지만 1년 이상의 데이터를 복제해야 한다는 점을 고려하면 여전히 속도가 느립니다.
어떤 조언이라도 대단히 감사하겠습니다.
답변1
Amazon에 따르면 AWS CLI를 통해 병렬 호출을 수행하면 올바른 방향으로 가고 있는 것입니다. 아마존성능 최적화 기술로 확실히 권장합니다.
최대 동시 요청 수를 설정해 보셨나요?귀하의 구성에서아니면 스크립트를 호출할 때?
내 라이너 중 하나는 다음과 같습니다.
$ seq 0 93 | xargs -I {} date -d "2017-01-01 {} days" +%Y-%m-%d | xargs -I {} -P31 aws s3 cp s3://source_bucket/dt={}/ s3://dest_bucket/dt={}/ --recursive --no-progress
명령을 사용하여 총 일수 seq
(3개월 동안 약 93일)를 설정할 수 있고 플래그를 사용하여 병렬 호출 횟수(월당 약 30일)를 설정할 수 있습니다 -P
.
명령의 출력을 성공적으로 전송된 로그 파일로 파이프할 수 있기 때문에 이 --no-progress
옵션 대신 이 옵션을 사용합니다 .--quiet