Milhões é um grande número - voltarei a isso mais tarde.
Independentemente da sua abordagem, o mecanismo subjacente precisa ser copiado diretamente de um bucket para outro. Dessa forma, como os seus buckets estão na mesma região, você não cobra nenhuma taxa pela largura de banda. Qualquer outra abordagem é simplesmente ineficiente (por exemplo, baixar e reenviar os arquivos).A cópia entre buckets é realizada usando 'PUT copy' - que é uma solicitação PUT que inclui o cabeçalho 'x-amz-copy-source' - Acredito que isso seja classificado como uma solicitação COPY. Isso copiará o arquivo e, por padrão, os metadados associados. Você deve incluir um 'x-amz-acl' com o valor correto se quiser definir a ACL ao mesmo tempo (caso contrário, o padrão será private). Você será cobrado pelos seus pedidos de COPY (US $ 0,01 / 1.000 solicitações). Você pode excluir os arquivos desnecessários após eles terem sido copiados (as solicitações DELETE não são cobradas). (Um ponto em que não estou totalmente claro é se uma solicitação COPY também incorre ou não na cobrança de uma solicitação GET, pois o objeto deve primeiro ser buscado no depósito de origem. Se isso ocorrer, a cobrança será de US $ 0,01 / 10.000 adicionais pedidos).
As cobranças acima são aparentemente inevitáveis - para um milhão de objetos você está olhando em torno de $ 10 (ou $ 11). Como no final você deve realmente criar os arquivos no intervalo de destino, outras abordagens (por exemplo, tar-gzip os arquivos, Amazon Import / Export, etc) não vão contornar esse custo. Não obstante, pode valer a pena entrar em contato com a Amazon se você tiver mais de um milhão de objetos para transferir.
Dado o acima (preço inevitável), a próxima coisa a considerar é o tempo, que será um grande fator ao copiar 'milhões de arquivos'. Todas as ferramentas que podem executar a cópia direta entre depósitos incorrerão na mesma cobrança. Infelizmente, você precisa de uma solicitação por arquivo (para copiar), uma solicitação para excluir e possivelmente uma solicitação para ler os dados da ACL (se os arquivos tiverem varias ACLs). A melhor velocidade virá de qualquer coisa que possa executar as operações mais paralelas.
Existem algumas abordagens de linha de comando que podem ser bastante viáveis:
- s3cmd-modification (esse pedido pull específico) inclui comandos cp e mv paralelos e deve ser uma boa opção para você.
- O console da AWS pode executar a cópia diretamente - não posso falar sobre o quanto ela é paralela.
- O script aws de Tim Kay pode fazer a cópia - mas não é paralelo - você precisará fazer o script para executar a cópia completa desejada ( provavelmente não é a melhor opção neste caso - embora seja um ótimo roteiro).
- CloudBerry S3 Explorer , Bucket Explorer , e CloudBuddy devem ser capazes de executar a tarefa, embora eu não saiba como a eficiência de cada empilhadeira . Acredito, porém, que os recursos multi-threaded da maioria deles exigem a compra do software.
- Crie seu próprio script usando um dos SDKs disponíveis.
Existe alguma possibilidade de que o s3fs funcione - é bastante paralelo, suporta cópias entre o mesmo intervalo - NÃO suporta cópias entre diferentes intervalos, mas pode suportar movimentações entre diferentes intervalos.
Eu começaria com s3cmd-modification e verificaria se você tem algum sucesso com ele ou entre em contato com a Amazon para obter uma solução melhor.