Como mover o balde S3 para outro local

20

Usamos o S3 para armazenar milhões de entradas em nosso aplicativo da Web, agora movemos tudo para o EC2, servidores da UE, e também queremos mover esses dados do S3 para a UE. Mas o depósito que usamos está nos EUA e parece não haver ferramenta para mover todo o conteúdo do depósito para outro depósito.

Também há problemas em como sincronizar os dados posteriormente, quando mudarmos para o bloco da UE, os dados que serão criados enquanto a migração estiver em execução.

skrat
fonte

Respostas:

18

O novo AWS CLI oficial oferece suporte nativo à maioria das funcionalidades do s3cmd.

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

aws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1 --region us-west-2
AB
fonte
Onde você pode encontrar uma lista de nomes de regiões?
Bart
Você pode encontrar as regiões S3 aqui: docs.aws.amazon.com/general/latest/gr/rande.html#s3_region Elas são quase idênticas às regiões EC2 de onde você é aws ec2 describe-regions, mas us-east-1também são conhecidas como US Standard for S3 e são um pouco diferente por razões históricas.
AB
5

Eu acho que você pode executar:

s3cmd --recursive cp s3://oldbucket/ s3://newbucket

Deve copiá-lo diretamente.

Alexey
fonte
A CLI diz: "comando não encontrado"
bart
3

Não conheço uma solução empacotada para fazer isso, mas é essencialmente apenas uma lista de buckets e, em seguida, copia PUT cada objeto do bucket dos EUA para o bucket da UE. A API PUT-copy suporta "if-modified-since" e "if-none-match", para que você possa executá-la repetidamente sem duplicar esforços: http://docs.amazonwebservices.com/AmazonS3/2006-03-01/ API / index.html? RESTObjectCOPY.html

Para uma migração ao vivo, sugiro a seguinte abordagem:

  1. Primeira etapa opcional: se você tiver uma quantidade enorme de dados para migrar, considere usar o AWS Import / Export para capturar a primeira captura instantânea dos dados em um dispositivo físico nos EUA e enviá-los fisicamente para a UE. Isso pode economizar tempo e dinheiro.
    • Configure um script para migrar dados dos EUA para a UE usando o if-modified-since or if-none-match, conforme descrito acima. Faça com que seja inteligente o suficiente para não acumular dados recentes da UE com dados antigos dos EUA (quando você chegar à etapa 5 abaixo). Execute-o continuamente em um loop até que os dois baldes estejam aproximadamente no mesmo estado.
    • Modifique seu aplicativo Web para colocar dados nos baldes dos EUA e da UE ao mesmo tempo, continuando a OBTER dados exclusivamente dos EUA.
    • Continue executando o script de migração até ter certeza de que os buckets estão exatamente no mesmo estado (ou o mais próximo possível, dada a consistência eventual).
    • Modifique o aplicativo Web novamente para OBTER dados exclusivamente do bloco da UE.
    • Agora você pode desativar o script de migração.
    • Procure eventuais anomalias de consistência e limpe-as.
    • Modifique o aplicativo Web para parar de COLOCAR dados no balde dos EUA.
    • EXCLUIR tudo no balde dos EUA.

Convém usar o Armazenamento de redundância reduzida S3 no seu bloco da UE durante a migração para obter taxas de dados mais baratas e tempos de resposta mais rápidos, já que os dados são apenas uma duplicata dos dados dos EUA.

user44700
fonte
0

Eu trabalhei bastante com o S3 e nunca encontrei uma ferramenta que faça isso de forma nativa. No entanto, não seria tão difícil usar alguns scripts de sincronização s3cmd-sync para manter dois buckets sincronizados entre si.

EEAA
fonte
Sim, isso funcionaria, mas exige que baixemos tudo localmente, enquanto a API do S3 oferece suporte à movimentação / cópia de entradas sem baixá-las.
Skrat