New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Como copio todos os objetos de um bucket do Amazon S3 para outro bucket?
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:
- Execute o comando sync na AWS Command Line Interface (AWS CLI)
- Use as operações em lote do S3 para buckets que contêm muitos objetos
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:
- Ajuste a AWS CLI para usar uma maior simultaneidade
- Divida o processo em vários comandos de sincronização com base nos prefixos do nome do objeto
- Organize sua arquitetura de bucket do S3 de acordo com as práticas recomendadas
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:
-
Se você arquivou objetos do S3 na classe de armazenamento do Amazon Simple Storage Service Glacier, restaure os objetos.
-
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.
-
(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:
- 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
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.aws s3 ls --recursive s3://example_target_bucket --summarize > bucket-contents-target.txt
- 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 faço para copiar objetos do Amazon S3 de outra conta da AWS?
Vídeos relacionados


Conteúdo relevante
- feita há um mêslg...
- Resposta aceitafeita há um mêslg...
- feita há um mêslg...
- feita há um mêslg...
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano