Función principal: Almacenamiento seguro, durable y altamente
escalable en la nube.
Ejemplos de casos de
uso populares:
- Backups.
- Almacenamiento y distribución de contenido (software, media).
- Big data.
- Web hosting estático.
- Recuperación de desastres.
Storage classes: General purpose, infrequent access y archive.
Servicios similares: Amazon Glacier
Detalles:
S3
utiliza un sistema de almacenamiento llamado cloud
object storage, el
almacenamiento es independiente de un servidor y se accede a tráves
de Internet. Todos los datos almacenados se consideran objetos y
estos son administrados usando una API basada en verbos HTTP. Los
objetos están compuestos por datos y metadatos. Los
metadatos pueden ser de tipo system
creados por Amazon o user
que son opcionales. Cada
objeto es identificado por una llave que nosotros proporcionamos,
esta llave hace a su vez la función de nombre del archivo. Los
objetos son automáticamente replicados en múltiples
instalaciones y dispositivos dentro de una misma región. El
tamaño de los objetos puede variar entre 0 bytes y 5TB.Cada
objeto puede ser dirigido por una
única
URL formada por el endpoint del webservice + el nombre del bucket
+ el la llave del objeto.
Ejemplo:
http://nombreBucket.s3.amazonaws.com/llave
Los
objetos mencionados son almacenados en una estructura llamada bucket.
Los
buckets
son simplemente carpetas planas que no tiene ningún tipo de
estructura jerárquica. Virtualmente cada bucket
puede almacenar la cantidad de objetos que queramos. Los
nombres de los bucktes
son globales, así es que los nombres tienen que ser únicos y pueden
contener hasta 63 caracteres incluyendo números, guiones y puntos.
La sugerencia es basarse en un sistema similar a las reglas de los
DNS. Cada bucket
se crea en una región especificada seleccionada por nosotros.
S3
esta altamente optimizado para lecturas y sus características
minimalistas
son intencionales con el fin de brindar mayor escalabilidad y
durabilidad.
Ahora mencionamos las operaciones permitidas.
- Crear y eliminar buckets.
- Escribir objetos.
- Leer objetos.
- Borrar objetos.
- Listar llaves en un bucket.
Durabilidad
: 99.999999999%
Disponibilidad:
99.99%
Consistencia
de datos:
Se
basa en un sistema eventual de consistencia debido a la replicación
en múltiples servidores y localidades los cambios realizados pueden
tardar un poco en propagarse. Para
PUTs
nuevos no existe ninguna consideración ya que se garantiza
consistencia de lectura después de escritura. Sin embargo cuando
utilizamos PUT
o DELETE
para un objeto ya existente se aplica la estrategia de consistencia
eventual. Esto quiere decir que podríamos recibir la información no
actualizada pero nunca una mezcla inconsistente de datos.
Control
de acceso:
Por
default cuando creamos un bucket
solo el creador tiene acceso a el. Después de eso es nuestra
responsabilidad utilizar alguno de los mecanismos que se ofrecen para
dar acceso a terceros. Podemos hacer uso de ACLs para dar acceso a
nivel de bucket
ó podemos hacer uso de la recomendación de Amazon y usar políticas
especificas para cada bucket.
Web
hosting estático:
Rápido, muy escalable y mucho más seguro que un sitio web dinámico.
Prefijos y delimitadores:
Debido
a la estructura plana la utilización de prefijos y delimitadores
permite organizar y navegar simulando una estructura jerárquica. Es
común utilizar “/” y ”\”. Utilizando
IAM o políticas aplicadas a los buckets podemos filtrar accesos a
distintos usuario.
Ejemplos:
Nombre del objeto: 2008/septiembre/foto1.jpg
Es importante recalcar que es una simple emulación ya que S3 no es
un sistema de archivos.
Storage classes:
General purpose, infrequent access y archive.
S3 Standard – Para
la mayoría de los casos de uso general.
S3 Standard Infrequent Access – Para
archivos que persisten
por un tiempo más largo (más
de 30 días) y que su acceso
no es tan frecuente. Su costo
depende de uso en GB que se haga.
S3 Reduced Redundancy Storage – Ideal
para datos que puedes ser calculados o recuperados fácilmente.
Utilizar el API SDK de AWS para Java es realmente muy sencillo, imagino que debe de ser igual de sencillo para otro lenguaje soportado.
Particularmente realice el ejemplo que viene en la documentación y adicionalmente realice un PUT usando un InputStream, en ese caso la firma requiere de un ObjectMetada en cual agregue la información de tamaño del contenido.
Utilizar el API SDK de AWS para Java es realmente muy sencillo, imagino que debe de ser igual de sencillo para otro lenguaje soportado.
Particularmente realice el ejemplo que viene en la documentación y adicionalmente realice un PUT usando un InputStream, en ese caso la firma requiere de un ObjectMetada en cual agregue la información de tamaño del contenido.
https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-objects.html