Mover arquivos diretamente de uma conta S3 para outra?

90

Uma pergunta bastante básica, mas não consegui encontrar uma resposta. Usando o Transit, posso "mover" arquivos de um bucket S3 em uma conta AWS para outro bucket S3 em outra conta AWS, mas o que ele realmente faz é baixar os arquivos do primeiro e depois carregá-los para o segundo.

Existe uma maneira de mover arquivos diretamente de uma conta S3 para outra sem baixá-los no meio?

Andrew
fonte

Respostas:

22

Se você está apenas procurando uma solução pronta, existem algumas soluções que podem fazer isso. O Bucket Explorer funciona no Mac e no Windows e pode copiar entre contas, assim como o Cloudberry S3 Explorer e o S3 Browser, mas eles são Windows apenas, portanto, podem não funcionar para você.

Suspeito que o console da AWS também possa fazer isso com a configuração de permissões apropriada, mas não testei isso.

Você também pode fazer isso usando a API da AWS , desde que tenha fornecido à conta da AWS que está usando permissões de gravação para o intervalo de destino.

Geoff Appleford
fonte
+1 para o Explorador de Bucket. Muito mais fácil do que o console de gerenciamento AWS ou s3cmd para copiar um bucket entre contas. O segundo conjunto de instruções funcionou para mim com o teste gratuito: bucketexplorer.com/documentation/…
LennonR
Cloudberry é o caminho a percorrer. Grátis, além de ser fácil arrastar e soltar após uma configuração ainda mais fácil. E não, eu não trabalho lá :)
skidadon
3
O Bucket Explorer baixa e reenvia os dados ou move os dados diretamente entre os servidores da Amazon?
Quarta
Observe que a versão de teste do Cloudberry (versão 5.0.0.32 pelo menos) tem um limite de transferência de 5 GB!
DarthPablo
123

Sim, há um jeito. E é muito simples, embora seja difícil de encontrar. 8)

Por exemplo, suponha que o seu primeiro nome de usuário da conta seja [email protected] e o segundo seja [email protected].

Abra o AWS Management Console como acc1. Acesse as propriedades do bucket do Amazon S3 e, na guia "Permissões", clique em "Adicionar mais permissões". Em seguida, adicione Permissões de Lista e Visualização para "Usuários Autenticados".

Em seguida, no AWS IAM (é acessível a partir das guias do console) de acc2, crie um usuário com acesso total ao bucket S3 (para ser mais seguro, você pode configurar as permissões exatas, mas eu prefiro criar um usuário temporário para a transferência e excluí-lo).

Em seguida, você pode usar s3cmd (usando as credenciais do usuário recém-criado em acc2) para fazer algo como:

s3cmd cp s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive

Todas as transferências serão feitas do lado da Amazon.

side2k
fonte
8
Ótima dica! Também para sincronizar baldes inteiros à la rsync, você pode usar s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllllll
6
Se você tiver problemas com um 403 AccessDenied ao copiar arquivos do destino para o host, consulte esta postagem. Pode haver outra maneira de fazer isso, mas os resultados aqui funcionaram para mim. alfielapeter.com/posts/…
crlane
que tal baldes um pouco grandes? digamos na área de 50 GB, isso lhe dá algum problema?
ianstarz
4
s3cmdtambém pode ser instalado com homebrew, fyi
ianstarz
3
se o seu intervalo de destino serve para servir arquivos publicamente ... você pode querer adicionar de --acl-publicoutra forma, todos os arquivos são privados (pelo menos era para mim quando executei o comando). com tantos arquivos privados, tive que adicionar uma política no intervalo para torná-los públicos novamente
choonkeat
58

Use o aws cli (usei uma instância do ubuntu 14 ec2) e execute o seguinte comando:

aws s3 sync s3://bucket1 s3://bucket2

Você precisará especificar os detalhes da conta para um e ter acesso público de gravação ou acesso público de leitura ao outro.

Isso sincronizará os dois depósitos. Você pode usar o mesmo comando novamente mais tarde para sincronizar rapidamente. A melhor parte é que não parece exigir nenhuma largura de banda (por exemplo, os arquivos não estão passando pelo computador local).

