Saltar al contenido principal

AWS S3 cp: La guía completa de las transferencias de archivos de AWS S3

Aprende a copiar archivos hacia y desde S3 utilizando el comando aws s3 cp. Explóralo todo, desde transferencias básicas y copias recursivas hasta scripts de automatización y solución de errores comunes, todo con ejemplos prácticos y reales.
Actualizado 19 mar 2025  · 15 min de lectura

Copiar archivos al almacenamiento de AWS manualmente puede ser tedioso, propenso a errores e ineficaz, especialmente cuando se trata de grandes cantidades de datos. No quieres eso.

La interfaz de línea de comandos (CLI) de AWS proporciona una práctica herramienta llamada aws s3 cp que simplifica este proceso. Este comando te permite copiar archivos a y desde los buckets de Amazon S3 con comandos sencillos y programables que funcionan en todos los sistemas operativos. Utilizar la CLI de AWS no sólo ahorra tiempo, sino que también permite automatizar las tareas rutinarias de transferencia de archivos.

El comando aws s3 cp ofrece muchas opciones para manejar escenarios complejos de transferencia de archivos. Puedes copiar archivos individuales, transferir recursivamente directorios enteros, filtrar archivos basándote en patrones e incluso especificar diferentes clases de almacenamiento para optimizar costes.

En este tutorial, te guiaré a través de todo lo que necesitas saber para utilizar aws s3 cp con eficacia, desde los comandos básicos hasta las técnicas avanzadas y las estrategias de automatización.

> ¿Eres nuevo en AWS y no estás seguro sobre el almacenamiento en la nube y S3? Nuestra detallada guíaed sobre S3 y EFS es el lugar perfecto para empezar. Si estás interesado específicamente en S3, consulta nuestra guía en profundidad sobre S3.

¿Qué es AWS S3 cp?

El comando aws s3 cp es una utilidad de la interfaz de línea de comandos de AWS que te permite copiar archivos entre tu sistema local y el almacenamiento de Amazon S3. 

Esencialmente, está diseñado para proporcionar una experiencia familiar, de línea de comandos, similar al comando estándar de Linux cp, pero adaptado para interactuar con los buckets de S3.

En esencia, aws s3 cp conecta tu máquina local y la infraestructura de almacenamiento en la nube de AWS. Cuando ejecutas un comando aws s3 cp, la CLI de AWS gestionala autenticación y la fragmentación de archivos para transferencias grandes, y garantiza la integridad de los datos durante el proceso de copia. Esta utilidad permite copiar archivos individuales, varios archivos utilizando comodines y estructuras de directorios enteras mediante operaciones recursivas.

El aws s3 cp es capaz de muchas cosas, sólo enumeraré un par:

  • Transferencias bidireccionales (subir a S3 o descargar de S3).
  • Copia recursiva de estructuras de directorios completas.
  • Compatibilidad con varias clases de almacenamiento S3 (Estándar, Intelligent-Tiering, Glacier, etc.).
  • Filtrado de archivos mediante patrones de inclusión/exclusión.
  • Conservación de los metadatos de los archivos durante las transferencias.
  • Integración con AWS Identity and Access Management (IAM) para la seguridad.

Sin embargo, el poder de aws s3 cp reside en su flexibilidad e integración con el ecosistema de AWS. Puedes especificar distintos parámetros para controlar aspectos como la clase de almacenamiento, el cifrado, los metadatos, el control de acceso, etc. Esto lo hace adecuado para todo, desde simples transferencias puntuales de archivos hasta complejas soluciones automatizadas de copia de seguridad.

El comando es diferente de utilizar la consola de administración de AWS, que requiere navegación manual y hacer clic. El comando aws s3 cp puede ejecutarse directamente desde tu terminal o incorporarse a guiones y flujos de trabajo automatizados. Este acceso programático a S3 es esencial para muchos profesionales de la tecnología, especialmente ingenieros DevOps y científicos de datos.

En conclusión, aws s3 cp proporciona una solución fiable y programable que puede gestionar transferencias masivas manteniendo el rendimiento. Puede reanudar cargas y descargas interrumpidas, lo que la hace especialmente útil cuando se trata de conexiones de red inestables o de transferir archivos extremadamente grandes.

A continuación, te guiaré por lo más aburrido: configurar la CLI de AWS en tu sistema.

Configurar la CLI de AWS y AWS S3

Antes de sumergirte en el comando aws s3 cp, necesitas tener la CLI de AWS instalada y correctamente configurada en tu sistema. No te preocupes si nunca has trabajado con AWS: el proceso de configuración es sencillo y debería llevarte menos de 10 minutos.

