Atualizar
Como apontado por alberge (+1), hoje em dia a excelente AWS Command Line Interface fornece a abordagem mais versátil para interagir com (quase) todas as coisas da AWS - entretanto, ela cobre a maioria das APIs de serviços e também apresenta comandos S3 de nível superior para lidar com o seu caso de uso especificamente, consulte a referência AWS CLI para S3 :
- sync - Sincroniza diretórios e prefixos S3. O seu uso caso é coberto por Exemplo 2 (mais fino granulado com o uso
--exclude
, --include
e de manuseamento de prefixo etc também está disponível):
O comando de sincronização a seguir sincroniza objetos em um prefixo e intervalo especificados com objetos em outro prefixo e intervalo especificados, copiando objetos s3. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Para completar, mencionarei que os comandos S3 de nível inferior também estão disponíveis por meio do subcomando s3api , o que permitiria traduzir diretamente qualquer solução baseada em SDK para o AWS CLI antes de adotar sua funcionalidade de nível superior eventualmente.
Resposta Inicial
A movimentação de arquivos entre depósitos S3 pode ser realizada por meio da API PUT Object - Copy (seguida por DELETE Object ):
Esta implementação da operação PUT cria uma cópia de um objeto que já está armazenado no Amazon S3. Uma operação de cópia PUT é o mesmo que executar um GET e, em seguida, um PUT. Adicionar o cabeçalho da solicitação, x-amz-copy-source, faz com que a operação PUT copie o objeto de origem para o intervalo de destino. Fonte
Existem respectivos exemplos para todos os SDKs da AWS existentes disponíveis, consulte Copiando objetos em uma única operação . Naturalmente, uma solução baseada em script seria a primeira escolha óbvia aqui, portanto, Copiar um objeto usando o SDK da AWS para Ruby pode ser um bom ponto de partida; se você preferir Python, o mesmo pode ser feito via boto também, é claro, consulte o método copy_key()
na documentação da API S3 do boto .
PUT Object
apenas copia arquivos, então você precisará excluir explicitamente um arquivo via DELETE Object
still após uma operação de cópia bem-sucedida, mas isso será apenas mais algumas linhas uma vez que o script geral que trata do intervalo e dos nomes de arquivo esteja pronto (há respectivos exemplos também , consulte, por exemplo, Exclusão de um objeto por solicitação ).
O novo oficial AWS CLI oferece suporte nativo à maioria das funcionalidades do
s3cmd
. Eu estava usandos3cmd
ou o Ruby AWS SDK para fazer coisas como essa, mas a CLI oficial funciona muito bem para isso.http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
fonte
aws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1
nohup aws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1 &
thegeekstuff.com/2010/12/5-ways-to-execute-linux-commandPara mover / copiar de um balde para outro ou o mesmo balde, eu uso a ferramenta s3cmd e funciona bem. Por exemplo:
fonte
Passei dias escrevendo minha própria ferramenta personalizada para paralelizar as cópias necessárias para isso, mas depois encontrei a documentação sobre como fazer com que o comando AWS S3 CLI sync sincronizasse buckets com paralelização massiva . Os seguintes comandos dirão ao AWS CLI para usar 1.000 threads para executar trabalhos (cada um, um pequeno arquivo ou uma parte de uma cópia multiparte) e prever 100.000 trabalhos:
Depois de executá-los, você pode usar o comando de sincronização simples da seguinte maneira:
Em uma máquina m4.xlarge (em AWS - 4 núcleos, 16 GB de RAM), no meu caso (arquivos de 3-50 GB), a velocidade de sincronização / cópia foi de cerca de 9,5 MiB / s para 700 + MiB / s, um aumento de velocidade de 70x acima da configuração padrão.
Atualização: Observe que S3CMD foi atualizado ao longo dos anos e essas alterações agora só são eficazes quando você está trabalhando com muitos arquivos pequenos. Observe também que o S3CMD no Windows (somente no Windows) é seriamente limitado no rendimento geral e só pode atingir cerca de 3Gbps por processo, independentemente do tamanho da instância ou das configurações que você usa. Outros sistemas como o S5CMD têm o mesmo problema. Falei com a equipe do S3 sobre isso e eles estão investigando.
fonte
Exemplo de .NET conforme solicitado:
com o cliente sendo algo como
Pode haver uma maneira melhor, mas é apenas um código rápido que escrevi para transferir alguns arquivos.
fonte
Se você tiver um host Unix na AWS, use s3cmd de s3tools.org. Configure permissões para que sua chave seja acesso de leitura ao intervalo de desenvolvimento. Então corra:
fonte
s3cmd cp
não aceita a--skip-existing
opção, você pode, no entanto, executar ems3cmd sync
vez de ignorar existentePara mim, o seguinte comando funcionou:
fonte
Aqui está uma aula de ruby para fazer isso: https://gist.github.com/4080793
Exemplo de uso:
fonte
Na verdade, recentemente eu apenas usei a ação copiar + colar na interface AWS s3. Basta navegar até os arquivos que deseja copiar, clicar em "Ações" -> "Copiar" e navegar até o intervalo de destino e "Ações" -> "Colar"
Ele transfere os arquivos muito rápido e parece uma solução menos complicada que não requer nenhuma programação, ou soluções exageradas como essa.
fonte
Tivemos exatamente esse problema com nossos trabalhos de ETL no Snowplow , então extraímos nosso código de cópia de arquivo paralelo (Ruby, construído em cima do Fog ), em sua própria gema Ruby, chamada Sluice:
https://github.com/snowplow/sluice
Sluice também controla a exclusão, movimentação e download de arquivos S3; tudo paralelizado e com nova tentativa automática se uma operação falhar (o que acontece com uma frequência surpreendente). Espero que seja útil!
fonte
Eu sei que este é um tópico antigo, mas para outras pessoas que chegam lá, minha sugestão é criar um trabalho agendado para copiar o conteúdo do intervalo de produção para o de desenvolvimento.
Você pode usar. Se você usar o .NET, este artigo pode ajudá-lo
https://edunyte.com/2015/03/aws-s3-copy-object-from-one-bucket-or/
fonte
Para a nova versão aws2.
fonte