Como mover arquivos entre dois buckets S3 com custo mínimo?

39

Eu tenho milhões de arquivos em um bucket do Amazon S3 e gostaria de mover esses arquivos para outros buckets e pastas com custo mínimo ou nenhum custo, se possível. Todos os baldes estão na mesma zona.

Como eu poderia fazer isso?

    
por Daniel Cukier 12.01.2012 / 22:33

6 respostas

51

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.

    
por 13.01.2012 / 22:35
5

Não sei se é a melhor abordagem, mas o console de gerenciamento da AWS tem um recurso de copiar / copiar / colar. muito fácil de usar e eficiente.

    
por 28.06.2012 / 07:51
3

Eu imagino que você provavelmente já tenha encontrado uma boa solução, mas para outros que estão encontrando esse problema (como eu era recentemente), criei um utilitário simples especificamente para o propósito de espelhar um bucket S3. para outro em uma maneira altamente concorrente, mas eficiente de CPU e memória.

Está no github com uma licença Apache aqui: link

Se você decidir experimentá-lo, por favor me avise se você tiver algum comentário.

    
por 17.05.2013 / 01:12
3

Tópico antigo, mas isso é para qualquer um que esteja investigando o mesmo cenário. Junto com o tempo que levei para mais de 20.000 objetos. Executando no AWS Linux / Centos, sendo cada objeto a maior parte das imagens, junto com alguns vídeos e vários arquivos de mídia.

Usando o AWS CLI Tools para copiar os arquivos do bucket A para o bucket B.

Crie o novo intervalo

$ aws s3 mb s3://new-bucket-name

B. Sincronize o antigo balde com o novo balde

$ aws s3 sync s3://old-bucket-name s3://new-bucket-name

Copiando mais de 20.000 objetos ...

Iniciado 17:03

Terminou às 17:06

Tempo total para mais de 20.000 objetos = aproximadamente 3 minutos

Quando o novo intervalo estiver configurado corretamente, ou seja, permissões, política etc. e você deseja remover o balde antigo.

C. Remover / excluir o antigo intervalo

$ aws s3 rb --force s3://old-bucket-name
    
por 01.06.2017 / 08:56
1

O AWS CLI fornece uma maneira de copiar um bucket para outro em processos paralelos. Extraído do link :

Os comandos a seguir dirão ao AWS CLI para usar 1.000 encadeamentos para executar trabalhos (cada um um pequeno arquivo ou uma parte de uma cópia com várias partes) e olhar para frente 100.000 trabalhos:

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000

Depois de executá-los, você pode usar o comando de sincronização simples da seguinte forma:

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path

Em uma máquina m4.xlarge (em núcleos AWS-4, 16GB RAM), no meu caso (arquivos de 3-50GB) a velocidade de sincronização / cópia passou de cerca de 9,5MiB / s para 700 + MiB / s, aumento de velocidade de 70x sobre a configuração padrão.

    
por 21.03.2018 / 14:10
0

No bloco de perda, selecione o (s) arquivo (s) que você gostaria de copiar para outro intervalo.

  • Em Ações, escolha "Copiar".
  • Ir para o balde de ganho.
  • Em Ações, escolha 'Colar'
por 20.08.2013 / 19:50