Buscar (Don't Edit)

lunes, 16 de marzo de 2020

Amazon Simple Storage Service (S3)

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.

https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-objects.html