Despliegue Azure Web App Para Contenedores Con Terraform

Una Web App es un servicio en el cual ponen a disposición una plataforma previamente configurada para alojar aplicaciones web, APIs tipo REST y Back Ends para aplicaciones móviles. Tales aplicaciones pueden estar desarrolladas en cualquier lenguaje conocido como puede ser .Net, Java, Ruby, NodeJS, Python, PHP, entre otros.

Una de las ventajas de estos servicios es que permiten escalar el tamaño de recursos que la Web App necesita con facilidad y le evitan a los desarrolladores de software y empresas tener que instalar y administrar un entorno completo de sistema operativo, base de datos e intérpretes de lenguajes.

Actualmente la tendencia en los desarrollos web modernos está usando Docker containers para “dockerizar” sus aplicaciones. El uso en entornos donde se está creando una arquitectura de microservicios, es probable que esos despliegues los estén haciendo con herramientas de automatización como pueden ser AKS o Terraform.

En este ejemplo nos centraremos en la automatización con Terraform. Actualmente si deseamos usar Azure Web Apps como host de nuestro contenedor, la documentación de Terraform no nos da toda la información necesaria para poder hacerlo. Por ello a continuación os facilito un ejemplo de cómo poder configurarlo:

 1# Use the Azure Resource Manager Provider
 2provider "azurerm" {
 3  version = "~> 1.15"
 4}
 5
 6# Create a new Resource Group
 7resource "demo_resource_group" "group" {
 8  name     = "webapp-containers-demo"
 9  location = "westeurope"
10}
11
12# Create an App Service Plan with Linux
13resource "azurerm_app_service_plan" "appserviceplan" {
14  name                = "${demo_resource_group.group.name}-plan"
15  location            = "${demo_resource_group.group.location}"
16  resource_group_name = "${demo_resource_group.group.name}"
17
18  # Define Linux as Host OS
19  kind = "Linux"
20
21  # Choose size
22  sku {
23    tier = "Standard"
24    size = "S1"
25  }
26
27  properties {
28    reserved = true # Mandatory for Linux plans
29  }
30}
31
32# Create an Azure Web App for Containers in that App Service Plan
33resource "azurerm_app_service" "dockerapp" {
34  name                = "${demo_resource_group.group.name}-dockerapp"
35  location            = "${demo_resource_group.group.location}"
36  resource_group_name = "${demo_resource_group.group.name}"
37  app_service_plan_id = "${azurerm_app_service_plan.appserviceplan.id}"
38
39  # Do not attach Storage by default
40  app_settings {
41    WEBSITES_ENABLE_APP_SERVICE_STORAGE = false
42
43    /*
44    # Settings for private Container Registires  
45    DOCKER_REGISTRY_SERVER_URL      = ""
46    DOCKER_REGISTRY_SERVER_USERNAME = ""
47    DOCKER_REGISTRY_SERVER_PASSWORD = ""
48    */
49  }
50
51  # Configure Docker Image to load on start
52  site_config {
53    linux_fx_version = "DOCKER|appsvcsample/static-site:latest"
54    always_on        = "true"
55  }
56
57  identity {
58    type = "SystemAssigned"
59  }
60}

Para asegurarnos que se configura correctamente debe de prestar especial atención a que las siguientes propiedades estén correctamente definidas en su archivo de configuración, de lo contrario no funcionará correctamente el despliegue:

1reserved = true
2WEBSITES_ENABLE_APP_SERVICE_STORAGE = false

Saludos!