Como copio todos os objetos de um bucket do Amazon S3 em outro bucket?

7 minuto de leitura
0

Quero copiar ou mover todos os objetos de um bucket do Amazon Simple Storage Service (Amazon S3) para outro. Quero migrar objetos entre buckets do S3.

Resumo

Para copiar os objetos de um bucket do S3 para outro, siga estas etapas:

1.    Crie um bucket do S3.

2.    Instale e configure a AWS Command Line Interface (AWS CLI).

3.    Copie os objetos de um bucket do S3 para o outro.

Observação: usar os comandos aws s3 ls e aws s3 sync em buckets grandes, com 10 milhões de objetos ou mais, pode demorar muito e atingir o limite da operação. Se você atingir o tempo limite devido a um bucket grande, prefira usar as métricas do Amazon CloudWatch para calcular o tamanho do bucket e o número total de objetos nele. Além disso, é preferível usar as Operações em Lote do Amazon S3 para copiar os objetos.

4.    Verifique se os objetos foram copiados.

5.    Edite as chamadas de API em funcionamento com o nome do bucket de destino.

Antes de começar, considere o seguinte:

Resolução

Criar um bucket do S3

1.    Abra o console do Amazon S3.

2.    Escolha Criar bucket.

3.    Escolha um nome compatível com DNS para seu novo bucket.

4.    Selecione sua região da AWS.

Dica: crie o bucket de destino na mesma região do bucket de origem, para evitar que o tráfego entre regiões diferentes cause problemas no desempenho.

5.    Como opção, escolha Copiar as configurações de um bucket existente para usar as mesmas configurações do bucket de origem.

Instalar e configurar a AWS CLI

1.    Instale a AWS CLI.

2.    Configure a AWS CLI executando o comando a seguir:

aws configure

Observação: se você receber erros ao executar os comandos da AWS CLI, verifique se está usando a versão mais recente.

3.    Insira suas chaves de acesso (isto é, o ID da chave de acesso e a chave de acesso secreta).

4.    Pressione Enter para ignorar as opções de região padrão e de saída padrão. Para mais informações sobre os parâmetros de região do Amazon S3, consulte endpoints de serviços da AWS.

Observação: as saídas da AWS CLI são em formato JSON, em formato de texto ou de tabela, mas nem todos os comandos são compatíveis com todos os formatos. Para mais informações, consulte Controlar a saída do comando da AWS CLI.

Copiar os objetos de um bucket do S3 para o outro

1.    Se você arquivou objetos do S3 na classe de armazenamento do Amazon Simple Storage Service Glacier, restaure os objetos.

2.    Copie os objetos do bucket de origem para o bucket de destino executando o seguinte comando sync na AWS CLI:

aws s3 sync s3://DOC-EXAMPLE-BUCKET-SOURCE s3://DOC-EXAMPLE-BUCKET-TARGET

Observação: edite o comando sync com o nome dos buckets de origem e de destino.

O comando sync usa as APIs CopyObject para copiar objetos entre os buckets do S3. O comando sync lista os buckets de origem e de destino para identificar quais objetos estão no bucket de origem mas não no bucket de destino. Ele também identifica quais objetos no bucket de origem possuem datas LastModified diferentes da dos objetos no bucket de destino. Se você usar o comando sync em um bucket com versionamento habilitado, somente a versão atual do objeto será copiada; as versões anteriores não serão copiadas. Esse comportamento preserva os metadados do objeto por padrão.

Se o bucket de origem tiver listas de controle de acesso (ACLs) habilitadas, as ACLs não serão copiadas para o bucket de destino. Isso ocorre mesmo se as ACLs estiverem habilitadas no bucket de destino. Se as ACLs estiverem habilitadas tanto no bucket de origem quanto no de destino, as ACLs do objeto de destino concederão a permissão FULL_CONTROL à conta que realizou a cópia. Caso a operação de sincronização falhe, você poderá executar o comando sync novamente sem duplicar os objetos que já foram copiados. Para solucionar problemas com a operação de sync, consulte Por que não consigo copiar um objeto entre dois buckets do Amazon S3?

3.    (Opcional) Se você atingir o tempo limite, use o comando cloudwatch get-metric-statistics para calcular o número de objetos no bucket:

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name NumberOfObjects --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=AllStorageTypes --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 600 --statistic Average --output json

4.    (Opcional) Se você atingir o tempo limite, use o comando cloudwatch get-metric-statistics para ver o tamanho do bucket:

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=StandardStorage --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 3600 --statistics Average --unit Bytes --output json

Observação: as operações de listagem podem ser muito demoradas, levando o comando a atingir o tempo limite. Em buckets grandes, prefira usar as métricas do Amazon CloudWatch para calcular o tamanho do bucket e o número total de objetos. Todavia, como as métricas do Amazon CloudWatch são extraídas apenas uma vez por dia, o número de objetos e o tamanho do bucket podem diferir dos resultados relatados pelo comando list.

Verificar se os objetos foram copiados

1.    Verifique o conteúdo dos buckets de origem e de destino executando os comandos a seguir:

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-SOURCE --summarize > bucket-contents-source.txt

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-TARGET --summarize > bucket-contents-target.txt

Observação: edite o comando list com o nome dos buckets de origem e de destino.

2.    Compare os objetos do bucket de origem com os objetos do bucket de destino por meio dos arquivos que foram salvos no diretório da AWS CLI, contendo as saídas. Veja um exemplo de saída a seguir:

$ aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET --summarize
2017-11-20 21:17:39      15362 s3logo.png

  Total Objects: 1        Total Size: 15362

Editar as chamadas de API em funcionamento com o nome do bucket de destino

Atualize as aplicações e as workloads já existentes para que utilizem o nome do bucket de destino. Se você gravar dados com frequência, talvez precise executar comandos do sync para eliminar a discrepância entre o bucket de origem e o de destino.

Informações relacionadas

Definição de preço do Amazon S3

Copiar seu objeto para uma pasta

Após executar uma grande operação de exclusão no Amazon S3, o comando da lista não responde. Como faço para solucionar isso?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos