Curso
AWS S3 cp: La guía completa de las transferencias de archivos de AWS S3
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:
- Navega a la página oficial de documentación de la CLI de AWS
- Coge el instalador de Windows de 64 bits
- Ejecuta el archivo descargado y sigue el asistente de instalación
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
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
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
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
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
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
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
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
Y, en la consola de administración de AWS, verás tu archivo cargado:
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
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
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
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
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
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
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)
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)
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
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
Inmediatamente después, se rellenará la carpeta backups
del cubo:
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) os3: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
, 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.
Aprende más sobre AWS con estos cursos
Curso
Introduction to AWS Boto in Python
Curso
AWS Security and Cost Management Concepts
blog
AWS Certified Cloud Practitioner: guía completa

Srujana Maddula
13 min
blog
Los 13 mejores proyectos de AWS: De principiante a profesional
blog
AWS vs Azure: Una comparación en profundidad de los dos principales servicios en la nube
Tutorial
Primeros pasos con AWS Athena: Guía práctica para principiantes

Tim Lu
15 min
Tutorial
Cuentas de almacenamiento Azure: Tutorial paso a paso para principiantes

Anneleen Rummens
11 min
Tutorial