FASI: sirviendo tráfico web con Go y Amazon EC2 + S3
Para servir el tráfico estático de mi blog, he creado mi promia herramienta "fasi", hecha en Go y que ejecuto en mis servidores de AWS. Quiero contarte por qué me surge la necesidad de crear FASI y cuál es el camino.
Si quieres servir sitios web estáticos es muy fácil, hay multitud de proveedores cloud que te ofrecen una capa gratuita suficiente para casos de uso muy simples. El problema es que a mi personalmente la capa de pago no cubre mis necesidades, y luego la gestión y configuración de muchos sitios es tedioso y pierdo tiempo. Si no has leído los post previos a este, te animo a darle una lectura rápida.
Es por esto que, siendo ingeniero informático, especializado en el área cloud/sre/devops, me apetece divertirme y continuar aprendiendo, creando y configurando mi propia infraestructura. Eso sí, tiene que ser eficiente, optimizada, de bajo coste y poco mantenimiento.
Mi idea para servir una web estática es simple:
- Subir los ficheros estáticos a un bucket de Amazon S3.
- Utilizar un servidor EC2 lo más pequeño posible que ejecute la capa de aplicación, fasi.
Hay otras formas de gestionarlo, por ejemplo, utilizar únicamente EC2, utilizar S3 y Cloudfront, etc. pero analizando estos servicios a fondo, ninguno cumple los requisitos para mi producto a pequeña escala.
La herramienta fasi inicialmente es un reverse-proxy de Amazon S3. Le añado cierta capa de funcionalidad para mejorar la gestión de sitios web estático comos:
- Enrutamiento y gestión de ficheros.
- Sirve múltiples sitios utilizando la cabecera Host
.
- Una pequeña caché local para aprovechar el ssd local del servidor y optimizar.
- Está hecho en Go, de forma que funcione rápido y consuma los menos recursos posibles.
Esto forma la primera versión estable y funcional, ya que tengo muchas ideas que quiero ir añadiendo para mejorar la gestión de mis sitios estáticos. Esto quizá te pueden servir a ti también ¿qué te parece?
Por tanto el proceso de despliegue es simple: creo un servidor en EC2, creo un bucket de S3, configuro todos los permisos, despliego FASI en el servidor y configuro el DNS.
¡Boom, funciona! Ya está https://www.pirobits.com "en órbita" (realmente lleva varios meses funcionando jeje).
Obviamente el proceso de configuración es más complejo que las líneas de este post, y podría crear un post para cada una de las partes así que... nos vemos en el siguiente capítulo 😉
Puedes ver el código en Github, fasi.
Si te ha resultado útil este artículo agradecería si te suscribes a mi newsletter. Recibirás contenido exclusivo de calidad y también me ayudarás enormemente. Cada suscripción apoya el trabajo que realizo y me permite conocer mejor los temas que te interesan, de forma que puedo mejorar los conocimientos que comparto contigo.