Qué es el almacenamiento de objetos

El almacenamiento de objetos guarda cada archivo como un objeto, con clave única y metadatos, dentro de un bucket al que se accede por API HTTP. No hay carpetas reales ni disco montado: subes, descargas y borras objetos completos.

Actualizado el 6 min de lectura

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

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.

ClienteHTTPPUTGETDELETEBucketmi-bucketObjetoclavedatosmetadatosfotos/2026/gato.jpgff d8 ff e0 00 10 …Content-Type: image/jpegfotos/avatar.pngdocs/factura.pdf
Cada objeto es clave, datos y metadatos; el cliente habla con el bucket solo por HTTP (PUT, GET, DELETE).

¿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 PUT exitoso 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.

python
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

Más información

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.

Siguiente artículoQué es S3 y qué significa 'compatible con S3'S3 es el almacenamiento de objetos de Amazon y su API se volvió el estándar del sector. Aprende qué significa ser compatible con S3 y cómo conectarte.

Más en Storage

Ver los 15 artículos