Última actualización: 28/11/2022
En este post aprenderemos en qué consiste el servicio de Amazon S3, cómo funciona a alto nivel y por qué es una excelente opción para centralizar archivos y datos en la nube. Además, lo comparamos con HDFS para determinar sus diferencias.
Contenidos
¿Qué es Amazon S3?
Amazon S3 (Simple Storage Service) es el servicio de almacenamiento de objetos de Amazon Web Services (AWS) de tipo PaaS (Platform as a Service). Es la solución más común para almacenar datos en la nube de una forma segura, eficiente y escalable.
Con este servicio, podemos almacenar información de cualquier tipo, que se tratará como objetos. Por ejemplo, podemos usar S3 para almacenar fotografías, archivos de texto, código de webs estáticas, logs, backups, vídeos, etc. Actualmente, también se ha convertido en la capa de almacenamiento principal para los proyectos big data y data lakes en la nube de AWS para realizar analítica.
S3 es uno de los servicios más conocidos y usados de AWS desde sus inicios en el año 2006. Además está totalmente integrado con la mayoría de los otros servicios ofrecidos y es muy sencillo de usar. La alternativa en la nube de Microsoft Azure sería el servicio Azure Blob Storage.
¿Cómo se almacenan los datos? Bucket S3
Los datos en S3 se almacenan como objetos dentro de los llamados Buckets S3. Un objeto es la unidad básica de almacenamiento en S3, consiste en un fichero con un identificador y metadatos asociados. Un Bucket en Amazon S3 no es más que un directorio lógico de alto nivel en el que se encuentran los objetos, cada uno de ellos identificado con una clave. Un ejemplo de identificación de objeto puede ser el siguiente:
s3://bucket-a/2020/log.csv
El nombre del Bucket en este caso sería «bucket-a» y la clave del fichero dentro de ese Bucket «2020/log.csv». Como vemos, en el identificador se especifica el protocolo s3 como comienzo de la dirección. Para acceder a los ficheros almacenados en S3 y descargarlos, existen varios métodos e interfaces: URL con autenticación, API Rest, la consola de AWS (AWS console) y los SDKs disponibles. Además, se pueden cargar archivos en Amazon S3 con clientes FTP.
Al usar S3, es importante tener en cuenta las políticas de acceso, y evitar en lo posible dejar los buckets públicos. Es posible crear reglas y ACLs (Listas de Control de Acceso) para definir quién tiene acceso a los buckets y los objetos almacenados. También hacer uso de la transferencia de ficheros con el protocolo SSL.
Características de Amazon S3


En la actualidad, S3 proporciona consistencia fuerte para todos los objetos. Todos los nodos de almacenamiento contienen los mismos datos, posibilitando las operaciones en paralelo de manera sencilla. Para mantener la consistencia implementa mecanismos de coherencia en la caché sobre las operaciones GET, LIST, PUT y DELETE.
Antiguamente, S3 tenía un modelo de consistencia eventual. Esto significa que es posible que inmediatamente después de la actualización de un objeto, no se devolviera la última actualización hasta que se hubiera propagado y replicado en el sistema de forma asíncrona. También, podía ocurrir al eliminar un fichero. En este caso, podría seguir apareciendo en los listados durante un tiempo. El tiempo hasta alcanzar la consistencia podía variar entre varios segundos y horas, dependiendo de factores como el tamaño de los objetos y las regiones de destino.
La disponibilidad del dato que proporciona S3 es muy alta, del 99,99% por defecto. Existen varios tipos de almacenamiento que permiten ajustar la disponibilidad a las necesidades. Además, escala verticalmente de forma transparente y nos proporciona una capacidad de almacenamiento en la nube prácticamente ilimitada acorde al uso de datos.
El coste del servicio depende de su uso, tanto en capacidad de almacenamiento usada como en peticiones de red. Este precio es muy competitivo e incluye la replicación y backups de los datos, que se gestionan de forma automática y transparente. S3 también permite almacenar datos comprimidos. De esta forma, se puede reducir el coste total.
En cuanto al rendimiento de S3, hay que tener en cuenta las latencias de conexión. En el caso de usar S3 con otros servicios de AWS, podría ser despreciable, al existir optimizaciones en las redes y encontrarse entro del mismo ecosistema. Por otro lado, si estamos usando S3 como capa de almacenamiento para nuestro sistema on-premise, es un factor muy importante a considerar respecto al uso de otras tecnologías de almacenamiento como HDFS y sus ventajas.
Amazon S3 Glacier


