Objetivos de aprendizaje
Después de leer este artículo podrás:
- Entender qué es un objeto, una clave y un bucket
- Subir y descargar un archivo de un object storage con código
- Saber cuándo usar object storage y cuándo elegir un disco o una base de datos
En esta página
- ¿Qué son un objeto, una clave y un bucket?
- ¿Cómo funciona el object storage por dentro?
- ¿Cómo subir y descargar un objeto con código?
- ¿Para qué sirve el object storage?
- ¿Cuándo no usar almacenamiento de objetos?
- ¿Qué términos aparecen junto al object storage?
- Cómo hacerlo en Square Cloud
- Preguntas frecuentes
Toda aplicación termina necesitando guardar archivos: avatares, imágenes de productos, PDF, videos, exportaciones, logs. Dejar todo en el disco del servidor funciona al principio, pero el disco se llena, desaparece cuando el servidor se recrea y no se comparte entre varias instancias.
El almacenamiento de objetos (object storage) cambia el disco por un servicio remoto que guarda archivos y los entrega por HTTP. Es el modelo de Amazon S3 y de muchos servicios parecidos.
¿Qué son un objeto, una clave y un bucket?#
Casi todo gira en torno a tres conceptos:
- Objeto: el archivo más sus metadatos. Los metadatos son pares nombre-valor, como
Content-Type, fecha de modificación y campos personalizados que tú defines. - Clave: el nombre único del objeto dentro del bucket, por ejemplo
fotos/2026/gato.jpg. - Bucket: el contenedor de los objetos. Aquí defines reglas, como quién puede acceder.
Piensa en el object storage como un gran mapa: bucket + clave lleva a un objeto. Por debajo no existe una estructura de directorios. Cuando un panel muestra la carpeta fotos/, solo está agrupando las claves que empiezan con ese prefijo.
¿Cómo funciona el object storage por dentro?#
Hablas con él mediante una API HTTP. Las operaciones básicas son PUT (subir), GET (descargar), HEAD (leer solo los metadatos), DELETE (borrar) y LIST (listar claves por prefijo). No existen open, seek ni append.
Este modelo tiene consecuencias prácticas:
- Los objetos se reemplazan completos. Para cambiar un objeto, escribes uno nuevo en su lugar. La documentación de S3 lo describe como actualizaciones de objeto completo, a diferencia de un sistema de archivos, que acepta escritura parcial.
- Escala sin planificar capacidad. No eliges el tamaño de un volumen. El servicio reparte los datos entre muchos servidores y un bucket acepta cualquier cantidad de objetos.
- La durabilidad viene de la replicación. El servicio guarda copias de los datos en más de un lugar, así que el fallo de un disco no te hace perder el archivo.
- Consistencia. En S3, una lectura posterior a un
PUTexitoso devuelve el dato nuevo, y los listados también reflejan el cambio. Otros proveedores pueden tener reglas distintas, así que revisa su documentación. - Los archivos grandes se suben en partes. La subida multipart divide el archivo, envía las partes en paralelo y permite repetir solo la parte que falló. En S3 se recomienda a partir de 100 MB. Mira el paso a paso en cómo subir archivos grandes.
¿Cómo subir y descargar un objeto con código?#
La mayoría de los servicios sigue la API de S3, así que el mismo código funciona con varios proveedores. El ejemplo usa boto3, el SDK de AWS para Python (pip install boto3). El endpoint y las credenciales vienen de variables de entorno, nunca del código.
import os
import boto3
s3 = boto3.client(
"s3",
endpoint_url=os.environ["S3_ENDPOINT"],
aws_access_key_id=os.environ["S3_ACCESS_KEY"],
aws_secret_access_key=os.environ["S3_SECRET_KEY"],
)
bucket = os.environ["S3_BUCKET"]
with open("gato.jpg", "rb") as f: # la clave es solo texto, las "carpetas" son prefijo
s3.put_object(
Bucket=bucket,
Key="fotos/2026/gato.jpg",
Body=f,
ContentType="image/jpeg",
)
resp = s3.list_objects_v2(Bucket=bucket, Prefix="fotos/2026/")
for obj in resp.get("Contents", []):
print(obj["Key"], obj["Size"])
s3.download_file(bucket, "fotos/2026/gato.jpg", "copia.jpg")
s3.delete_object(Bucket=bucket, Key="fotos/2026/gato.jpg")Las versiones recientes de boto3 calculan checksums de integridad por defecto. Si un proveedor compatible con S3 rechaza la subida por eso, define AWS_REQUEST_CHECKSUM_CALCULATION=when_required y AWS_RESPONSE_CHECKSUM_VALIDATION=when_required en el entorno.
Para entregar un archivo privado a un usuario sin pasar por tu servidor, usa una URL prefirmada.
¿Para qué sirve el object storage?#
Es la elección natural para datos que se escriben una vez y se leen muchas:
- Contenido de usuarios: avatares, fotos, videos y adjuntos, normalmente servidos por una CDN.
- Archivos estáticos de sitios: imágenes, scripts y descargas.
- Copias de seguridad y exportaciones: dumps de bases de datos, informes, archivos comprimidos.
- Logs y datos para análisis: archivos grandes que se procesan por lotes.
- Artefactos de build: instaladores y paquetes que mucha gente descarga.
En la práctica, la aplicación guarda en la base de datos solo la clave del objeto (avatar_key) y arma la URL cuando la necesita. Eso mantiene la base liviana, como explica el artículo sobre imágenes en la base de datos o en object storage.
¿Cuándo no usar almacenamiento de objetos?#
El object storage no lo reemplaza todo:
- Archivos que cambian todo el tiempo. Un log al que haces append en cada línea, o un archivo editado por partes, se vuelve lento y caro porque cada cambio reescribe el objeto completo.
- Bases de datos y cargas con muchas escrituras pequeñas. El acceso por HTTP tiene más latencia que un disco local.
- Programas que esperan un sistema de archivos. Si el software necesita rutas, permisos POSIX y
fseek, usa un disco o un volumen de archivos. - Datos que consultas por contenido. Para buscar registros con un filtro, usa una base de datos. El object storage solo encuentra por clave o prefijo.
La comparación completa con discos de bloque y sistemas de archivos está en objetos, bloques y archivos.
¿Qué términos aparecen junto al object storage?#
- Compatible con S3: servicio que acepta la misma API de Amazon S3. Detalles en storage compatible con S3.
- Egress: tarifa que algunos proveedores cobran por los datos que salen del storage.
- Multipart upload: envío de un archivo grande en partes.
- Prefijo: el comienzo de una clave, usado para simular carpetas.
- Metadatos: pares nombre-valor guardados con el objeto, como el tipo de contenido y la caché.
- Versionado: función de algunos servicios que conserva versiones anteriores de un objeto.
Cómo hacerlo en Square Cloud#
En Square Cloud, el disco de una aplicación persiste entre reinicios y deploys, pero es solo suyo: dos aplicaciones en el mismo load balancing no ven los archivos de la otra. Los avatares, PDF y videos que cualquier instancia necesita leer van a Blob Storage, el object storage de la plataforma, con API compatible con S3 (aws-cli, rclone, boto3 y los SDK de AWS), API REST y panel.
El código anterior funciona con tres cambios: el endpoint https://s3-blob.squarecloud.app con la región auto, las claves S3 que generas en la pestaña "Acceso S3" del panel y uno de los buckets fijos de la cuenta, public o private (el tercero, legacy, es de solo lectura). No se crean buckets con nombre: las carpetas son prefijos de clave, como viste arriba.
Cada objeto puede pesar hasta 10 GB, y la subida multipart solo es obligatoria por encima de 100 MB. Los archivos públicos se sirven desde una CDN global en el edge. Los privados se abren con una URL prefirmada (hasta 7 días), un enlace temporal del panel (hasta 24 horas) o un enlace para compartir revocable (hasta 30 días). Las reglas por carpeta definen visibilidad, expiración, tamaño máximo y extensiones permitidas.
No hay tarifa de salida ni de entrada, y la cuota incluida va de 5 GB a 250 GB según el plan. Genera las claves en el panel, apunta S3_ENDPOINT al Blob y sube tu primer archivo. Conoce Blob Storage o compara las cuotas en Precios.
Blob Storage
Object storage compatible con S3, sin tarifas de salida
Preguntas frecuentes
¿Object storage es lo mismo que S3?
No. Amazon S3 es el servicio de object storage más conocido, y muchos proveedores adoptaron su API. Otros servicios de object storage usan APIs propias, sin compatibilidad con S3.
¿Se puede editar una parte de un archivo en el object storage?
No. Un objeto se escribe y se reemplaza completo. Para cambiar un byte, vuelves a subir el objeto. Si necesitas escritura parcial o append, usa un sistema de archivos o una base de datos.
¿El object storage tiene carpetas?
No de verdad. El espacio de nombres es plano: la clave fotos/2026/gato.jpg es solo un texto. Las consolas muestran carpetas porque agrupan las claves por el prefijo separado por barras.
¿Puedo ejecutar una base de datos sobre object storage?
No es recomendable. Las bases de datos hacen muchas lecturas y escrituras pequeñas y parciales, mientras que el object storage tiene más latencia por petición y no admite escritura parcial. Guarda los archivos en el object storage y solo sus claves en la base.
Más en Storage
Ver los 15 artículos- Qué es una URL prefirmada (presigned URL)Una URL prefirmada (presigned URL) es un enlace temporal a un archivo privado que funciona sin login. Mira cómo funciona, sus límites y cuándo usarla.
- Subir archivos grandes: carga multiparte y reanudableLa carga multiparte divide un archivo grande en partes que se envían en paralelo y se reintentan por separado. Mira el paso a paso en Python y cómo reanudar.
- Reglas de ciclo de vida: expirar y limpiar archivos automáticamenteUna regla de ciclo de vida borra archivos sola después de un plazo. Aprende a crear reglas de caducidad por carpeta en S3 con boto3 y a comprobar que funcionan.
- Archivos públicos o privados: cómo controlar quién accedeUn archivo público abre para quien tenga la URL; uno privado, solo con un enlace autorizado. Aprende a elegir, probar el acceso y compartir con seguridad.