Azure Container Instances: el servicio serverless para tus contenedores Docker

El mes pasado te mostré lo fácil que es desplegar tus contenedores en Azure App Service, pero lo cierto es que era una pequeña demostración de lo que podemos hacer con contenedores dentro de Microsoft Azure. En este artículo te voy a contar otra opción llamada Azure Container Instances, el servicio serverless para tus contenedores Docker.

Azure Container Instances: sólo pagas por lo que ejecutas

La idea de este servicio es que no necesitas provisionar ningún tipo de infraestructura antes de ejecutar tus contenedores. Simplemente le dices a ACI qué quieres ejecutar y él por debajo gestiona la infraestructura que necesita. Lo bueno de este servicio es que solo pagas cuando tu contenedor se está ejecutando, en un modelo de facturación por segundo, por lo que si necesitas ejecutar un contenedor por 20 minutos sólo pagarás por esos 20 minutos que el contenedor se ha estado ejecutando. No tengo que preocuparme más que en parar el contenedor, pero no en eliminar la infraestructura que se ha generado por detrás. Aunque suena realmente cool, este servicio no es para todos los escenarios. Por ejemplo, no encajaría bien para un escenario donde necesitamos ejecutar contenedores de manera permanente, como un servidor web o una base de datos, ya que el tipo de facturación haría que fuera más caro que otras opciones. Sin embargo, podría ser interesante usarlo para agentes de integración continua, para experimentos o laboratorios, load tests, procesos batch, es decir, todos aquellos escenarios que sean efímeros.

El ejemplo

Para ver el servicio en funcionamiento, voy a crear a través de Azure CLI un contenedor con la imagen MediaWiki, para que veas lo sencillo que es comenzar con él.

#Create an azure-cli container 
docker run -it --rm microsoft/azure-cli sh

#Login
az login

#Select your subscription account
az account set -s "<YOUR SUBSCRIPTION NAME>"

#Create a resource group
RESOURCE_GROUP="AciMediaWikiDemo"
LOCATION="northeurope"

#Create a ACI container group
az group create -n ${RESOURCE_GROUP} -l ${LOCATION}

#Create a container group
CONTAINER_GROUP_NAME="media-wiki"

az container create -g ${RESOURCE_GROUP} -n ${CONTAINER_GROUP_NAME} --image mediawiki --ports 80 --ip-address public --dns-name-label media-wiki-aci

#See container logs
az container logs -n ${CONTAINER_GROUP_NAME} -g ${RESOURCE_GROUP}

#Delete the container in order to prevent more charges
az container delete -n ${CONTAINER_GROUP_NAME} -g ${RESOURCE_GROUP} -y

#Delete the resource group
az group delete -n ${RESOURCE_GROUP} -y

Al principio del script, de manera opcional, puedes usar un Azure CLI de usar y tirar como te conté ayer. Inicia sesión con tu cuenta de Microsoft Azure y crea un grupo de recursos donde vas a alojar tu servicio de Azure Container Instances. Todos los contenedores deben pertenecer a un container group, por lo que he creado uno llamado media-wiki donde voy a desplegar mi contenedor con la imagen MediaWiki. Por último, utiliza az container create donde se especifican los valores que va a utilizar ACI para generar el contenedor. Una vez creado, puedes acceder a él a través de la etiqueta que hayas elegido como nombre del DNS, seguido de azurecontainer.io. En mi caso sería media-wiki-aci.northeurope.azurecontainer.io.

También te dejo la forma de ver los logs del contenedor que acabas de crear, a través de az container logs.

Por último, no te olvides de eliminar tu contenedor, para pagar solo por el tiempo que realmente necesites que se ejecute.

¡Saludos!