JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

¿Migrar tu Web app a Azure? - Caso práctico con este blog (Parte I) - Qué es PaaS y Azure Web Apps

La verdad es que esto es algo que llevaba queriendo hacer mucho tiempo, pero que había ido dejando y dejando... Hasta ahora.

Por fin, hace unos días, saqué algo de tiempo y realicé la migración de mi blog (este que estás leyendo) a Azure. Ha sido una migración "tal cual", es decir, la misma aplicación exactamente como la tenía (en un servidor Windows con IIS), movida a una Web App de Azure, sin adaptaciones ni cambios. Además utilizo CloudFlare como DNS, proxy y sistema de seguridad, lo cual me ha facilitado todavía más el cambio, como contaré más adelante.

Nota: si no conoces Cloudflare, ya estás tardando: es un servicio increíble, con cantidad de funcionalidad y con una capa gratuita más que generosa. Desde que lo descubrí hace dos o tres años, lo uso para todos mis dominios en Internet. Y no me pagan por decirlo, que en este blog no acepto publicidad aunque en este artículo hable de dos productos de terceros 😋 Espero no arrepentirme en el futuro de haberlo recomendado (no creo), pero hoy por hoy soy un enamorado del servicio y de sus posibilidades.

Logo Azure Web Apps Mi intención es contar en una serie de próximos posts, empezando por el de hoy, el proceso de migración, para explicar varias cosas:

  • Qué es Azure Web Apps, ventajas e inconvenientes y si es para ti o no.
  • Cómo migré, paso a paso, este blog a Azure, de modo que te sirva si quieres instalar una aplicación ahí
  • Algunos detalles más, como por ejemplo, cómo configurar certificados SSL, cómo diagnosticar errores de tus aplicaciones, cómo hacer copias de seguridad automáticas en Azure Web Apps...

En este primer post de la serie voy a contar qué es Azure Web Apps, cuánto cuesta (si es gratis o no, vamos) y las ventajas e inconvenientes que tiene migrar tu aplicación web a este servicio.

Allá vamos...

¿Qué son los servicios PaaS? ¿Qué es Azure Web Apps?

Azure, como seguro que ya sabes, es el nombre con el que se conoce al conjunto de los servicios en la nube de Microsoft. Bajo este paraguas la empresa de Redmond ofrece todo tipo de servicios bajo demanda basados en Internet.

Azure Web Apps es un producto de Plataforma como Servicio (PaaS) dentro Azure. ¿Qué quiere decir esto? Pues, dicho de manera simple y directa, implica que va un paso más allá de tener una máquina virtual en la nube (que es lo que se conoce como IaaS, Infraestructura como servicio) para aislarte por completo de lo que hay debajo ejecutando tu aplicación. En una máquina virtual debes instalar el sistema operativo, el servidor web, administrar ambos, instalar tus aplicaciones, establecer permisos, hacer copias de seguridad... Y todo esto para empezar a funcionar. Si luego la aplicación crece y tiene mucho tráfico quizá debas escalarla y para ello debes instalar más máquinas y repetir el proceso, manteniéndolas sincronizadas, etc... Es decir, IaaS simplemente te evita los posibles problemas derivados del hardware, pero todo lo demás "te lo comes" tú.

Un servicio PaaS como Azure Web Apps, te aísla de todo eso. Tú simplemente das de alta el servicio, indicas qué quieres ejecutar en él, y (en este caso) Azure se ocupa de todo lo demás. En lo que a ti respecta, no existe sistema operativo debajo (Windows, Linux...), ni servidor web (IIS, NGinx, Apache...), ni actualizaciones,, ni configuración de red, ni virus, etc... Te tienes que preocupar tan solo de tu aplicación. De lo demás te olvidas. Y esto es una grandísima ventaja.

Aunque mucha gente lo sigue asociando únicamente con Windows y con .NET, en función de tus preferencias, Azure Web Apps puede estar ejecutando por debajo Windows Server o Linux en versiones de 32 o de 64 bits, y también ejecuta aplicaciones con multitud de lenguajes y plataformas de programación (.NET, PHP, Java, ASP Clásico, Node.js, Python...). Olvídate del viejo binomio Microsoft = Solo tecnologías de Microsoft.

También puedes instalar y configurar automáticamente muchas aplicaciones ya hechas, como gestores de contenidos como WordPress, Joomla o Drupal, comercio electrónico, foros, CRMs... Es decir, ni siquiera tiene qu ser una aplicación tuya.

Pero, espera... ¿En que se diferencia esto de un hosting de los de toda la vida? En un hosting te dan un espacio de almacenamiento y tú subes por FTP los archivos de tu aplicación y te olvidas ¿no?

