Como desplegar un Azure App Service sin tiempos de caída

Es muy probable que si estamos realizando y desplegando una API o una web usando App Services, necesitemos que nuestro producto este siempre on-line, sin dejar de dar servicio en ningún momento durante el proceso de despliegue. También es posible que quieras probar manualmente que todo funciona correctamente, pero sin que esto afecte a los usuarios en producción. O simplemente te puede interesar realizar pruebas A/B y redirigir parte del trafico entrante a distintos servicios. Para ello, Azure App Service ofrece los Staging Slots.

Hemos de tener en cuenta que esta característica no esta disponible en todos los niveles del servicio, por lo que en los niveles gratuitos, compartidos y el básico no podrás utilizarlo. También es algo normal, ya que es una característica útil en entornos productivos.

Listado de las características incluidas en el app service, entre ellas se encuentra staging slot, en este caso permite hasta cinco slots

Vamos a ver como crear y configurar un App Service que no deje de dar servicio durante un despliegue.

Configuración en Azure

Lo primero será crear un app service y acceder a la sección “Deployment slots”.

Menú en portal de azure donde una de las opciones es Deployment slots

Una vez dentro de la configuración de Slots, solo tienes que añadir uno nuevo y asignarle un nombre (en nuestro caso le he puesto “staging”). Le decimos si queremos que clone los settings y lo creamos.

Pantalla de configuración de los slots, uno de los punto de menú es añadir slot

Pantalla de creación del slot. Hay que introducir el nombre que le ponemos, en nuestro caso staging y la configuración de clonado de configuración

En este punto, disponemos de un slot de producción y otro para el staging. Podemos comprobar, como cada slot tiene su propia URL:

Slot de producción
Slot de staging

Además, esta configurado para que todo el trafico vaya al slot de producción por defecto. Lo que hemos de hacer ahora, es desplegar sobre el slot de staging, y una vez realizadas las comprobaciones pertinentes, hacer un intercambio entre staging y producción. Cuando cambiemos entre slots internamente re-direccionara y no tendremos ni un segundo de downtime. Vamos a ver como hacer esto con Azure DevOps.

Configuración del despliegue con Azure DevOps

Para el ejemplo que estamos viendo, he creado una release que despliega una página web en un web-app. Como se puede apreciar en la imagen, la release es muy sencilla. Por una lado una tarea que desplegará sobre el slot, y finalmente, otra tarea que realizará el swap entre los slots. Para el ejemplo he puesto una intervención manual, simplemente para probar el funcionamiento, pero no sería necesario.

Vamos a ver la configuración de las tareas.

La primera de las tareas es la que se encargará de desplegar en el app service. En este punto tan solo hemos de indicar que se ha de desplegar sobre un slot e indicar sobre cual, tal y como se puede apreciar en la siguiente imagen:

Despúes, una vez finalizado el despliegue en el slot, indicaremos que se realice un swap con la tarea “Azure app service manage” e indicando la acción de “Swap slots”:

Finalmente solo hay que indicar el slot de origen y en nuestro caso marcamos que realice el swap sobre el slot de producción, pero podría ser sobre cualquier otro que tengamos creado.

¡Y listo!, hemos desplegado la web con cero downtime.

Como preparar la certificación Azure Solutions Architect Expert

Recientemente me he certificado como Microsoft Certified: Azure Solutions Architect Expert y me gustaría contar por aquí como ha sido la experiencia y que recursos he utilizado para formarme, tal vez a alguien le ayude en algo.

Sigue leyendo Como preparar la certificación Azure Solutions Architect Expert

Azure SQL Server ahora en modo serverless

El lunes pasado (06/05/2019) se anunció la versión en preview de un nuevo modo de facturación para Azure SQL Server basado en el consumo y no el el aprovisionamiento. De este modo, se suma a Azure API Management que ya incluyo este modo de facturación (también en preview, de momento) el pasado diciembre.

Este nuevo modo, puede ser realmente interesante en algunos escenarios. Voy a ver si durante la semana puedo probarlo y comentar en una entrada hablando sobre el tema.

https://docs.microsoft.com/es-es/azure/sql-database/sql-database-serverless

https://azure.microsoft.com/en-us/blog/announcing-azure-api-management-for-serverless-architectures/

La paradoja de la ballena y las bicicletas

http://badtasteink.tumblr.com/post/45055022648

