El serivicio de Simple Storage Service (S3) puede servir sitios estáticos con muy poco trabajo. Son dos simples pasos, habilitar los sitios estáticos y asignar los permisos necesarios para que todos los usuarios puedan leer los archivos. Veamos como hacer eso después de unos brevisimos comentarios previos sobre el servicio.
S3 es un servicio que provee almacenamiento de objetos, lo cual equivale a decir que se guardan archivos, im[agenes, documentos, videos, fotos, a diferencia de un soporte de almacenamiento de bloques que se utiliza con otros fines como la instalación de un sistema operativo, una base de datos, etc. El análogo a las carpetas en S2 son los buckets los cuales tienen que tener un nombre globalmente único, es decir que ningún otro usuario de AWS puede estar usando dicho nombre.
Para habilitar el sitio estático hay que ir a las propiedades del bucket y seleccionar Properties y luego Static website hosting.
Para habilitar el sitio bastan con seleccionar Use this bucket to host a website y proveer el documento principal del sitio. El documento de error es opcional aunque recomendable tenerlo ya que se mostrará si un usuario intenta acceder a un recurso inexistente.
Otro punto importante de este diálogo es el Endpoint. El endpoint es la URL que AWS asigna a nuestro sitio y a través de la cual se puede navegar. Pero antes de que esto funcione hay que asignar permisos adecuados al bucket.
Si bien el sitio está habilitado, el bucket aún no tiene permiso para que los usuarios no autenticados que lleguen a él puedan ver los archivos. Para eso debemos modificar la policy para que permita lecturas anónimas.
Una política no es más que un documento en JSON (Javascript Simple Object Notation) que permite describir el nivel de acceso que cada usuario puede tener a un recurso. La siguiente imágen muestra la policy que permite la lectura de los archivos por parte de todos los usuarios no autenticados.
Una vez que éstos cambios son guardados, el sitio web estático estará disponible en el endpoint anteriormente mostrado.