AWS también proporciona otro servicio basado en S3 llamado Amazon S3 Glacier. Este servicio está orientado a proporcionar almacenamiento de objetos duradero en la nube para archivos de datos a un precio muy reducido.
El precio de este servicio es de aproximadamente 1 euro por terabyte al mes. Ofrece varias opciones de acceso, desde minutos a horas. También existe un servicio aún más frío, y con accesos desde 12 a 48 horas para tener los datos disponibles llamado Amazon S3 Glacier Deep Archive.
El uso más común de estos servicios de Amazon S3 Glacier es para almacenar copias de seguridad. Estos ficheros no tienen la necesidad de ser accedidos al instante, y generalmente se puede sacrificar el tiempo de acceso para ahorrar costes, ya que a su vez suelen ser ficheros de gran tamaño.
Sistema de Notificaciones en AWS S3
Los Buckets de S3 tienen la capacidad de generar notificaciones cuando ocurren ciertos eventos como la creación de un objeto o su borrado. En la actualidad se soportan tres mecanismos para notificar estos eventos:
- AWS Lambda
- Simple Queue Service (SQS)
- Simple Notification Service (SNS)
Seguridad en S3
Al usar un servicio de almacenamiento cloud como Amazon S3, debemos prestar atención a la seguridad de los buckets.
El primer paso consiste en desactivar el acceso público si no deseamos servir estos datos a todo el mundo. Al crear un bucket, AWS avisa para realizar esta acción. Es muy buena idea activar los logs de acceso para tener un registro de las acciones realizadas.
También deberemos configurar las políticas de acceso IAM. En AWS, para realizar acciones sobre un recurso (como podría ser la acción de listar los objetos de un bucket de S3) es necesario que las políticas de acceso a ese recurso para ese usuario estén permitidas. Por defecto, la política para todas las acciones es de denegación.
En S3, también existen las llamadas políticas del bucket (S3 Bucket Policies) que nos permite limitar el acceso al recurso y permite tener otra línea de seguridad. Aquí, podemos elegir a qué buckets concretos permitir el acceso.
Por último, debemos considerar el uso de cifrado sobre los datos almacenados en los buckets de S3. Podremos almacenar las claves de cifrado en servicios como KMS para aumentar la seguridad.
Amazon S3 vs HDFS
Es común comparar estas dos tecnologías como la capa de almacenamiento en nuestros sistemas de big data. Aun así, no dejan de ser totalmente diferentes, existiendo casos de uso para ambas. En esta sección vamos a comparar los aspectos principales de cada una de ellas para tener un buen criterio de elección: HDFS vs S3.
1. Escalabilidad
HDFS escala horizontalmente añadiendo más almacenamiento local en más nodos. Es posible añadir discos más grandes o, la solución más común: añadir más nodos al sistema. Esta forma de aumentar su capacidad es más costosa y complicada que S3, ya que requiere la compra y el mantenimiento de más piezas de hardware que no impactan al 100% en la capacidad de almacenamiento.
Como hemos visto, S3 escala de forma automática y transparente prácticamente sin límite y sin cambios de configuración.
2. Precio
En cuanto al precio de S3 y de HDFS, hay que tener en cuenta que HDFS necesita con su configuración por defecto 3 copias de cada bloque, lo que multiplica por 3 el espacio necesario, y con ello los costes asociados.
S3 no tiene esta necesidad ya que gestiona las copias de forma transparente, y se paga por consumo.
3. Rendimiento
El rendimiento suele ser superior en HDFS, ya que el procesamiento se realiza en el mismo host que donde se encuentra almacenado el dato. Esto hace posible tener una alta velocidad de procesamiento y de acceso al dato. S3 tiene una mayor latencia en las lecturas y escrituras por lo que en procesos de cómputo intensivos que requieren mover grandes cantidades de datos HDFS parece una mejor solución.
4. Conclusión
En resumen, S3 es una tecnología con una mejor escalabilidad, con unos precios menores y con menos barreras de entrada.
Por otro lado, HDFS consigue un mejor rendimiento, y no tiene limitaciones de tamaño para los ficheros ni de formatos.
Además, hay que tener en cuenta las compatibilidades que ofrecen las tecnologías que van a ejecutar y procesar los datos almacenados en HDFS o S3. Por algunas características de S3 como la consistencia eventual o el tratamiento de objetos, no la hacen ideal para cargas de trabajo específicas sin un impacto importante en el rendimiento.
En la práctica, es común usar S3 como almacenamiento de objetos más frío que HDFS. En HDFS se almacenarán los datos accedidos frecuentemente sobre los que hacer operaciones. S3, por otro lado se convierte en el almacenamiento de objetos más barato y sobre el que se van a realizar menos accesos u operaciones.
Siguientes Pasos y Formación
Además, aquí dejo algunas recomendaciones de cursos para aprender a usar AWS y Amazon S3 desde cero:


Este curso te permitirá aprender S3 de forma práctica usando la AWS CLI y Node.js. Aprenderás también a navegar por las consolas de AWS y S3, y usar la API y el SDK.
Si quieres conocer más sobre la diferencia entre el almacenamiento de objetos (por ejemplo con S3) y el almacenamiento de bloques, sus ventajas y cuándo usar cada uno de ellos echa un vistazo a esta entrada:
Almacenamiento de Objetos vs Almacenamiento de Bloques
Preguntas Frecuentes Amazon S3 – FAQ
¿Para qué se usa Amazon S3?
S3 es un sistema de almacenamiento de objetos escalable en la nube (PaaS). Los usos más comunes son como backup de datos y archivos y aplicaciones debido al coste y a su facilidad de acceso. S3 es ideal para almacenar datos que necesitan tener una alta disponibilidad y durabilidad, que se escriben una vez pero se acceden frecuentemente.
¿Qué es un Bucket en Amazon S3?
Un Bucket de Amazon S3 es un recurso virtual que se comporta como un directorio en el que almacenar objetos (sus datos y metadatos).
¿Qué tipo de almacenamiento es S3?
S3 usa un modelo de almacenamiento de objetos para dar servicio. Cada objeto es independiente y contiene los datos, su identificador único y sus metadatos asociados.
¿Qué es Amazon S3 Glacier?
Amazon S3 Glacier es el servicio de almacenamiento de objetos de AWS con un coste reducido. Está orientado a almacenar archivos y copias de seguridad a las que no se necesite acceder al momento, y sean aceptables unos tiempos de acceso de minutos u horas.
¿Es Amazon S3 una base de datos?
No, Amazon S3 es un servicio de almacenamiento de objetos en la nube. No tiene capacidad de realizar consultas como haría una base de datos ni de establecer relaciones.
A continuación, el vídeo-resumen. ¡No te lo pierdas!
Gracias por compartir conocimiento