Sí, pero es que una PaaS te da mucho más que eso. Por citar algunas cosas más:

  • Muchas más opciones de despliegue e integración continua. Por ejemplo, puedes desplegar automáticamente a la nube cada vez que hagas un commit en una rama determinada de tu repositorio de código Git, o desplegar desde Dropbox, a través de FTP (obviamente), entre otras muchas opciones.
  • Escalabilidad: si de repente tu aplicación crece mucho en usuarios o tráfico, incluso aunque solo sea durante un par de días por algún acontecimiento concreto, puedes escalarla lo que necesites para atender a la nueva demanda, simplemente dándole a un botón o incluso de manera automática, sin que tengas ni que ocuparte tú. No hay balanceadores de carga que mantener, almacenamiento que sincronizar, etc...
  • Slots de trabajo: puedes tener diversos slots para la aplicación, por ejemplo: uno de producción que es el que está de cara al exterior, uno para pruebas internas y otro para actualizaciones, y utilizarlos todos de manera independiente y cambiar instantáneamente de uno a otro. Incluso puedes crear slots de pruebas que salen a producción solo para una fracción reducida de tu tráfico, de modo que puedas probarlo con usuarios reales sin arriesgarte a cambiar la aplicación entera.
  • Instrumentación: para saber exactamente cómo está funcionando tu aplicación, qué fallos hay, cómo responde, la memoria que usa, etc... Es posible incluso hacer pruebas de carga automatizadas de la aplicación, simulando cientos de usuarios simultáneos desde diferentes partes del mundo para ver cómo responde.
  • CDN: si haces uso de esta funcionalidad tus recursos se distribuyen mundialmente y se sirven a tus usuarios desde la ubicación más cercana que de la forma más rápida posible (que conste que yo, para esto, uso Cloudflare y no Azure).

Por no mencionar que en Azure Web Apps y servicios PaaS similares, tienes reservado para tu uso exclusivo la memoria y CPU que hayas contratado y no la compartes con otros cientos de clientes, como sí suele ocurrir en los hosting (sobre todo si son baratos), por lo que el rendimiento está asegurado. También tienes copias de seguridad automáticas, posibilidad de administrarlo todo desde la línea de comandos.

Me has convencido. ¿Cuánto cuesta esto?

Azure Web Apps te permite crear hasta 10 Web Apps de manera gratuita. Sin embargo con muchas limitaciones y sin poder usar siquiera un dominio propio para las mismas. Están pensadas para que puedas probar el servicio o montes webs personales sin grandes pretensiones. Si quieres hacer algo en serio tiene que contratar una versión de pago.

La más económica, con recursos compartido con otros clientes, 4 horas al mes de uso de CPU (que da para más de lo que parece), pero con dominio propio y con posibilidad de instalar hasta 100 aplicaciones, cuesta unos 8€ al mes.

Si quieres ir a algo serio, con recursos reservados, SSL propio, ilimitadas aplicaciones y que pueda escalar, el precio sube hacia el rango de los 40€ mensuales. Eso sí, obtienes la mayor parte de las ventajas que comentaba en el apartado anterior. De hecho existen algunas capas de precios muchísimo más caras, pero pensadas para servicios muy grandes. Tienes los detalles aquí. Más adelante veremos con más detalle los precios y algunos consejos para ahorrar.

Quiero recalcar algo muy importante que debes tener en cuenta: esos precios no son por aplicación, sino por unos recursos subyacentes determinados. Es decir, que si contratas por ejemplo un plan B1 que cuesta unos 47€ al mes, puedes meter en él tantas aplicaciones y dominios como quieras mientras te aguante el servicio (y aguanta mucho), por lo que el coste se divide entre todas ellas. También ten en cuenta que el servicio se factura por minutos, por lo que puedes ampliarlo o reducirlo según necesitas (por ejemplo, durante picos) y puedes tener una capa súper-potente durante unas horas por unos pocos euros, volviendo a una más barata cuando ya no la necesites.

Es decir, no es caro (al menos no prohibitivo), pero no es para todo el mundo tampoco.

Y entonces ¿qué hago? ¿Qué me recomiendas?

