Estou procurando uma ferramenta para me ajudar a copiar o conteúdo de um bucket AWS S3 em um segundo bucket AWS S3 sem baixar o conteúdo primeiro para o sistema de arquivos local.
Tentei usar a opção de cópia do console AWS S3, mas isso resultou na falta de alguns arquivos aninhados.
Tentei usar o aplicativo Transmitir (da Panic). O comando duplicado baixa os arquivos primeiro para o sistema local e depois os carrega de volta para o segundo depósito, o que é bastante ineficiente.
amazon-s3
copy
amazon-web-services
cnicolaou
fonte
fonte
aws configure set default.s3.max_concurrent_requests 200
Veja esta postagem para mais detalhes e opções stackoverflow.com/questions/4663016/…Respostas:
Copiar entre Buckets S3
A AWS (recentemente) lançou uma interface de linha de comando para copiar entre baldes.
http://aws.amazon.com/cli/
Isso irá copiar de um intervalo de destino para outro.
Veja a documentação aqui: S3 CLI Documentation
fonte
A client error (PermanentRedirect) occurred when calling the ListObjects operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
Um exemplo simplificado usando a gem aws-sdk:
Se você deseja realizar a cópia entre diferentes intervalos, especifique o nome do intervalo de destino:
fonte
Agora você pode fazer isso na interface de administração do S3. Basta entrar em um balde e selecionar todas as suas pastas
actions->copy
. Em seguida, vá para o novo baldeactions->paste
.fonte
É possível com o aws-sdk gem recente , consulte o exemplo de código:
mais detalhes: Como copiar o arquivo em intervalos usando a gem aws-s3
fonte
Copiar entre intervalos em regiões diferentes
O comando acima copia um arquivo de um balde na Europa (eu-west-1) para o Japão (ap-northeast-1). Você pode obter o nome do código para a região do seu intervalo com este comando:
A propósito, usar Copiar e Colar no console da web S3 é fácil, mas parece fazer o download do balde de origem para o navegador e depois fazer o upload para o balde de destino. Usar "aws s3" foi muito mais rápido para mim.
fonte
Eu criei um executável Docker da ferramenta s3s3mirror . Um utilitário para copiar e espelhar de um bucket AWS S3 para outro.
Ele é encadeado permitindo a CÓPIA paralela e muito eficiente em termos de memória, é bem-sucedido onde o s3cmd falha completamente.
Uso:
Para obter uma lista completa de opções, tente:
fonte
Verifique a documentação abaixo. Eu acho que é isso que você está procurando. http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html
O S3Interface da gem de RightAws tem funções de cópia que fazem o acima.
http://rubydoc.info/gems/right_aws/3.0.0/RightAws/S3Interface#copy-instance_method
fonte
Eu imagino que você provavelmente encontrou uma boa solução agora, mas para outros que estão enfrentando esse problema (como eu estava apenas recentemente), criei um utilitário simples especificamente com o propósito de espelhar um bucket S3 para outro em uma maneira altamente simultânea, mas eficiente de CPU e memória.
Está no github sob uma licença Apache aqui: https://github.com/cobbzilla/s3s3mirror
Quando você tem um balde muito grande e está procurando desempenho máximo, pode valer a pena tentar.
Se você decidir tentar, entre em contato se tiver algum feedback.
fonte
Se você estiver no shell e quiser copiar vários arquivos, mas não todos os arquivos: s3cmd cp --recursive s3: // BUCKET1 / OBJECT1 s3: // BUCKET2 [/ OBJECT2]
fonte
Eu escrevi um script que faz backup de um intervalo S3: https://github.com/roseperrone/aws-backup-rake-task
Eu uso isso em uma tarefa rake (para um aplicativo Rails):
fonte
Ouvi dizer que existe um módulo de nó para isso se você gosta de javascript: p
Dos documentos do knox-copy :
fonte
Fui informado de que você também pode fazer isso usando s3distcp em um cluster EMR. É suposto ser mais rápido para dados que contêm arquivos grandes. Funciona bem o suficiente em pequenos conjuntos de dados - mas eu teria preferido outra solução dada a curva de aprendizado necessária para configurar tão poucos dados (nunca trabalhei com EMR antes).
Aqui está um link da documentação da AWS: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html
Atualização: para o mesmo conjunto de dados, o s3s3mirror foi muito mais rápido que o s3distcp ou o AWS cli. Muito mais fácil de configurar também.
fonte
Para copiar de um balde S3 para o mesmo ou para outro balde S3 sem fazer download para o local, é muito simples. Use o comando shell abaixo.
Isso copiará todos os arquivos da
SourceFoldername
pasta do intervalo de origem para a pasta do intervalo de destinoTargetFoldername
. No código acima, por favor, substituirAccessKey
,SecurityKey
eExternalBucket
com seus valores correspondentes.fonte
hdfs
?da AWS cli https://aws.amazon.com/cli/ você poderia fazer
aws s3 ls
- Isso irá listar todos os depósitos S3aws cp --recursive s3://<source bucket> s3://<destination bucket>
- Isso irá copiar os arquivos de um intervalo para outroNota * Muito útil ao criar depósitos de replicação entre regiões, ao fazer o acima, todos os arquivos são rastreados e uma atualização do arquivo de região de origem será propagada para o depósito replicado. Tudo, exceto as exclusões de arquivos, são sincronizados.
Para CRR, certifique-se de ter o controle de versão habilitado nos buckets.
fonte
Que tal o
aws s3 sync
comando cli. aws s3 sync s3: // bucket1 / s3: // bucket2 /fonte
Como Neel Bhaat explicou neste blog , existem muitas ferramentas diferentes que podem ser usadas para esse fim. Alguns são fornecidos pela AWS, enquanto a maioria são ferramentas de terceiros. Todas essas ferramentas exigem que você salve a chave e o segredo da sua conta da AWS na própria ferramenta. Tenha muito cuidado ao usar ferramentas de terceiros, pois as credenciais que você salva podem custar-lhe todo o seu valor e deixá-lo morto.
Portanto, sempre recomendo usar o AWS CLI para essa finalidade. Você pode simplesmente instalar este link . Em seguida, execute o seguinte comando e salve sua chave, valores secretos no AWS CLI.
E use o seguinte comando para sincronizar seu AWS S3 Bucket com sua máquina local. (A máquina local deve ter AWS CLI instalado)
Exemplos:
1) Para AWS S3 para armazenamento local
2) Do armazenamento local para AWS S3
3) De balde AWS s3 para outro balde
fonte
A melhor maneira de copiar o bucket S3 é usando o AWS CLI .
Envolve estas 3 etapas:
Se você estiver copiando buckets entre duas contas AWS, você precisa anexar a política correta com cada bucket.
Depois disso, use este comando para copiar de um intervalo para outro.
Os detalhes das etapas 2 e 3 são fornecidos neste link:
fonte
Você pode escrever um aplicativo Java - talvez até mesmo um aplicativo GUI SWING que usa as APIs Java da AWS. Para copiar objetos, consulte -
https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/s3/src/main/java/com/example/s3/CopyObject.java
fonte