Programster
fonte
3
Em um balde muito grande, tive mais sorte com isso. s3cmd pareceu travar a geração da lista de arquivos no primeiro depósito. Pode ter terminado, mas fiquei impaciente.
pense em
2
Eu tive a mesma experiência; por alguma razão, aws s3 syncparece correr cerca de uma ordem de magnitude mais rápido do que s3cmd cp.
pix0r
2
Isso funcionou para mim. Se você tiver problemas de permissão, tente usar a --grantsopção. Mais informações na documentação: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen
3
As permissões não são copiadas quando você sincroniza, então você terá que especificar --grants. Aprendi isso depois de copiar uma tonelada de dados e então tive que refazer a sincronização para um novo intervalo. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersdefine permissão de leitura para usuários públicos.
Dan Sandland
Isso funcionou cerca de 10 vezes mais rápido do que s3cmdpara mim e também é capaz de sincronizar arquivos de alteração em vez de copiar tudo novamente se você precisar executar o comando novamente no futuro - muito melhor!
nfm
5

boto funciona bem. Veja este tópico . Usando o boto, você copia objetos direto de um depósito para outro, em vez de baixá-los para a máquina local e carregá-los para outro depósito.

Rose Perrone
fonte
3

No Mac OS XI usei o aplicativo Transmit do Panic. Abri uma janela para cada conta S3 (usando as chaves de API e segredos). Eu poderia então arrastar de um balde em uma janela para outro balde na outra janela. Não há necessidade de baixar arquivos localmente primeiro .

Andrew está correto, Transmit baixa os arquivos localmente e depois carrega os arquivos.

One Giant Leap AB
fonte
2
Tenho o Transmit e tenho 99% de certeza de que a transferência que você está descrevendo faz o download dos arquivos para uma pasta temporária e, em seguida, carrega para outro servidor. Você tem certeza de que os arquivos não passaram pelo seu computador?
Andrew
1
alguém pode confirmar isso?
David Mauricio
2
Eu confirmo. Transmita downloads e uploads. Isso torna as coisas terrivelmente lentas, mas tem a enorme vantagem de armazenar o conteúdo copiado sob o proprietário correto.
Fabio Russo
3

Mover arquivos S3 de uma conta para outra conta

Vamos considerar que há duas contas: conta de origem e conta de destino. E dois baldes source-buckete destination bucket. Queremos mover todos os arquivos de source-bucketpara destination-bucket. Podemos fazer isso pelas seguintes etapas:

  1. aws configure
    • Configure sua conta de destino usando a credencial ou a função IAM.
  2. Crie uma política de usuário para o usuário da conta de destino.
  3. Dê ao usuário de destino acesso ao source-bucket, modificando a política do source-bucket e adicionando a política do usuário da conta de destino a ele. Desta forma, o usuário de destino terá acesso ao source-bucket.
  4. aws s3 ls s3://source-bucket/
    • isso irá verificar se a conta de destino está tendo acesso ao source-bucket. Apenas para confirmação faça isso.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • isso copiará todos os arquivos do intervalo de origem para o intervalo de destino. Todos os arquivos são copiados usando o sinalizador --recursive.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • isso moverá todos os arquivos do depósito de origem para o depósito de destino.

Alternativamente, você pode usar o comando sync - aws s3 sync s3://source-bucket s3://detination-bucket

Para uma melhor explicação siga o link

Anand Tripathi
fonte
2

O CrossFTP pode copiar arquivos S3 diretamente de um depósito para outro, sem baixá-los. É um cliente GUI S3 que funciona em Windows, Mac e Linux.

Gatorhall
fonte
4
Deve-se notar que isso só é possível com a versão paga. Não é uma solução gratuita.
Michael Brook
2

Você pode usar o Cyberduck (código aberto)

Marco Delavegua
fonte
Na loja do Windows, eles cobram algo para fazer o download, mas no site deles você pode obtê-lo gratuitamente. Depois de criar um ID de chave de acesso da AWS e uma chave de acesso secreta, consegui me conectar ao meu armazenamento S3. Ainda não testei a cópia, mas parece que pode funcionar.
Wouter
1

Para arquivos recém-criados (objetos NÃO existentes), você pode aproveitar as vantagens da nova funcionalidade da AWS. É Replicação entre regiões (em "Controle de versão" para o bucket S3). Você pode criar uma política que permitirá replicar novos objetos para um intervalo em uma conta diferente.

Para objetos existentes, você ainda precisará copiar seus objetos usando outro método - a menos que a AWS introduza funcionalidade nativa para isso no futuro.

George curioso
fonte
0

Pode-se fazê-lo executando o seguinte:

aws s3 mv (sync for keeping buckets in sync) s3://source-bucket s3://destination-bucket --recursive

  1. Anexe uma política de intervalo ao intervalo de origem na conta de origem.

  2. Anexe uma política AWS Identity and Access Management (IAM) a um usuário ou função na conta de destino.

  3. Use o usuário ou função IAM na conta de destino para realizar a movimentação entre contas.

svikramjeet
fonte