Mi consejo sería:

  • Si tu sitio web es estático (o sea, no es una aplicación realmente sino un conjunto de HTML, CSS y JavaScript) y no tiene una cantidad exagerada de tráfico ni necesidades avanzadas, albérgalo gratuitamente en GitHub Pages o en Firebase y olvídate.
  • Si es una aplicación web estilo Wordpress o algo hecho a medida, pero tiene poco tráfico y no te preocupa en exceso el tiempo de respuesta, un hosting tradicional puede irte bien. Dependiendo de la calidad del proveedor de hosting (y el precio) puedes de hecho conseguir resultados excelentes.
  • Si se trata de una app que ya tiene (o esperas que tenga) bastante tráfico, que puede tener picos puntuales de demanda, que retocas o cambias a menudo, en la que te importa el rendimiento y tiempos de respuesta y sobre la que quieres tener un buen control pero sin tener que administrar sistemas, un servicio PaaS como Azure Web Apps es lo que estás buscando, y amortizarás el coste desde el primer momento aunque solo sea por la tranquilidad que te proporciona.

¿Más pegas que se te ocurran?

Aparte del coste existen otras desventajas, que no todo el monte es orégano...

Por ejemplo, existe un máximo de espacio de almacenamiento disponible a compartir entre todas tus Apps. De hecho el máximo son 250GB (o 1TB en un tier especial, a precios exorbitados). El motivo es que, en realidad, el espacio de almacenamiento debería ser solo para los archivos de tu app, no para los que va generando su uso. Aunque por supuesto puedes hacerlo siempre que no sobrepasen ese espacio disponible. La idea es que utilices la API para los servicios de almacenamiento de Azure y almacenes los archivos generados por tus usuarios en un Blob, de ahí esa cierta limitación de espacio. No obstante muchas aplicaciones ya hechas y no pensadas específicamente para usar el almacenamiento de Azure deben utilizar el almacenamiento disponible en la Web App (lo que ven libre en disco, vamos), y en ciertos tipos de aplicaciones esto puede suponer una limitación. Piensa, por ejemplo, en un servicio de almacenamiento de fotos de tus usuarios: no te serviría si no lo integras con blobs de Azure Storage, que por otra parte sería lo más recomendable.

En mi opinión Microsoft harían felices a muchos usuarios y conseguirían más clientes para el producto si añadiesen la capacidad de agregar un Blob de Azure a la Web App que se viera como una unidad local, de manera transparente para la aplicación. Solo con esto aumentaría de manera brutal la capacidad de trabajar con aplicaciones "legacy". Pero de momento es solo un sueño recurrente que tengo 😊

Otro posible prob lema es que, aunque es posible desplegar aplicaciones .NET, Java, PHP, Node.js, Python, ASP clásico... no vale para todas las aplicaciones ya que, por ejemplo, no puedes instalar componentes COM/ActiveX antiguos que debas utilizar.

Además como se ejecutan en un "Sandbox" para aislar las aplicaciones unas de otras, hay cosas que no se pueden hacer, como por ejemplo escribir en el registro (en el caso de Windows), acceder al log de eventos mediante código, crear links simbólicos en el disco o, por citar algo muy común, generar PDFs con ciertos componentes que hacen uso por debajo de IE y GDI32. Aquí tienes una lista completa de limitaciones.

Por decirlo de manera rápida: funcionarán de maravilla con aplicaciones relativamente modernas que no hagan "cosas raras". Pero si debes usarlos con aplicaciones "legacy" que hagan uso de componentes COM, fuera de proceso o que debas registrar, o que usen APIs de muy bajo nivel que supongan un problema de seguridad, entonces olvídate y vete a máquinas virtuales (porque en un hosting tampoco vas a poder ejecutarlas de todos modos).

En resumen

Azure Web Apps es una excelente elección si quieres una plataforma robusta en la que ejecutar tus aplicaciones Web, sin preocuparte por administrar sistemas, pudiendo escalar automáticamente y con muchas otras ventajas que te he contado más arriba.

Ahora bien, si tu sitio es pequeño, con poco trafico y sin grandes pretensiones, probablemente no te compensará el coste que tienen. Tampoco te valdrán si la aplicación o aplicaciones que quieres usar es muy antigua y depende de componentes de terceros (especialmente COM/ActiveX) que debas instalar.

Pero si la aplicación es relativamente moderna y no hace nada "extraño" y necesitas obtener rendimiento, escalabilidad, facilidad de despliegue, "slots" para pruebas, etc... te encantarán y elevarán el nivel de tus aplicaciones.

Espero que esta introducción a PaaS con Azure Web Apps te haya resultado interesante. En cuanto pueda seguiré con la serie y en el siguiente post contaré, paso a paso, el proceso de migración de mi blog de un servidor Windows con IIS a Azure Web Apps.

¡Hasta pronto!

José Manuel Alarcón José Manuel Alarcón
Fundador y director de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Descarga GRATIS mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Agregar comentario