Azure Web Apps: Cómo acceder correctamente a través de FTP

24/09/2017
Artículo original

Las Azure Web Apps (antes conocidas como Azure Web Sites) son una manera estupenda de gestionar tus aplicaciones web en la nube, utilizando la plataforma como servicio (PaaS) de Microsoft. Entre sus muchas ventajas se encuentran:

  • La posibilidad de auto-escalar la aplicación (tanto horizontal como verticalmente) de forma manual o automática en caso de necesidades de crecimiento puntuales o a largo plazo
  • La alta disponibilidad y el balanceado de carga automático.
  • La posibilidad de hacer despliegues con varios "slots" (por ejemplo test, pre-producción y producción)
  • La integración continua, es decir, en esencia poder actualizar automáticamente la aplicación o sitio web desde alguna fuente de trabajo que utilicemos, en cuanto haya cambios válidos. Por ejemplo, directamente desde GitHub u otro repositorio Git, pero también desde Dropbox o OneDrive entre otros.
  • Etc... Te remito al enlace anterior para conocerlas mejor.

Por supuesto puedes desplegar aplicaciones tanto Windows como Linux, y utilizar casi cualquier lenguaje de programación de servidor: ASP.NET, PHP, Node.js, Java o Python. Hasta funciona perfectamente ASP clásico.

Para mi, y por decirlo de una manera sencilla y directa, la mayor ventaja que ofrece el poder utilizar Azure Web Apps es el poder olvidarte por completo de todo lo que no sea tu propia aplicación. Es decir, la promesa de la plataforma como servicio. Nada de pensar en actualizar el S.O., si alguna de esas actualizaciones te va a dar problemas, nada de configurar el servidor y las muchas ramificaciones de esto, etc...

Aunque no son la cura para todo y tienen sus limitaciones (por ejemplo en el número de dominios que puedes albergar, 500 como máximo en una misma Web App, o el espacio de almacenamiento máximo que ofrecen: 1TB), sí que valen para el 99% de los de casos.

Incluso tienen una versión gratuita, con limitaciones, pero útil para montar tus proyectos personales. Yo por ejemplo tengo la web de mi proyecto Open Source MIIS en una instancia gratuita de Azure Web Apps, y funcionando bajo el propio MIIS.

Así que te animo a probarlas si no lo has hecho ya.

El "problema" del despliegue tradicional por FTP en Azure Web Apps

Si lo que tienes es un sitio web pequeño, y no tanto una aplicación, lo más sencillo es gestionarlo directamente por FTP, sin necesidad de hacer integración continua desde Git ni nada similar.

Si vas a las opciones de tu aplicación web, en la barra lateral, verás que hay un apartado llamado "Deployment Credentials" o "Credenciales de despliegue", y dentro de éste te deja configurar un nombre de usuario y una clave para FTP:

Estableciendo credenciales de despliegue

Pero hay que tener en cuenta una cuestión muy importante si lo haces: Estas credenciales se establecen para toda la cuenta de Azure, no solo para ese sitio web. No solo eso, sino que además son nombres globales, por lo que si intentas establecer uno que ya haya usado algún otro usuario no te lo permitirá, como se ve en la figura anterior.

Si estableces estas credenciales, podrás acceder con ellas a cualquier aplicación que tengas en tu cuenta de Azure, y no solo a la app en la que lo estás estableciendo. Llega con poner el nombre de la aplicación delante (como dominio, por ejemplo nombreDeMiApp\admiinstradorFTP), pero usando el mismo nombre de usuario y la misma clave en todas. Podrás usarlo para conectarte por FTP a la web app, y también para desplegarla usando Git, añadiéndolo como otro remoto más de tu repositorio.

Te las mostrará en la información de cualquiera de tus apps:

Info de despliegue en la portada de la web app

Esto puede ser útil si eres tú la única persona que maneja todos los servicios y no quieres gestionar individualmente las credenciales de cada aplicación. Pero es muy peligroso, ya que si no eres consciente y le das las credenciales a un tercero (un programador que te ayude, un cliente), le estás casi entregando las llaves de tu cuenta de Azure :-S

Desde mi punto de vista el hecho de que el menú que te permite establecer esto globalmente esté en el lateral de tus aplicaciones es una grave fuente de confusión y deberían buscarle otra ubicación.

Siendo justos no se puede decir que no te lo avisen con claridad en el mensaje de la propia página de configuración (ver la primera figura), pero el hecho de estar en una de las opciones de la Web App, desde luego que no ayuda.

Obteniendo las credenciales individuales para cada Azure Web App

¿Cómo podemos hacer para tener unas credenciales diferentes para cada Web App?

El "truco" es fijarse en un botón que tienen las Web Apps en su página inicial, en la portada, y que se puede ver en la captura anterior: Get Publish Profile:

Botón de obtener las credenciales

Al pulsar este botón se nos descarga un archivo con el nombre de la aplicación y con extensión .PublishSettings. Éste no es más que un archivo XML que contiene la información para poder conectarnos individualmente a la web app.

Si lo abrimos con cualquier editor de texto podemos ver las credenciales tanto para Web Deploy como para FTP, que en este caso son las que nos interesan:

Credenciales individuales

Ahora podemos introducirlas en nuestro programa de FTP favorito y acceder exclusivamente a esa Azure Web App.

Lo malo del acceso por FTP es que no podemos crear cuentas adicionales ni controlar a qué se partes se accede, así que solo vale para ser utilizada por una o dos personas (y que sean de mucha confianza).

Si por lo que sea se ven comprometidas estas credenciales y necesitamos cambiarlas, solo tenemos que pulsar en el botón "Reset Publish Profile", al lado del anterior, y se generan unas nuevas, que podremos averiguar bajando otra vez el archivo .PublishSettings.

En resumen

Existen dos maneras de acceder a través de FTP a una Azure Web App, y es muy importante saber la diferencia existente entre ambas.

Con la que parecería más evidente hay que tener mucho cuidado porque es la llave para acceder, en realidad, a todos nuestros servicios web en Azure. Por eso deberíamos evitar usarla o solo hacerlo si es una suscripción Azure personal, que vamos a usar solo nosotros.

La menos evidente (o más rebuscada) es la más correcta y aquí te explico cómo gestionarla.

¡Espero que te resulte útil!