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

5 minuto de leitura
0

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

Breve descrição

Para copiar objetos de um bucket do S3 para outro bucket, escolha uma das seguintes opções:

O comando sync funciona bem para buckets que não são muito grandes. Mas é caro executar o comando sync para copiar grandes buckets com milhões de objetos, e a operação de cópia pode atingir o tempo limite. Se você tiver tempo limite ao copiar um bucket, use as métricas do Amazon CloudWatch para calcular o tamanho e o número de objetos no bucket. Se você tiver milhões de objetos em seu bucket do S3, é uma prática recomendada usar as operações em lote do S3 para copiar seus objetos.

Observação: para copiar objetos do seu bucket para um bucket pertencente a uma conta diferente da AWS, use o AWS Identity and Access Management (AWS IAM) para configurar permissões entre contas. Certifique-se de que seu perfil do IAM tenha permissões s3:GetObjectTagging para objetos de origem e permissões s3:PutObjectTagging para objetos de destino.

Para aumentar o desempenho da sincronização e copiar seus objetos mais rapidamente, faça um ou mais dos seguintes procedimentos:

Resolução

Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Copiar os objetos de um bucket do S3 para o outro

Para copiar objetos de um bucket para outro, conclua as seguintes etapas:

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

  2. Execute o comando sync a seguir, mas substitua example\ _source\ _bucket e example\ _target\ _bucket pelos nomes dos seus buckets do S3:

    aws s3 sync s3://example_source_bucket s3://example_target_bucket

    Observação: O comando sync copia somente os objetos que ainda não estão no bucket de destino. Para copiar explicitamente cada objeto, use o comando cp em vez do comando sync. Quando você usa o comando sync em um bucket com controle de versão, somente a versão atual de cada objeto é copiada. Esse comportamento preserva os metadados do objeto por padrão.

  3. (Opcional) Se você atingir o tempo limite, use o comando get-metric-statistics do CloudWatch para calcular o tamanho do seu bucket e o número de objetos.

    Para calcular o tamanho do seu bucket, execute o seguinte comando:

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

    Para calcular o número de objetos em seu bucket, execute o seguinte comando:

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

    Se o tamanho do seu bucket for grande e ele contiver milhões de objetos, não use o comando sync. Em vez disso, use as operações em lote do S3 ao copiar seu bucket.

Importante: as listas de controle de acesso (ACLs) não são copiadas do bucket de origem para o bucket de destino quando você executa o comando sync. Se as ACLs estiverem ativas tanto no bucket de origem quanto no de destino, as ACLs do objeto de destino concedem a permissão FULL_CONTROL à conta que realizou a cópia. Para solucionar problemas com o comando sync, consulte Por que não consigo copiar um objeto entre dois buckets do Amazon S3?

Verificar se os objetos foram copiados

Para verificar se os objetos foram copiados, conclua as seguintes etapas:

  1. Para verificar o conteúdo dos buckets de origem e de destino, execute os comandos ls a seguir:
    aws s3 ls --recursive s3://example_source_bucket --summarize > bucket-contents-source.txt
    aws s3 ls --recursive s3://example_target_bucket --summarize > bucket-contents-target.txt
    Observação: O comando ls pode expirar para buckets grandes. Em buckets grandes, use as métricas do CloudWatch para calcular o tamanho do bucket e o número total de objetos, em vez do comando ls. No entanto, como as métricas do Amazon CloudWatch são extraídas apenas uma vez por dia, os resultados do CloudWatch podem ser diferentes dos resultados do comando ls.
  2. Use os arquivos de texto que foram gerados pelos comandos ls anteriores para comparar objetos entre os buckets de origem e de destino. A saída é semelhante ao seguinte exemplo:
    2017-11-20 21:17:39      15362 s3logo.png
    
      Total Objects: 1        Total Size: 15362

Observação: Se você tiver aplicações ou cargas de trabalho que fazem chamadas de API para o bucket de origem, atualize essas chamadas de API para o bucket de destino. Se você grava dados com frequência, talvez precise executar comandos 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 um objeto para um bucket de diretórios

Como soluciono problemas de um comando de lista que não responde depois de realizar uma grande exclusão no Amazon S3?

Como faço para copiar objetos do Amazon S3 de outra conta da AWS?

AWS OFICIAL
AWS OFICIALAtualizada há 4 meses