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
-
Initialisez Terraform :
terraform init
-
Planifiez le déploiement :
terraform plan -out plan.txt -var-file values.tfvars
-
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 !