¿Cómo puedo copiar todos los objetos de un bucket de Amazon S3 a otro?

7 minutos de lectura
0

Quiero copiar o mover todos mis objetos de un bucket de Amazon Simple Storage Service (Amazon S3) a otro. Quiero migrar objetos entre mis buckets de S3.

Breve descripción

Para copiar objetos de un bucket de S3 a otro, siga estos pasos:

1.    Cree un nuevo bucket de S3.

2.    Instale y configure la Interfaz de la línea de comandos de AWS (AWS CLI).

3.    Copie los objetos entre los buckets de S3.

Nota: El uso de los comandos aws s3 ls o aws s3 sync en buckets grandes (con 10 millones de objetos o más) puede resultar costoso y agotar el tiempo de espera. Si se agotan los tiempos de espera por el gran tamaño de un bucket, plantéese utilizar las métricas de Amazon CloudWatch para calcular el tamaño y la cantidad de objetos de un bucket. Además, plantéese utilizar operaciones por lotes de S3 para copiar los objetos.

4.    Compruebe si se han copiado los objetos.

5.    Actualice las llamadas a la API existentes con el nombre del bucket de destino.

Antes de empezar, tenga en cuenta lo siguiente:

Solución

Creación de un nuevo bucket de S3

1.    Abra la consola de Amazon S3.

2.    Elija Crear bucket.

3.    Elija un nombre que cumpla las convenciones del DNS para el nuevo bucket.

4.    Seleccione su región de AWS.

Consejo: Para evitar problemas de rendimiento debidos al tráfico entre regiones, cree el bucket de destino en la misma región que el bucket de origen.

5.    Opcionalmente, elija Copiar configuración de un bucket existente para reflejar la configuración del bucket de origen.

Instalación y configuración de la AWS CLI

1.    Instale la AWS CLI.

2.    Para configurar la AWS CLI, ejecute el siguiente comando:

aws configure

Nota: Si se muestran errores al ejecutar comandos de AWS CLI, compruebe si está utilizando la versión más reciente de AWS CLI.

3.    Introduzca sus claves de acceso (ID de clave de acceso y clave de acceso secreta).

4.    Pulse Intro para omitir la región predeterminada y las opciones de salida predeterminadas. Para obtener más información sobre los parámetros de la región de Amazon S3, consulte AWS service endpoints.

Nota: Las salidas de la AWS CLI son JSON, texto o tabla, pero no todos los comandos admiten todos los tipos de salida. Para obtener más información, consulte Control de la salida de comandos desde la AWS CLI.

Copia de objetos entre buckets de S3

1.    Si ha archivado objetos de S3 en la clase de almacenamiento Glacier de Amazon Simple Storage Service, restáurelos.

2.    Copie los objetos entre los buckets de origen y destino con el siguiente comando de sincronización mediante la AWS CLI:

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

Nota: Actualice el comando sync de modo que incluya los nombres de los buckets de origen y destino.

El comando sync usa las API CopyObject para copiar objetos entre buckets de S3. El comando sync muestra los buckets de origen y destino para identificar los objetos que se encuentran en el bucket de origen, pero que no en el de destino. El comando también identifica los objetos del bucket de origen que tienen fechas LastModified diferentes a las de los objetos en el bucket de destino. Cuando se usa el comando sync en un bucket versionado, solo se copia la versión actual del objeto; las versiones anteriores no se copian. De forma predeterminada, este comportamiento conserva los metadatos del objeto.

Si el bucket de origen tiene habilitadas las listas de control de acceso (ACL), las ACL no se copiarán en el bucket de destino. Esto es así independientemente de que las ACL estén habilitadas o no en el bucket de destino. Si tanto el bucket de origen como el de destino tienen las ACL habilitadas, las ACL del objeto de destino otorgarán FULL_CONTROL a la cuenta que realizó la copia. Si la operación falla, puede volver a ejecutar el comando sync sin duplicar los objetos copiados anteriormente. Para solucionar problemas con la operación de sincronización, consulte Why can't I copy an object between two Amazon S3 buckets?

3.    (Opcional) Si se agota el tiempo de espera, use el comando cloudwatch get-metric-statistics para calcular la cantidad de objetos en su 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) Si se agota el tiempo de espera, use el comando cloudwatch get-metric-statistics para obtener el tamaño del 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

Nota: Las llamadas a la lista pueden ser muy costosas y hacer que se agote el tiempo de espera del comando. En el caso de los buckets grandes, plantéese utilizar las métricas de Amazon CloudWatch para calcular el tamaño del bucket y el número total de objetos. Sin embargo, dado que las métricas de Amazon CloudWatch solo se obtienen una vez al día, el recuento de objetos y el tamaño del bucket notificados pueden diferir de los resultados del comando list.

Comprobación de si los objetos se han copiado

1.    Compruebe el contenido de los buckets de origen y destino con los siguientes comandos:

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

Nota: Actualice el comando list de modo que se incluyan los nombres de los buckets de origen y destino.

2.    Compare los objetos que se encuentran en los buckets de origen y destino mediante los resultados guardados en los archivos del directorio de la AWS CLI. Observe el siguiente ejemplo de salida:

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

  Total Objects: 1        Total Size: 15362

Actualización de las llamadas a la API existentes con el nombre del bucket de destino

Actualice las aplicaciones o cargas de trabajo existentes para que usen el nombre del bucket de destino. Es posible que tenga que ejecutar comandos sync para corregir las discrepancias entre los buckets de origen y destino si las escrituras son frecuentes.

Información relacionada

Precios de Amazon S3

Copiar el objeto en una carpeta

After performing a large deletion operation in Amazon S3, the list command is unresponsive. How do I troubleshoot this?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años