Déployer ZenML sur Azure avec Terraform

Publié le 2025-04-09 - James Kokou GAGLO

ZenML est un framework MLOps extensible pour créer des pipelines de machine learning prêts pour la production. Dans cet article, je vais vous expliquer comment j’ai déployé ZenML sur Azure en utilisant Terraform. Ce déploiement garantit une gestion sécurisée des secrets, un stockage persistant des bases de données et un stockage des artefacts dans l’écosystème Azure.

Prérequis

Avant de commencer, assurez-vous d’avoir les éléments suivants :

  • Un compte Azure
  • Terraform installé sur votre machine locale
  • Une connaissance de base de Terraform et Azure

Ce que fait ce déploiement

Ce script Terraform effectue les tâches suivantes :

  • ✅ Crée un groupe de ressources Azure
  • ✅ Déploie un espace de travail Azure Log Analytics pour la surveillance
  • ✅ Crée un environnement Azure Container Apps
  • ✅ Déploie un Azure Key Vault et stocke le mot de passe MySQL et la connexion au stockage
  • ✅ Crée un conteneur Azure Blob Storage pour les artefacts ZenML
  • ✅ Déploie un serveur MySQL flexible Azure avec une base de données zenml
  • ✅ Déploie ZenML sur Azure Container Apps avec des variables d’environnement

Configuration de Terraform

Providers

Le fichier providers.tf spécifie le fournisseur Azure et sa version :

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.43.0"
    }
  }
}

provider "azurerm" {
  features {}
}

Variables

Le fichier variables.tf définit toutes les variables utilisées dans le déploiement. Par exemple :

variable "resource_group_name" {
  type    = string
  default = "zenml-resource-group"
}

variable "location" {
  type    = string
  default = "West Europe"
}

Ressources principales

Le fichier main.tf contient les ressources principales pour le déploiement. Par exemple :

  • Groupe de ressources
resource "azurerm_resource_group" "rg" {
  name     = "rg-${local.prefix_location}-${var.resource_group_name}"
  location = var.location
}
  • Serveur MySQL flexible Azure
resource "azurerm_mysql_flexible_server" "mysql" {
  name                   = "my-${local.prefix_location}-${var.mysql_server_name}"
  resource_group_name    = azurerm_resource_group.rg.name
  location               = var.location
  administrator_login    = var.mysql_admin_username
  administrator_password = var.mysql_admin_password
  sku_name               = "B_Standard_B1ms"
  version                = "8.0.21"
  backup_retention_days  = 7
  delegated_subnet_id    = azurerm_subnet.mysql_subnet.id
  private_dns_zone_id    = data.azurerm_private_dns_zone.infra_mysql_zone[0].id
}
  • Déploiement de ZenML
resource "azurerm_container_app" "zenml_app" {
  name                         = "ca-${local.prefix_location}-${var.container_app_name}"
  resource_group_name          = azurerm_resource_group.rg.name
  container_app_environment_id = azurerm_container_app_environment.env.id
  revision_mode                = "Single"

  ingress {
    external_enabled = true
    target_port      = 8080
    traffic_weight {
      percentage      = 100
      latest_revision = true
    }
  }

  template {
    container {
      name   = "zenml-server"
      image  = "zenmldocker/zenml-server:0.80.0"
      cpu    = 1
      memory = "2Gi"
      env {
        name  = "ZENML_STORE_URL"
        value = "mysql://${var.mysql_admin_username}:${azurerm_key_vault_secret.mysql_password.value}@${azurerm_mysql_flexible_server.mysql.fqdn}:3306/zenml?ssl=true"
      }
    }
  }
}

Sorties

Le fichier outputs.tf fournit des sorties utiles après le déploiement :

output "zenml_server_url" {
  value = azurerm_container_app.zenml_app.latest_revision_fqdn
}

output "mysql_server_fqdn" {
  value = azurerm_mysql_flexible_server.mysql.fqdn
}

Exécution du déploiement

  1. Initialisez Terraform :

    terraform init
    
  2. Planifiez le déploiement :

    terraform plan -out plan.txt -var-file values.tfvars
    
  3. Appliquez le déploiement :

    terraform apply plan.txt
    

Conclusion

Ce script de déploiement simplifie le processus de mise en place de ZenML sur Azure. Il exploite l’infrastructure robuste d’Azure et les capacités d’automatisation de Terraform pour créer un environnement évolutif et sécurisé pour vos pipelines MLOps. 🚀

Vous pouvez retrouver tout le script terraform dans le dépôt git.

N’hésitez pas à personnaliser le script pour répondre à vos besoins spécifiques. Bon déploiement !

S'inscrire à ma liste de diffusion

Abonnement réussi

Erreur lors de l'inscription.

Nous ne communiquerons jamais votre adresse électronique à qui que ce soit.