Análisis del costo y desempeño de un sitio web estático con Amazon S3

Guía paso a paso de cómo crear un sitio web estático con Amazon S3 y un análisis de pruebas realizadas para evaluar el costo y desempeño.

  1. Beneficios de crear un sitio web estático con Amazon S3.
  2. Crea un sitio web estático con Amazon S3.
  3. Análisis de costo y desempeño.
  4. Conclusión

Guía paso a paso de cómo crear un sitio web estático con Amazon S3 y un análisis de pruebas realizadas para evaluar el costo y desempeño.

Beneficios de crear un sitio web estático con Amazon S3.

Uno de los grandes beneficios de utilizar Amazon S3 es su accesibilidad, confiabilidad, durabilidad y bajo costo. Amazon S3 es un servicio global disponible a través de regiones AWS y ofrece acceso a tus archivos (objetos) con baja latencia y garantiza la durabilidad hasta un 99.999999999%. Esto hace que Amazon S3 sea un servicio muy atractivo para soluciones como archivo muerto, respaldos y arquitecturas de recuperación de desastres.

Una funcionalidad muy particular de Amazon S3 es que permite alojar un sitio web estático y provee una URL (endpoint) con la cual podrás acceder a tu sitio web. Tan solo tienes que subir tu código HTML a Amazon S3 y apuntar tu navegador a la URL de tu sitio web en Amazon S3.

Es importante mencionar que esta funcionalidad no permite código que se ejecuta del lado del servidor como PHP, JSP, ASP.NET, etc.

En este articulo aprenderás lo siguiente:

  • Como crear un sitio web estático en Amazon S3
  • Cual es el costo de un sitio web estático en Amazon S3
  • Cual es el rendimiento de un sitio web estático en Amazon S3
  • Métricas CloudWatch que te ayudan a entender el uso de tu sitio web estático en Amazon S3

Crea un sitio web estático con Amazon S3.