Desde hace algún tiempo, muchas empresas en su proceso de transformación digital están migrando a la nube. En mi caso trabajo con Azure y uno de los problemas con los que me encuentro bastante a menudo es que al vender como una de la cualidades de la nube la escalabilidad de esta, el cliente y/o todas las personas no técnicas (y algunas técnicas) que de alguna forma están relacionados con el proyecto, creen que todo sistema alojado en la nube va a escalar mágicamente con tan solo darle a un botón. Y claro, esto al final se convierte en problemas de rendimiento y de costes.

Te encuentras problemas del estilo: – Oye, que la base de datos no da mas de sí y por eso va todo lento. – No pasa nada, escala. Así lo resolvemos, ¿no? – Ya si, pero vamos a mirar por que esta ya tan al límite, no debería con este volumen de uso… – Tiene coste para nosotros… – Si, claro, tenemos que revisa… – Pues no se puede, escala. – Pero llegará un momento que… – Escala.

Sigue leyendo La paradoja de la ballena y las bicicletas

Tareas de Azure DevOps: ARM Outputs

Voy a iniciar una serie de entradas para ir comentando algunas tareas de Azure DevOps que por un motivo u otro me han facilitado la vida. Voy a empezar con ARM Outputs. Esta tarea no viene por defecto y hay que descargarla e instalarla desde el Market.

Esta tarea nos permite obtener valores que hemos definido como outoputs en una plantilla ARM para poder utilizarlos posteriormente como variables en las siguientes tareas. Por ejemplo, podemos definir como outputs las distintas claves de servicios creados por ARM, que después podemos usar para insertar en valores de settings.

Sigue leyendo Tareas de Azure DevOps: ARM Outputs

Como obtener las direcciones IP de salida en un APP Service Plan de Azure

Una nueva píldora. Muchas de las cosas que pongo en el blog, son temas con los que he tenido que lidiar y el hecho de escribirlos aquí me permite tener una pequeña chuleta de la que poder titar en caso de necesidad. Hoy he necesitado saber las IP de salida de un app service, y así es como lo he podido saber.

Cada app service tiene un numero de IP’s asignadas, que ademas no puedes conocer con antelación cual de ellas se va a usar, por lo que si necesitas las IP por ejemplo para dejarlas pasar por un firewall, tendrás que añadir todas las que tiene el app service asignadas. 

Sigue leyendo Como obtener las direcciones IP de salida en un APP Service Plan de Azure

Azure Logic Apps. Como crearlas, gestionarlas y desplegarlas con Visual Studio

El otro día fui a la .Net Conf Barcelona 2018 y pude asistir a la charla que dieron @tonirecio y @barbosound en la que hablaban sobre como habían usado Azure logic apps para automatizar ciertas tareas recurrentes en su organización.

Logic apps es uno de esos temas en los que llevaba tiempo pensando, pero ya sabes, el tiempo es limitado y nunca me ponía a ello, por lo que esta charla me vino de maravillas para conocer de que va el tema e interesarme por ellas.

Azure Logic Apps te permite crear flujos de trabajo y procesos sin tirar una sola linea de código. Es el concepto de no tirar una sola linea de código lo que me tiraba un poco para atrás a la hora de ponerme con ello, pero me he dado cuenta de que bien usado y con cabeza, puede ser una herramienta muy potente que nos puede ahorrar muchas horas de trabajo y algún que otro dolor de cabeza. 

Como ejemplo, he creado una logic app que “escucha” Twitter y si detecta un hastag concreto, captura el Tweet y me lo envía por correo. Lo he hecho en cinco minutos. Por muy rápido que seas picando, seguro que tardas mas.

Sigue leyendo Azure Logic Apps. Como crearlas, gestionarlas y desplegarlas con Visual Studio

Azure – Listar y exportar todos los recursos de un grupo de recursos con Azure PowerShell

Una pequeña píldora (y una chuleta para el futuro) antes de entrar en agosto. Me he encontrado ante la situación de  tener que hacer un pequeño inventario de todos los recursos que existen en los distintos entornos creados, tanto para tenerlos controlados como para comprobar que todos los entornos son iguales. Desde el portal de Azure no existe una opción para exportar el listado de recursos a un .csv, cosa que facilitaría la tarea. Pero podemos hacerlo con Azure PowerShell.

Sigue leyendo Azure – Listar y exportar todos los recursos de un grupo de recursos con Azure PowerShell