Cómo desplegar Terraform de Azure Container Instances (ACI)
Vamos a explorar cómo desplegar Azure Container Instances (ACI) utilizando Terraform. Como ya hemos comentado en varias ocasiones en este blog, ACI es un servicio fundamental de Azure para ejecutar contenedores Docker sin necesidad de gestionar máquinas virtuales subyacentes. Ofrece una solución rápida, sencilla y escalable para aplicaciones basadas en contenedores.
En esta guía, detallaré los pasos necesarios para configurar y desplegar ACI de manera eficiente y eficaz con Terraform, maximizando los beneficios de la automatización y la reproducibilidad que ofrece la infraestructura como código.
Esta guía cubre todos los aspectos básicos y esenciales, desde la creación de un grupo de recursos y una red virtual, hasta el despliegue de las instancias de contenedores. En una futura publicación, profundizaremos en la incorporación de funcionalidades adicionales y configuraciones más avanzadas. No obstante, para un despliegue sencillo y funcional, esta guía ofrece todo lo necesario.
Requisitos Previos
Necesitas tener instalado Terraform CLI en tu máquina local. Si es la primera vez que utilizas Terraform para desplegar recursos en Microsoft Azure, te recomiendo consultar este enlace.
Un editor de texto o un IDE de tu preferencia (recomiendo Visual Studio Code con la extensión de Terraform).
Declarar el Proveedor de Azure en Terraform
El archivo provider.tf en Terraform se utiliza para especificar y configurar los proveedores utilizados en tu configuración. Un proveedor es un servicio o plataforma donde se gestionarán los recursos. Esto puede ser un proveedor en la nube como Microsoft Azure, AWS, Google Cloud, etc.
Este archivo es importante porque indica a Terraform qué API de proveedor utilizar para crear, actualizar y eliminar recursos. Sin él, Terraform no sabría dónde gestionar tus recursos.
Importante: Terraform ahora requiere un ID de suscripción explícito en la configuración del proveedor para una gestión de infraestructura más clara, predecible y segura en entornos de nube complejos.
Despliegue de recursos de Azure usando Terraform
En el caso del despliegue de Azure Container Instances (ACI), el archivo main.tf contiene los siguientes componentes clave:
azurerm_resource_group: Este bloque crea el grupo de recursos de Azure donde se desplegarán el resto de los recursos.
azurerm_virtual_network: Define la red virtual (VNet) de Azure, que proporciona un entorno de red aislado para tus recursos.
azurerm_subnet: Define las subredes dentro de la red virtual, permitiendo segmentar la red. Utiliza
local.flattened_subnetspara iterar sobre la configuración de las subredes.azurerm_container_group: Configura las instancias de contenedor de Azure, especificando parámetros como la imagen, CPU, memoria y configuración de red. Soporta múltiples contenedores dentro de un mismo grupo mediante
for_eachbasado envar.aci_instances.image_registry_credential: Es necesario cuando se extraen imágenes de contenedor desde el repositorio de Docker Hub. Ayuda a evitar los límites de extracción de imágenes públicas, ya que la autenticación incrementa esos límites
Declaración de variables de entrada
El archivo variables.tf define las variables usadas en main.tf. Estas variables permiten una mayor flexibilidad y reutilización del código.
En este ejemplo, las variables definidas incluyen:
subscription_id: Utilizado para pasar dinámicamente el ID de suscripción de Azure a Terraform, mejorando la flexibilidad y seguridad.
resource_group_name: Variable tipo cadena para especificar el nombre del grupo de recursos de Azure donde se desplegarán todos los recursos.
resource_group_location: Especifica la ubicación o región en la que se creará el grupo de recursos.
tags: Mapa de cadenas clave-valor para asignar etiquetas a los recursos creados en Azure. Por ejemplo, se puede usar
Terraform = truepara indicar que el recurso se desplegó con Terraform.networks: Es un mapa de objetos, cada uno representando la configuración de una red virtual, incluyendo su espacio de direcciones y una lista de subredes.
aci_instances: Mapa de objetos, cada uno representando la configuración de una instancia ACI. Incluye propiedades básicas como nombre, imagen, CPU, memoria, y otras más avanzadas como puertos, protocolo, accesibilidad pública, política de reinicio y etiqueta DNS. Soporta múltiples contenedores por instancia.
Credenciales de Docker Hub: Estas variables son opcionales. Aquí se pueden definir las credenciales de acceso a Docker Hub para evitar errores al acceder a imágenes públicas debido a los límites de extracción.
Declaración de valores de salida
El archivo output.tf en Terraform extrae y muestra información sobre los recursos creados o gestionados por tu configuración. Estos outputs se definen con la palabra clave output y pueden ser útiles para el usuario, para otras configuraciones de Terraform o para su uso programático en scripts u otras herramientas.
En este ejemplo, el archivo output.tf devuelve información sobre el grupo de recursos, redes virtuales, subredes e instancias de Azure Container Instances (ACI) creadas.
Una vez que Terraform haya aplicado tu configuración, mostrará los valores de salida definidos.
Ejecución del despliegue con Terraform
Ahora que has declarado correctamente los recursos, es momento de realizar los siguientes pasos para desplegarlos en tu entorno de Azure:
Inicialización: Ejecuta el comando
terraform init. Esto inicializa el directorio de trabajo que contiene los archivos.tf, descarga el proveedor especificado enprovider.tfy configura el backend de Terraform. Si quieres saber más sobre este paso, consulta [este enlace].Planificación: A continuación, ejecuta
terraform plan. Este comando genera un plan de ejecución y muestra las acciones que realizará Terraform para alcanzar el estado deseado. Te permite revisar los cambios antes de aplicarlos.Aplicación: Cuando estés satisfecho con el plan, ejecuta
terraform apply. Este comando implementará las modificaciones necesarias para alcanzar el estado deseado de la infraestructura. Antes de aplicar cualquier cambio, se te pedirá confirmación.Inspección: Tras aplicar los cambios, puedes usar
terraform showpara ver el estado actual de tu infraestructura.Destrucción (opcional): Cuando ya no se necesita un proyecto o los recursos han quedado obsoletos, puedes usar el comando
terraform destroy. Esto eliminará todos los recursos creados por Terraform.