Lo dividiré en tres sencillas fases: instalar la herramienta CLI de AWS, configurar tus credenciales y crear tu primer bucket de S3 para almacenamiento.

Instalar la CLI de AWS

El proceso de instalación difiere ligeramente según el sistema operativo que utilices.

Para sistemas Windows:

Para sistemas Linux:

Ejecuta los tres comandos siguientes a través del Terminal:

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

Para sistemas macOS:

Suponiendo que tengas Homebrew instalado, ejecuta esta única línea desde el Terminal:

brew install awscli

Si no tienes Homebrew, utiliza estos dos comandos en su lugar:

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /

Para confirmar que la instalación se ha realizado correctamente, ejecuta aws --version en tu terminal. Deberías ver algo así:

Imagen 1 - Versión CLI de AWS

Imagen 1 - Versión CLI de AWS

Configurar la CLI de AWS

Con la CLI instalada, es hora de configurar tus credenciales de AWS para la autenticación.

En primer lugar, accede a tu cuenta de AWS y navega hasta el panel de control del servicio IAM. Crea un nuevo usuario con acceso programático y adjunta la política de permisos S3 adecuada:

Imagen 2 - Usuario IAM de AWS

Imagen 2 - Usuario IAM de AWS

A continuación, visita la pestaña "Credenciales de seguridad" y genera un nuevo par de claves de acceso. Asegúrate de guardar tanto el ID de la clave de acceso como la clave de acceso secreta en algún lugar seguro: Amazon no volverá a mostrarte la clave secreta después de esta pantalla:

Imagen 3 - Credenciales de usuario de AWS IAM

Imagen 3 - Credenciales de usuario de AWS IAM

Ahora abre tu terminal y ejecuta el comando aws configure. Se te pedirán cuatro datos: el ID de tu clave de acceso, la clave de acceso secreta, la región por defecto (yo utilizo eu-central-1) y el formato de salida preferido (normalmente json):

Imagen 4 - Configuración de la CLI de AWS

Imagen 4 - Configuración de la CLI de AWS

Para asegurarte de que todo está conectado correctamente, verifica tu identidad con el siguiente comando:

aws sts get-caller-identity

Si la configuración es correcta, verás los datos de tu cuenta:

Imagen 5 - Comando de conexión de prueba de la CLI de AWS

Imagen 5 - Comando de conexión de prueba de la CLI de AWS

Crear un bucket S3

Por último, necesitas crear un bucket S3 para almacenar los archivos que vas a copiar.

Dirígete a la sección del servicio S3 en tu consola de AWS y haz clic en "Crear cubo". Recuerda que los nombres de los cubos deben ser globalmente únicos en todo AWS. Elige un nombre distintivo, deja por ahora la configuración por defecto y haz clic en "Crear":

Imagen 6 - Creación del cubo de AWS

Imagen 6 - Creación del cubo de AWS

Una vez creado, tu nuevo cubo aparecerá en la consola. También puedes confirmar su existencia a través de la línea de comandos:

aws s3 ls

Imagen 7 - Todos los buckets S3 disponibles

Imagen 7 - Todos los buckets S3 disponibles

Todos los buckets de S3 están configurados como privados por defecto, así que tenlo en cuenta. Si pretendes utilizar este cubo para archivos de acceso público, tendrás que modificar las políticas del cubo en consecuencia.

Ahora estás totalmente equipado para empezar a utilizar el comando aws s3 cp para transferir archivos. Empecemos por lo básico.

Sintaxis básica del comando cp de AWS S3

Ahora que ya lo tienes todo configurado, vamos a sumergirnos en el uso básico del comando aws s3 cp. Como es habitual en AWS, la belleza reside en la simplicidad, aunque el comando puede manejar diferentes escenarios de transferencia de archivos.

En su forma más básica, el comando aws s3 cp sigue esta sintaxis:

aws s3 cp <source> <destination> [options]

