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.
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».
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.
En este punto, disponemos de un slot de producción y otro para el staging. Podemos comprobar, como cada slot tiene su propia URL:
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.