xargs com aws cli (cópia amazon s3)

1

Estou tentando acelerar o processo de copiar centenas de arquivos entre dois blocos S3 na minha conta.

Bucket1
dt=2017-01-01/ 
   file1, file2, file3 ... file100
..
..
dt=2017-01-31/

Cada arquivo tem ~ 300-400 MB e até 1 GB em alguns casos.

Agora, preciso copiá-los para um segundo balde, o Balde 2 com a mesma estrutura.

Eu tentei usar o comando aws cli, mas isso é muito lento -      aws s3 cp s3://Bucket1/ s3://Bucket2/ --recursive

Em seguida, tentei iniciar processos paralelos usando um script com & -

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/
..
..

Mesmo isso não é uma melhoria muito grande e não vejo todas as pastas sendo copiadas. Depois de 2017-01-05, paramos um pouco. Pergunto-me porquê.

Procurando por possíveis soluções, deparei-me com este blog da AWS, onde eles parecem estar usando xargs

Então modifiquei o script para usar xargs em vez disso -

while read line
do
echo ${line} | xargs -n1 -P100 -I {} aws s3 cp s3://Bucket1/{} s3://Bucket2/{} --recursive
done < date-list

Existe alguma maneira de acionar a cópia paralela de todos os dias de um determinado mês? E então, talvez mais tarde, do ano inteiro. No momento, está copiando dia a dia e ainda está lento considerando todo o ano + dados que precisam ser copiados.

Eu realmente aprecio todos os ponteiros.

    
por Abi 17.06.2017 / 09:34

1 resposta

0

De acordo com a Amazon, você está no caminho certo com chamadas paralelas através do AWS CLI. O Amazon definitivamente recomenda isso como uma técnica de otimização de desempenho.

Já tentou definir o máximo de solicitações simultâneas nas suas configurações ou quando chamar o roteiro?

Aqui está o meu folheto:

$ 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

Você pode definir o número total de dias usando o comando seq (93 por ~ 3 meses) e definir o número de chamadas paralelas (~ 30 por um mês por vez) usando o sinalizador -P .

Eu uso a opção --no-progress em vez da opção --quiet , já que posso canalizar a saída do comando para um arquivo de log de transferências bem-sucedidas.

    
por 01.12.2017 / 17:02