Donde y pueden ser rutas de archivos locales o URIs de S3 (que empiezan por s3://). Exploremos los tres casos de uso más comunes.

Copiar un archivo de local a S3

Para copiar un archivo de tu sistema local a un cubo de S3, el origen será una ruta local y el destino será un URI de S3:

aws s3 cp /Users/dradecic/Desktop/test_file.txt s3://testbucket-aws-cp-dradecic/test_file.txt

Este comando sube el archivo test_file.txt desde el directorio proporcionado al bucket S3 especificado. Si la operación tiene éxito, verás una salida de consola como ésta:

Imagen 8 - Salida de la consola tras copiar el archivo local

Imagen 8 - Salida de la consola tras copiar el archivo local

Y, en la consola de administración de AWS, verás tu archivo cargado:

Imagen 9 - Contenido del cubo S3

Imagen 9 - Contenido del cubo S3

Del mismo modo, si quieres copiar una carpeta local en tu cubo de S3 y colocarla, digamos, en otra carpeta anidada, ejecuta un comando similar a éste:

aws s3 cp /Users/dradecic/Desktop/test_folder s3://testbucket-aws-cp-dradecic/my-desired-folder/test_folder/ --recursive

Imagen 10 - Contenido del cubo S3 tras subir una carpeta

Imagen 10 - Contenido del cubo S3 tras subir una carpeta

La bandera --recursive se asegurará de que se copien todos los archivos y subcarpetas dentro de la carpeta.

Ten en cuenta que, en realidad, S3 no tiene carpetas: la estructura de rutas sólo forma parte de la clave del objeto, pero conceptualmente funciona como las carpetas.

Copiar un archivo de S3 a local

Para copiar un archivo de S3 a tu sistema local, simplemente invierte el orden: el origen pasa a ser el URI de S3, y el destino es tu ruta local:

aws s3 cp s3://testbucket-aws-cp-dradecic/test_file.txt /Users/dradecic/Documents/s3-data/downloaded_test_file.txt

Este comando descarga test_file.txt de tu cubo S3 y lo guarda como downloaded_test_file.txt en el directorio proporcionado. Lo verás inmediatamente en tu sistema local:

Imagen 11 - Descarga de un único archivo desde S3

Imagen 11 - Descarga de un único archivo desde S3

Si omites el nombre del archivo de destino, el comando utilizará el nombre del archivo original:

aws s3 cp s3://testbucket-aws-cp-dradecic/test_file.txt .

Imagen 12 - Contenido del archivo descargado

Imagen 12 - Contenido del archivo descargado

El punto (.) representa tu directorio actual, así que esto descargará test_file.txt a tu ubicación actual.

Y por último, para descargar un directorio entero, puedes utilizar un comando similar a éste:

aws s3 cp s3://testbucket-aws-cp-dradecic/my-desired-folder/test_folder /Users/dradecic/Documents/test_folder --recursive

Imagen 13 - Contenido de la carpeta descargada

Imagen 13 - Contenido de la carpeta descargada

Ten en cuenta que la bandera --recursive es esencial cuando se trabaja con varios archivos: sin ella, el comando fallará si el origen es un directorio.

Con estos comandos básicos, ya puedes realizar la mayoría de las tareas de transferencia de archivos que necesitarás. Pero en la siguiente sección, aprenderás opciones más avanzadas que te darán un mejor control sobre el proceso de copia.

Opciones y características avanzadas de AWS S3 cp

AWS ofrece un par de opciones avanzadas que te permiten maximizar las operaciones de copia de archivos. En esta sección, te mostraré algunas de las banderas y parámetros más útiles que te ayudarán en tus tareas cotidianas.

Utilizar los indicadores --exclude e --include

A veces sólo quieres copiar determinados archivos que coinciden con patrones específicos. Las banderas --exclude y --include te permiten filtrar archivos basándote en patrones, y te dan un control preciso sobre lo que se copia.

Sólo para preparar el escenario, ésta es la estructura de directorios con la que estoy trabajando:

Imagen 14 - Estructura del directorio

Imagen 14 - Estructura del directorio

Supongamos que quieres copiar todos los archivos del directorio excepto los de .log:

aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exclude "*.log"

Este comando copiará todos los archivos del directorio advanced_folder a S3, excluyendo cualquier archivo con la extensión .log:

Imagen 15 - Resultados de la copia de carpetas

Imagen 15 - Resultados de la copia de carpetas

También puedes combinar varios patrones. Supongamos que quieres copiar sólo los archivos HTML y CSS de la carpeta del proyecto:

aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exclude "*" --include "*.html" --include "*.css"

Este comando excluye primero todo (--exclude "*"), y luego incluye sólo los archivos con extensiones .html y .css. El resultado es el siguiente:

Imagen 16 - Resultados de la copia de carpetas (2)

Imagen 16 - Resultados de la copia de carpetas (2)

Ten en cuenta que el orden de los indicadores es importante: la CLI de AWS procesa estos indicadores secuencialmente, de modo que si pones --include antes que --exclude, obtendrás resultados diferentes:

aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --include "*.html" --include "*.css" --exclude "*"

Esta vez, no se copió nada en el cubo:

Imagen 17 - Resultados de la copia de carpetas (3)

Imagen 17 - Resultados de la copia de carpetas (3)

Especificación de la clase de almacenamiento S3

Amazon S3 ofrece diferentes clases de almacenamiento, cada una con diferentes costes y características de recuperación. Por defecto, aws s3 cp sube los archivos a la clase de almacenamiento Estándar, pero puedes especificar una clase diferente utilizando la bandera --storage-class:

aws s3 cp /Users/dradecic/Desktop/large-archive.zip s3://testbucket-aws-cp-dradecic/archives/ --storage-class GLACIER

Este comando sube large-archive.zip a la clase de almacenamiento Glacier, que es significativamente más barata pero tiene costes de recuperación más altos y tiempos de recuperación más largos:

Imagen 18 - Copiar archivos a S3 con diferentes clases de almacenamiento

Imagen 18 - Copiar archivos a S3 con diferentes clases de almacenamiento

Las clases de almacenamiento disponibles son

  • STANDARD (por defecto): Almacenamiento de uso general con gran durabilidad y disponibilidad.
  • REDUCED_REDUNDANCY (ya no se recomienda): Opción de menor durabilidad y ahorro de costes, ahora obsoleta.
  • STANDARD_IA (Acceso poco frecuente): Almacenamiento más barato para datos a los que se accede con menos frecuencia.
  • ONEZONE_IA (Zona única de acceso infrecuente): Almacenamiento de bajo coste y acceso poco frecuente en una única zona de disponibilidad de AWS.
  • INTELLIGENT_TIERING: Mueve automáticamente los datos entre los niveles de almacenamiento en función de los patrones de acceso.
  • GLACIER: Almacenamiento de archivos de bajo coste para conservación a largo plazo, recuperación en cuestión de minutos u horas.
  • DEEP_ARCHIVE: Almacenamiento de archivos más barato, recuperación en cuestión de horas, ideal para copias de seguridad a largo plazo.

Si haces copias de seguridad de archivos a los que no necesitas acceder inmediatamente, utilizar GLACIER o DEEP_ARCHIVE puede ahorrarte importantes costes de almacenamiento.

Sincronizar archivos con la opción --exact-timestamps

Cuando actualices en S3 archivos que ya existen, puede que sólo quieras copiar los archivos que hayan cambiado. La bandera --exact-timestamps ayuda a ello comparando las marcas de tiempo entre el origen y el destino.

He aquí un ejemplo:

aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exact-timestamps

Con esta bandera, el comando sólo copiará los archivos si sus marcas de tiempo difieren de los archivos que ya están en S3. Esto puede reducir el tiempo de transferencia y el uso de ancho de banda cuando actualizas regularmente un gran conjunto de archivos.

Entonces, ¿por qué es útil? Imagina escenarios de despliegue en los que quieras actualizar los archivos de tu aplicación sin transferir innecesariamente activos sin modificar.

Aunque --exact-timestamps es útil para realizar algún tipo de sincronización, si necesitas una solución más sofisticada, considera utilizar aws s3 sync en lugar de aws s3 cp. El comando sync se diseñó específicamente para mantener los directorios sincronizados y tiene capacidades adicionales para este fin. Escribí todo sobre el comando sync en el tutorial AWS S3 Sync.

Con estas opciones avanzadas, ahora tienes un control mucho más preciso sobre tus operaciones con archivos S3. Puedes dirigirte a archivos específicos, optimizar los costes de almacenamiento y actualizar tus archivos de forma eficaz. En la siguiente sección, aprenderás a automatizar estas operaciones utilizando guiones y tareas programadas.

Automatizar las transferencias de archivos con AWS S3 cp

Hasta ahora, has aprendido a copiar manualmente archivos a y desde S3 utilizando la línea de comandos. Una de las mayores ventajas de utilizar aws s3 cp es que puedes automatizar fácilmente estas transferencias, lo que te ahorrará mucho tiempo.

Exploremos cómo puedes integrar el comando aws s3 cp en guiones y trabajos programados para transferir archivos sin intervención.

Uso de AWS S3 cp en scripts

Aquí tienes un sencillo ejemplo de script bash que realiza una copia de seguridad de un directorio en S3, añade una marca de tiempo a la copia de seguridad e implementa la gestión de errores y el registro en un archivo:

#!/bin/bash

# Set variables
SOURCE_DIR="/Users/dradecic/Desktop/advanced_folder"
BUCKET="s3://testbucket-aws-cp-dradecic/backups"
DATE=$(date +%Y-%m-%d-%H-%M)
BACKUP_NAME="backup-$DATE"
LOG_FILE="/Users/dradecic/logs/s3-backup-$DATE.log"

# Ensure the logs directory exists
mkdir -p "$(dirname "$LOG_FILE")"

# Create the backup and log the output
echo "Starting backup of $SOURCE_DIR to $BUCKET/$BACKUP_NAME" | tee -a $LOG_FILE
aws s3 cp $SOURCE_DIR $BUCKET/$BACKUP_NAME --recursive 2>&1 | tee -a $LOG_FILE

# Check if the backup was successful
if [ $? -eq 0 ]; then
    echo "Backup completed successfully on $DATE" | tee -a $LOG_FILE
else
    echo "Backup failed on $DATE" | tee -a $LOG_FILE
fi

Guárdalo como backup.sh, hazlo ejecutable con chmod +x backup.sh, ¡y ya tienes un script de copia de seguridad reutilizable!

A continuación, puedes ejecutarlo con el siguiente comando:

./backup.sh

Imagen 19 - Script ejecutándose en el terminal

Imagen 19 - Script ejecutándose en el terminal

Inmediatamente después, se rellenará la carpeta backups del cubo:

Imagen 20 - Copia de seguridad almacenada en un bucket S3

Imagen 20 - Copia de seguridad almacenada en un bucket S3

Llevemos esto al siguiente nivel ejecutando el script en un horario.

Programar transferencias de archivos con cron jobs

Ahora que tienes un script, el siguiente paso es programarlo para que se ejecute automáticamente a horas concretas.

Si usas Linux o macOS, puedes utilizar cron para programar tus copias de seguridad. A continuación te explicamos cómo configurar una tarea cron para que ejecute tu script de copia de seguridad todos los días a medianoche:

1. Abre tu crontab para editarlo:

crontab -e

2. Añade la siguiente línea para ejecutar tu script diariamente a medianoche:

0 0 * * * /path/to/your/backup.sh

Imagen 21 - Cron job para ejecutar el script diariamente

El formato de las tareas cron es minute hour day-of-month month day-of-week command. Aquí tienes algunos ejemplos más:

  • Corre cada hora: 0 * * * * /path/to/your/backup.sh
  • Corre todos los lunes a las 9 de la mañana: 0 9 * * 1 /path/to/your/backup.sh
  • Se ejecuta el día 1 de cada mes: 0 0 1 * * /path/to/your/backup.sh

Y ya está. El script backup.sh se ejecutará ahora en el intervalo programado.

Automatizar tus transferencias de archivos S3 es una forma de hacerlo. Es especialmente útil para situaciones como

  • Copias de seguridad diarias de los datos importantes
  • Sincronizar imágenes de productos con un sitio web
  • Mover archivos de registro a almacenamiento a largo plazo
  • Desplegar archivos actualizados del sitio web

Técnicas de automatización como éstas te ayudarán a establecer un sistema fiable que gestione las transferencias de archivos sin intervención manual. Sólo tienes que escribirlo una vez, y luego puedes olvidarte de él.

En la siguiente sección, trataré algunas buenas prácticas para que tus operaciones en aws s3 cp sean más seguras y eficaces.

Buenas prácticas para utilizar AWS S3 cp

Aunque el comando aws s3 cp es fácil de utilizar, las cosas pueden salir mal.

Si sigues las mejores prácticas, evitarás los errores más comunes, optimizarás el rendimiento y mantendrás tus datos seguros. Exploremos estas prácticas para que tus operaciones de transferencia de archivos sean más eficaces.

Gestión eficaz de archivos

Cuando trabajes con S3, organizar tus archivos de forma lógica te ahorrará tiempo y dolores de cabeza en el futuro.

En primer lugar, establece una convención coherente de nomenclatura de cubos y prefijos. Por ejemplo, puedes separar tus datos por entorno, aplicación o fecha:

s3://company-backups/production/database/2023-03-13/
s3://company-backups/staging/uploads/2023-03/

Este tipo de organización facilita las cosas:

  • Encuentra archivos concretos cuando los necesites.
  • Aplica políticas y permisos de cubo al nivel adecuado.
  • Establece reglas de ciclo de vida para archivar o eliminar datos antiguos.

Otro consejo: Cuando transfieras grandes conjuntos de archivos, considera agrupar primero los archivos pequeños (utilizando zip o tar) antes de subirlos. Esto reduce el número de llamadas API a S3, lo que puede reducir los costes y acelerar las transferencias.

# Instead of copying thousands of small log files
# tar them first, then upload
tar -czf example-logs-2025-03.tar.gz /var/log/application/
aws s3 cp example-logs-2025-03.tar.gz s3://testbucket-aws-cp-dradecic/logs/2025/03/

Gestión de grandes transferencias de datos

Cuando vayas a copiar archivos grandes o muchos archivos a la vez, existen algunas técnicas para que el proceso sea más fiable y eficaz.

Puedes utilizar la bandera --quiet para reducir la salida cuando se ejecuta en scripts:

aws s3 cp large-directory/ s3://testbucket-aws-cp-dradecic/backups/ --recursive --quiet

Esto suprime la información de progreso de cada archivo, lo que hace que los registros sean más manejables. También mejora ligeramente el rendimiento.

Para archivos muy grandes, considera utilizar subidas multiparte con la bandera --multipart-threshold:

aws s3 cp huge-file.iso s3://testbucket-aws-cp-dradecic/backups/ --multipart-threshold 100MB

La configuración anterior indica a la CLI de AWS que divida los archivos de más de 100 MB en varias partes para subirlos. Hacerlo tiene un par de ventajas:

  • Si se cae la conexión, sólo hay que reintentar la parte afectada.
  • Las piezas pueden cargarse en paralelo, aumentando potencialmente el rendimiento.
  • Puedes pausar y reanudar subidas grandes.

En transferir datos entre regionesconsidera la posibilidad de utilizar la Aceleración de Transferencia de S3 para cargas más rápidas:

aws s3 cp large-file.zip s3://testbucket-aws-cp-dradecic/backups/ --endpoint-url https://s3-accelerate.amazonaws.com

Lo anterior encamina tu transferencia a través de la red de borde de Amazon, lo que puede acelerar significativamente las transferencias entre regiones.

Garantizar la seguridad

La seguridad debe ser siempre una prioridad absoluta cuando trabajes con tus datos en la nube.

En primer lugar, asegúrate de que tus permisos IAM siguen el principio del menor privilegio. Concede sólo los permisos específicos necesarios para cada tarea.

Aquí tienes un ejemplo de política que puedes asignar al usuario:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::testbucket-aws-cp-dradecic/backups/*"
        }
    ]
}

Esta política sólo permite copiar archivos hacia y desde el prefijo "copias de seguridad" de "mi cubo".

Otra forma de aumentar la seguridad es activar la encriptación para los datos sensibles. Puedes especificar la encriptación del lado del servidor al cargar:

aws s3 cp confidential.docx s3://testbucket-aws-cp-dradecic/ --sse AES256

O, para mayor seguridad, utiliza el Servicio de administración de claves (KMS) de AWS:

aws s3 cp secret-data.json s3://testbucket-aws-cp-dradecic/ --sse aws:kms --sse-kms-key-id myKMSKeyId

Sin embargo, para operaciones altamente sensibles, considera el uso de puntos finales VPC para S3. Esto mantiene tu tráfico dentro de la red de AWS y evita por completo la Internet pública.

En la siguiente sección, aprenderás a solucionar los problemas más comunes que te puedes encontrar al trabajar con este comando.

Solución de errores de cp en AWS S3

Una cosa es cierta: de vez en cuando te encontrarás con problemas al trabajar con aws s3 cp. Pero, si conoces los errores más comunes y sus soluciones, ahorrarás tiempo y frustración cuando las cosas no salgan como habías planeado.

En esta sección, te mostraré los problemas más frecuentes y cómo solucionarlos.

Errores comunes y correcciones

Error: "Acceso denegado"

Este es probablemente el error más común que encontrarás:

upload failed: ./myfile.txt to s3://testbucket-aws-cp-dradecic/myfile.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

Esto suele significar una de estas tres cosas

  • Tu usuario IAM no tiene permisos suficientes para realizar la operación.
  • La política del cubo restringe el acceso.
  • Tus credenciales de AWS han caducado.

Para solucionar problemas:

  • Comprueba tus permisos IAM para asegurarte de que tienes los permisos necesarios s3:PutObject (para subidas) o s3:GetObject (para descargas).
  • Comprueba que la política de cubos no restringe tus acciones.
  • Ejecuta aws configure para actualizar tus credenciales si han caducado.

Error: "No existe tal archivo o directorio"

Este error se produce cuando el archivo o directorio local que intentas copiar no existe:

upload failed: ./missing-file.txt to s3://testbucket-aws-cp-dradecic/missing-file.txt An error occurred (404) when calling the PutObject operation: Not Found

La solución es sencilla: comprueba cuidadosamente las rutas de tus archivos. Las rutas distinguen entre mayúsculas y minúsculas, así que tenlo en cuenta. Además, asegúrate de que estás en el directorio correcto cuando utilices rutas relativas.

Error: "El cubo especificado no existe"

Si aparece este error:

upload failed: ./myfile.txt to s3://testbucket-aws-cp-dradecic/myfile.txt An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist

Compruébalo:

  • Errores tipográficos en el nombre de tu cubo.
  • Si estás utilizando la región AWS correcta.
  • Si el cubo existe realmente (puede que se haya borrado).

Puedes listar todos tus cubos con aws s3 ls para confirmar el nombre correcto.

Error: "Conexión interrumpida"

Los problemas de red pueden provocar tiempos de espera en la conexión:

upload failed: ./largefile.zip to s3://testbucket-aws-cp-dradecic/largefile.zip An error occurred (RequestTimeout) when calling the PutObject operation: Request timeout

Para resolverlo:

  • Comprueba tu conexión a Internet.
  • Prueba a utilizar archivos más pequeños o a activar la subida multiparte para los archivos grandes.
  • Considera la posibilidad de utilizar la Aceleración de Transferencia de AWS para mejorar el rendimiento.

Tratamiento de los fallos de carga

Es mucho más probable que se produzcan errores al transferir archivos grandes. Cuando sea así, intenta gestionar los fallos con elegancia.

Por ejemplo, puedes utilizar la bandera --only-show-errors para facilitar el diagnóstico de errores en los guiones:

aws s3 cp large-directory/ s3://testbucket-aws-cp-dradecic/ --recursive --only-show-errors

Esto suprime los mensajes de transferencia correcta, mostrando sólo los errores, lo que facilita mucho la resolución de problemas en transferencias grandes.

Para gestionar las transferencias interrumpidas, el comando --recursive omitirá automáticamente los archivos que ya existan en el destino con el mismo tamaño. Sin embargo, para ser más minucioso, puedes utilizar los reintentos integrados de la CLI de AWS para los problemas de red configurando estas variables de entorno:

export AWS_RETRY_MODE=standard
export AWS_MAX_ATTEMPTS=5
aws s3 cp large-file.zip s3://testbucket-aws-cp-dradecic/

Esto indica a la CLI de AWS que reintente automáticamente las operaciones fallidas hasta 5 veces.

Pero para conjuntos de datos muy grandes, considera la posibilidad de utilizar aws s3 sync en lugar de cp, ya que está diseñado para gestionar mejor las interrupciones:

aws s3 sync large-directory/ s3://testbucket-aws-cp-dradecic/large-directory/

El comando sync sólo transferirá archivos diferentes de los que ya están en el destino, lo que lo hace perfecto para reanudar transferencias grandes interrumpidas.

Si comprendes estos errores comunes e implementas un manejo adecuado de los errores en tus scripts, conseguirás que tus operaciones de copia en S3 sean mucho más sólidas y fiables.

Resumiendo AWS S3 cp

Para concluir, el comando aws s3 cp es una ventanilla única para copiar archivos locales a S3 y viceversa.

Lo has aprendido todo en este artículo. Empezaste por los fundamentos y la configuración del entorno, y acabaste escribiendo scripts programados y automatizados para copiar archivos. También has aprendido a afrontar algunos errores y dificultades habituales al mover archivos, especialmente los de gran tamaño.

Así que, si eres desarrollador, profesional de los datos o administrador de sistemas, creo que este comando te resultará útil. La mejor manera de sentirte cómodo con ella es utilizarla con regularidad. Asegúrate de que entiendes los fundamentos, y luego dedica algo de tiempo a automatizar las partes tediosas de tu trabajo.

Para saber más sobre AWS, sigue estos cursos de DataCamp:

Incluso puedes utilizar DataCamp para preparar los exámenes de certificación de AWS: AWS Cloud Practitioner (CLF-C02).

Preguntas frecuentes

¿Qué es el comando aws s3 cp y para qué puede utilizarse?

El comando aws s3 cp es una utilidad de la interfaz de línea de comandos de AWS que te permite copiar archivos entre tu sistema local y el almacenamiento de Amazon S3. Está diseñado para proporcionar una experiencia familiar de línea de comandos similar al comando cp estándar de Linux, pero adaptado para interactuar con los buckets de S3. Puedes utilizarlo para transferencias bidireccionales, copia recursiva de estructuras de directorios enteras, filtrado de archivos basado en patrones, e incluso especificar diferentes clases de almacenamiento para optimizar costes. Es especialmente útil para ingenieros DevOps, científicos de datos y administradores de sistemas que necesitan gestionar datos en buckets S3 de forma eficiente.

¿Cómo configuro la CLI de AWS para que utilice el comando aws s3 cp?

Configurar la CLI de AWS para utilizar el comando aws s3 cp implica instalar la CLI de AWS en tu sistema, configurarla con tus credenciales de AWS y crear un bucket S3. El proceso de instalación varía ligeramente en función de tu sistema operativo (Windows, Linux o macOS). Tras la instalación, tendrás que ejecutar el comando aws configure y proporcionar tu ID de clave de acceso, clave de acceso secreta, región por defecto y formato de salida preferido. Por último, tendrás que crear un bucket de S3 a través de la consola de administración de AWS o utilizando directamente la CLI de AWS.

¿Cuál es la sintaxis básica y los casos de uso habituales de aws s3 cp?

La sintaxis básica de aws s3 cp es aws s3 cp [options], donde origen y destino pueden ser rutas de archivos locales o URI de S3 (empezando por s3://). Los casos de uso más comunes incluyen subir un archivo de tu sistema local a S3, descargar un archivo de S3 a tu sistema local y copiar directorios enteros de forma recursiva utilizando la bandera --recursive. También puedes utilizar el comando para copiar archivos entre distintos buckets de S3, especificar distintos nombres para los archivos de destino y organizar archivos en estructuras de "carpetas" anidadas dentro de tus buckets.

¿Cómo puedo utilizar los indicadores --exclude e --include para filtrar archivos específicos?

Las banderas --exclude y --include te permiten filtrar archivos basándote en patrones cuando utilizas aws s3 cp, dándote un control preciso sobre lo que se copia. Por ejemplo, puedes copiar todos los archivos de un directorio excepto los que tengan extensiones específicas (como --exclude "*.log"), o puedes dirigirte sólo a tipos de archivo concretos (como --include "*.html" --include "*.css" después de excluir primero todo lo que tenga --exclude "*"). El orden de estos indicadores es muy importante, ya que la CLI de AWS los procesa secuencialmente. Esto permite crear sofisticadas reglas de filtrado para escenarios complejos de transferencia de archivos.

¿Cuál es la diferencia entre aws s3 cp with --exact-timestamps y aws s3 sync?

Aunque ambos comandos pueden utilizarse para actualizar archivos en S3, tienen propósitos y comportamientos diferentes. El comando aws s3 cp con la bandera --exact-timestamps sólo copiará archivos si sus marcas de tiempo difieren de lo que ya está en S3, lo que puede reducir el tiempo de transferencia y el uso de ancho de banda al actualizar archivos. Sin embargo, aws s3 sync se diseñó específicamente para mantener los directorios sincronizados y ofrece capacidades de sincronización más sofisticadas. Si necesitas actualizar regularmente grandes conjuntos de archivos y sólo quieres transferir lo que ha cambiado, aws s3 sync suele ser la mejor opción, aunque aws s3 cp con --exact-timestamps puede funcionar para necesidades de sincronización más sencillas.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Científico de Datos Senior con base en Croacia. Top Tech Writer con más de 700 artículos publicados, generando más de 10M de visitas. Autor del libro Automatización del aprendizaje automático con TPOT.
Temas

Aprende más sobre AWS con estos cursos

Curso

AWS Concepts

2 hr
22.9K
Discover the world of Amazon Web Services (AWS) and understand why it's at the forefront of cloud computing.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

AWS Certified Cloud Practitioner: guía completa

Comprende la certificación y el examen AWS Certified Cloud Practitioner con nuestra guía completa. Descubre consejos, recursos y estrategias para garantizar tu éxito.
Srujana Maddula's photo

Srujana Maddula

13 min

blog

Los 13 mejores proyectos de AWS: De principiante a profesional

Explora 13 proyectos prácticos de AWS para todos los niveles. Mejora tus conocimientos sobre la nube con aplicaciones prácticas del mundo real y la orientación de expertos.
Joleen Bothma's photo

Joleen Bothma

12 min

blog

AWS vs Azure: Una comparación en profundidad de los dos principales servicios en la nube

Explora las principales diferencias y similitudes entre Amazon Web Services (AWS) y Microsoft Azure. Este exhaustivo análisis abarca el rendimiento, los precios, las ofertas de servicios y la facilidad de uso para ayudar a los aspirantes a profesionales a determinar qué computación en nube se adapta mejor a sus necesidades.
Kurtis Pykes 's photo

Kurtis Pykes

12 min

Tutorial

Primeros pasos con AWS Athena: Guía práctica para principiantes

Esta guía práctica te ayudará a empezar a utilizar AWS Athena. Explora su arquitectura y características y aprende a consultar datos en Amazon S3 utilizando SQL.
Tim Lu's photo

Tim Lu

15 min

Tutorial

Cuentas de almacenamiento Azure: Tutorial paso a paso para principiantes

Esta guía te enseña a configurar y gestionar las Cuentas de Almacenamiento de Azure, paso a paso. También explora opciones avanzadas de configuración para un rendimiento óptimo y una optimización de costes.
Anneleen Rummens's photo

Anneleen Rummens

11 min

Tutorial

Cómo escribir un Bash Script: Un sencillo tutorial de Bash Scripting

Descubre los fundamentos de las secuencias de comandos bash y aprende a escribir una secuencia de comandos bash.
Kurtis Pykes 's photo

Kurtis Pykes

5 min

Ver másVer más