Paso 1. Crear un bucket de Amazon S3 y configurarlo para alojar un sitio web estático

  1. Inicia sesión en la consola Amazon S3:
    https://console.aws.amazon.com/s3
  2. Haz clic en “Crear bucket”
    • En la sección “Nombre y región”
      • Ingresa un nombre para el bucket (tiene que ser un nombre que cumpla con las convenciones DNS. Si vas a usar este sitio web con un dominio, ingresa como nombre del bucket tu dominio de internet. Por ejemplo: citertag.com
      • Elige la región de tu preferencia y da clic en “Siguiente”
    • En la sección “Configurar opciones”
      • Por defecto la opción “Bloquear acceso público” está habilitada. Como el sitio web necesita ser accedido por cualquier persona en Internet, es necesario deshabilitar el bloqueo de acceso público. Da clic en la casilla “Bloquear todo acceso público” para quitar la selección. Aparecerá una advertencia de las implicaciones de dar acceso público al bucket, selecciona la casilla en la advertencia para reconocer que has entendido la advertencia y da clic en “Siguiente”.
    • Finalmente, en la sección de “revisión” da clic en “Crear bucket”
  3. Da clic en “Propiedades” y después da clic en “Alojamiento de sitios web estáticos”
    • Da clic en “Propiedades” y después da clic en “Alojamiento de sitios web estáticos”
    • Selecciona la opción “Usar este bucket para alojar un sitio web”
    • Ingresa tu archivo HTML principal en la casilla de texto “Documento de índice”. Por ejemplo: index.html
    • Da clic en “Guardar”
  4. Da clic en la pestaña “Permisos” y después da clic en “Política de bucket”
    • Ingresa la siguiente política de bucket modificando el nombre de tu bucket en la misma (modifica la parte donde dice “example-bucket” por tu nombre del bucket):
                      
      {
      	"Version":"2012-10-17",
      	"Statement":[{
      		"Sid":"PublicReadGetObject",
      			"Effect":"Allow",
      		"Principal": "*",
      		"Action":["s3:GetObject"],
      		"Resource":["arn:aws:s3:::example-bucket/*"
      		]
      	}
      	]
      }
                      
    • Da clic en “Guardar”
    • Aparecerá una advertencia acerca de que has dado acceso público al bucket. Esto es normal cuando el sitio web tiene que ser accedido por cualquier persona en Internet. Recuerda que todos los archivos que subas al sitio web estático en los siguientes pasos podrán ser descargados por cualquier persona.

Paso 2. Subir los archivos HTML al bucket utilizando la consola AWS

  1. Da clic en la pestaña “Información general”
  2. Para este ejemplo, estoy utilizando una plantilla gratuita que puedes descargar de este link: https://templated.co/industrious
    • Abre tu explorador de archivos en tu sistema operativo y selecciona todos los archivos HTML (incluyendo las carpetas) y arrástralos a la sección de color azul en la consola S3.
    • Aparecerá la pantalla “Cargar”. Da clic en “Siguiente” hasta llegar a la sección “revisión” y da clic en “Cargar”
    • Aparecerá una barra de progreso en la consola S3 con el estado de la transferencia de archivos. Espera a que finalice la carga.

Paso 3. Probar el sitio web

  1. Da clic en la pestaña “Propiedades”, después da clic en “Alojamiento de sitios web estáticos”.
  2. Da clic en el enlace “Punto de enlace”
  3. Podrás ver el sitio web en una ventana en tu explorador de internet.

Análisis de costo y desempeño

Para la prueba de rendimiento del sitio web estático estoy utilizando una plantilla que descargue de la siguiente liga: https://templated.co/industrious. Dicha plantilla contiene 56 archivos y en total hacen 12 MB.

Haciendo una petición web desde el explorador de internet a mi sitio web estático en Amazon S3, podemos observar que se hacen 24 peticiones web al bucket para acceder a los diferentes recursos web (assets) de la plantilla.

De acuerdo con la documentación de Amazon S3, el servicio tiene un alto desempeño y fácilmente alcanzar al menos 5,500 transacciones GET/HEAD por segundo por prefijo en un bucket [1].

[1] https://docs.aws.amazon.com/es_es/AmazonS3/latest/dev/optimizing-performance.html

Para probar el desempeño del sitio web estático en Amazon S3, utilice la herramienta “Apache Benchmark”, la cual ayuda a hacer una prueba de carga sencilla al mandar peticiones web a una URL de manera automatizada utilizando concurrencia.

El siguiente comando muestra que se hicieron 3,000,000 de peticiones web a la URL de mi bucket donde está el sitio web estático, con una concurrencia de 100.

              	
# ab -c 100 -n 3000000 http://citertag.com.s3-website-us-east-1.amazonaws.com/index.html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking citertag.com.s3-website-us-east-1.amazonaws.com (be patient)
Completed 300000 requests
Completed 600000 requests
Completed 900000 requests
Completed 1200000 requests
Completed 1500000 requests
Completed 1800000 requests
Completed 2100000 requests
Completed 2400000 requests
Completed 2700000 requests
Completed 3000000 requests
Finished 3000000 requests


Server Software:        AmazonS3
Server Hostname:        citertag.com.s3-website-us-east-1.amazonaws.com
Server Port:            80

Document Path:          /index.html
Document Length:        8249 bytes

Concurrency Level:      100
Time taken for tests:   2120.476 seconds
Complete requests:      3000000
Failed requests:        0
Write errors:           0
Total transferred:      25809056181 bytes
HTML transferred:       24747052641 bytes
Requests per second:    1414.78 [#/sec] (mean)
Time per request:       70.683 [ms] (mean)
Time per request:       0.707 [ms] (mean, across all concurrent requests)
Transfer rate:          11886.08 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1   32 146.8     12    5107
Processing:     2   39  82.4     16   10585
Waiting:        2   19  33.1     15   10291
Total:          3   71 173.9     28   11617

Percentage of the requests served within a certain time (ms)
  50%     28
  66%     31
  75%     34
  80%     39
  90%    116
  95%    271
  98%    797
  99%   1055
 100%  11617 (longest request)
              	
              

Resultados de la prueba:

  1. Duración aproximada de 35 minutos en hacer 3,000,000 de peticiones web.
  2. Todas las peticiones web fueron exitosas, no hubo ninguna que regresara algún error.
  3. El tamaño del documento descargado es aproximadamente 8KB, lo que implica que se descargaron aproximadamente 24 GB tan solo por leer el documento HTML.
  4. Aproximadamente se hicieron 1414 peticiones web por segundo durante esta prueba.

Analicemos ahora las gráficas en CloudWatch de este bucket.

FirstByteLatency es una métrica de un bucket de S3 con la cual podemos observar la latencia o demora desde que la petición web es recibida en su totalidad en un bucket S3 y el tiempo en que se empieza a mandar una respuesta. Como vemos en las siguientes dos gráficas, el 1% de las peticiones web más lentas estuvieron entre 25 y 51 milisegundos, mientras que la media de todas las peticiones web fue aproximadamente entre 3 y 6 milisegundos.

FirstByteLatency (Average):

FirstByteLatency (P99):

TotalRequestLatency es una métrica de un bucket de S3 que incluye el tiempo en que se recibe el cuerpo de la petición web (dicho tiempo no se incluye en FirstByteLatency) y el tiempo que toma en mandar el ultimo byte. Podemos ver que los tiempos son muy similares al de FirstByteLatency tanto en la media como en P99.

TotalRequestLatency (Average):

TotalRequestLatency (P99):

GetRequests es una métrica que utilizamos para medir el número de peticiones GET a un bucket. Como mencione anteriormente, una petición web a index.html genera 24 peticiones web para descargar recursos web, esto significa que cada petición web a index.html genera 25 peticiones GET al bucket.

GetRequests (Sum):

BytesDownloaded mide el número de Bytes descargados. Como observamos en la prueba anterior, el documento index.html tiene un tamaño de 8KB, por lo que en total se descargaron 24GB del bucket.

BytesDownloaded (Sum):

5xxErrors mide el numero de errores del lado del servidor (en este caso, como no tenemos una instancia o servidor, esto seria el servicio S3). Como vemos, no hubo ni una sola petición web con error. Cuando se hacen pruebas de rendimiento, es común ver errores 504 Gateway Timeout, en esta prueba S3 ni siquiera lanzo un error de los 3 millones de peticiones web que mandamos.

5xxErrors (Sum):

El costo de dicha prueba lo podemos deducir utilizando la herramienta AWS Simple Monthly Calculator:

Con esta herramienta, ingresamos los parámetros como PUT (escritura) y GET (lectura) de peticiones web al bucket así como los GB transferidos. Aproximadamente esta prueba tiene un costo de $1.28 USD. Lo cual resulta muy barato considerando que la instancia EC2 de menor costo ronda los $4.25 USD al mes. Un ahorro del 70% comparado con EC2, sin instancias, sin mantenimientos asociados, tan solo subir el código HTML a tu bucket.

Conclusión:

Amazon S3 es un servicio de bajo costo de almacenamiento de archivos el cual podemos utilizar para alojar sitios web estáticos. El servicio tiene un alto rendimiento y ofrece métricas CloudWatch para poder analizar el desempeño del sitio web. En las pruebas realizadas pudimos observar hasta un 70% de ahorro en el costo comparado con el servicio EC2.

Somos una empresa nacida en la nube

Ayudamos a las empresas a lograr sus objetivos tecnológicos

Contactar

Artículos recientes

Como crear un Sitio Web Estático con Amazon S3

Caso de éxito: Recave, expertos en cobranza

Los retos de Recave consistían en mantener una comunicación efectiva con el personal al no contar con...

Leer artículo
Primer evento AWS Cloud Nights

Estrategias de Migración, las 6 R’s

Dentro del proceso de migración a la nube puedes encontrarte con distintos caminos...

Leer artículo
Caso de Éxito: Kopay, líder en servicios de belleza

Caso de Éxito: Kopay, líder en servicios de belleza

"Implementación del servicio EKS (kubernetes) y CI/CD para Docker en e-commerce líder en México"

Leer artículo
Costo total de propiedad o Total cost of Ownership (TCO)

Costo total de propiedad o Total cost of Ownership (TCO)

Amazon Web Services (AWS) proporciona una forma de adquirir y usar infraestructura a demanda.

Leer artículo