Colas Mérand
08/06/2025
Azure
Terraform
ServiceNow
5 minutes
Automatisation du déploiement de ressources Azure avec Terraform via ServiceNow : Guide complet
Dans un monde où l'agilité technologique est devenue un avantage concurrentiel majeur, l'automatisation des processus d'infrastructure IT représente un enjeu stratégique pour les entreprises. L'intégration de ServiceNow, Azure DevOps et Terraform offre une solution puissante pour rationaliser le déploiement des ressources cloud. Cet article explore comment mettre en place un système automatisé permettant de déployer des ressources Azure via Terraform en réponse à des requêtes ServiceNow.
Pourquoi automatiser le déploiement de ressources cloud ?
L'automatisation du déploiement d'infrastructure présente de nombreux avantages :
- Réduction des délais : passage de plusieurs jours à quelques minutes pour la mise à disposition de ressources
- Standardisation : élimination des erreurs humaines et respect systématique des bonnes pratiques
- Traçabilité : historique complet des modifications d'infrastructure
- Gouvernance renforcée : application automatique des politiques de sécurité et de conformité
- Optimisation des coûts : allocation précise des ressources selon les besoins réels
Les composants clés de notre solution
ServiceNow : le point d'entrée
ServiceNow est une plateforme ITSM (IT Service Management) qui permet de gérer les demandes de service IT via un portail centralisé. Dans notre architecture, ServiceNow joue le rôle de point d'entrée où les utilisateurs peuvent soumettre leurs demandes de ressources cloud via un formulaire standardisé.
Terraform : l'Infrastructure as Code
Terraform est un outil d'Infrastructure as Code (IaC) qui permet de définir et provisionner l'infrastructure à l'aide de fichiers de configuration déclaratifs. Ses principaux atouts sont :
- La gestion de l'état de l'infrastructure
- La prévisualisation des changements avant application
- La prise en charge de multiples fournisseurs cloud
- La modularité et la réutilisabilité du code
Azure DevOps : l'orchestrateur
Azure DevOps fournit les outils nécessaires pour implémenter des pipelines CI/CD (Intégration Continue/Déploiement Continu) qui orchestrent le processus de déploiement. Il permet également de gérer le code Terraform dans des dépôts Git, facilitant ainsi la collaboration et le versionnement.
Architecture de la solution
Voici comment ces trois technologies s'articulent pour créer un workflow automatisé :
Soumission de la demande : Un utilisateur crée une requête dans ServiceNow pour demander de nouvelles ressources Azure.
Validation et enrichissement : La demande passe par un processus d'approbation et d'enrichissement dans ServiceNow.
Déclenchement du pipeline : Une fois approuvée, ServiceNow déclenche un pipeline dans Azure DevOps via une API REST.
Exécution de Terraform : Le pipeline Azure DevOps récupère le code Terraform approprié et l'exécute avec les paramètres fournis par ServiceNow.
Déploiement des ressources : Terraform provisionne les ressources demandées dans Azure.
Mise à jour du statut : Le pipeline met à jour le statut de la demande dans ServiceNow.
Implémentation détaillée
1. Configuration de ServiceNow
Pour commencer, nous devons créer un formulaire de demande personnalisé dans ServiceNow qui capturera toutes les informations nécessaires au déploiement :
- Type de ressource (VM, base de données, etc.)
- Configuration technique (taille, capacité, région)
- Informations de facturation (centre de coûts, projet)
- Durée de vie prévue des ressources
Nous configurons ensuite un workflow d'approbation adapté à la gouvernance de l'entreprise et créons un script d'intégration qui appellera Azure DevOps lorsque la demande sera approuvée.
2. Préparation du code Terraform
Le code Terraform doit être modulaire pour s'adapter aux différents types de demandes. Nous recommandons d'organiser votre code comme suit :
module "azure_vm" {
source = "./modules/azure_vm"
name = var.vm_name
resource_group_name = var.resource_group_name
location = var.location
vm_size = var.vm_size
admin_username = var.admin_username
admin_password = var.admin_password
# Autres paramètres...
}
Les variables seront injectées par le pipeline Azure DevOps en fonction des informations fournies dans la demande ServiceNow.
3. Configuration d'Azure DevOps
Dans Azure DevOps, nous créons un pipeline YAML qui sera responsable de l'exécution de Terraform :
trigger: none # Déclenché uniquement via API
pool:
vmImage: 'ubuntu-latest'
variables:
- group: terraform-secrets
steps:
- task: TerraformInstaller@0
inputs:
terraformVersion: '1.0.0'
- task: TerraformTaskV2@2
displayName: 'Terraform Init'
inputs:
provider: 'azurerm'
command: 'init'
backendServiceArm: '$(AZURE_SERVICE_CONNECTION)'
backendAzureRmResourceGroupName: '$(BACKEND_RESOURCE_GROUP)'
backendAzureRmStorageAccountName: '$(BACKEND_STORAGE_ACCOUNT)'
backendAzureRmContainerName: '$(BACKEND_CONTAINER)'
backendAzureRmKey: '$(BACKEND_KEY)'
- task: TerraformTaskV2@2
displayName: 'Terraform Plan'
inputs:
provider: 'azurerm'
command: 'plan'
environmentServiceNameAzureRM: '$(AZURE_SERVICE_CONNECTION)'
commandOptions: '-var-file="$(System.DefaultWorkingDirectory)/params.tfvars"'
- task: TerraformTaskV2@2
displayName: 'Terraform Apply'
inputs:
provider: 'azurerm'
command: 'apply'
environmentServiceNameAzureRM: '$(AZURE_SERVICE_CONNECTION)'
commandOptions: '-var-file="$(System.DefaultWorkingDirectory)/params.tfvars" -auto-approve'
4. Intégration ServiceNow - Azure DevOps
Pour connecter ServiceNow à Azure DevOps, nous utilisons l'API REST d'Azure DevOps. Voici un exemple de script ServiceNow qui déclenche le pipeline :
(function executeRule(current, previous /*null when async*/) {
try {
var request = new sn_ws.RESTMessageV2('Azure DevOps', 'Pipeline Trigger');
request.setRequestBody(JSON.stringify({
resources: {
repositories: {
self: {
refName: "refs/heads/main"
}
}
},
parameters: {
"resourceType": current.resource_type,
"resourceName": current.resource_name,
"resourceGroup": current.resource_group,
"location": current.location
// Autres paramètres...
}
}));
var response = request.execute();
var httpStatus = response.getStatusCode();
if (httpStatus == 200) {
current.work_notes = "Pipeline Azure DevOps déclenché avec succès.";
current.update();
} else {
current.work_notes = "Échec du déclenchement du pipeline. Code d'état : " + httpStatus;
current.update();
}
} catch (ex) {
current.work_notes = "Erreur lors du déclenchement du pipeline : " + ex.message;
current.update();
}
})(current, previous);
Bonnes pratiques et considérations
Sécurité
- Utilisez des identités gérées pour l'authentification entre les services
- Limitez les permissions au strict nécessaire (principe du moindre privilège)
- Chiffrez les variables sensibles dans Azure DevOps
- Mettez en place une validation des demandes pour éviter les configurations non conformes
Évolutivité
- Concevez votre solution pour qu'elle puisse évoluer avec les besoins de l'entreprise
- Utilisez des modules Terraform réutilisables pour différents types de ressources
- Prévoyez des mécanismes de mise à l'échelle automatique pour les ressources déployées
Maintenance
- Documentez rigoureusement l'architecture et les procédures
- Mettez en place une surveillance des déploiements
- Prévoyez des procédures de rollback en cas d'échec
- Automatisez les tests d'infrastructure
Retour d'expérience : cas concrets d'implémentation
Chez Platane, nous avons eu l'occasion de mettre en œuvre ce type d'architecture pour plusieurs clients, avec des résultats probants. Par exemple, pour un projet similaire à Epictory, nous avons implémenté une solution d'automatisation du déploiement d'infrastructure qui a permis de réduire le temps de mise en production de 3 jours à 45 minutes, tout en garantissant une conformité totale avec les standards de sécurité.
Notre expérience avec des projets comme Dealt nous a également permis de développer une expertise dans l'intégration de systèmes complexes, en particulier dans la mise en place de workflows automatisés entre différentes plateformes. La combinaison de notre savoir-faire en matière de développement d'API et d'automatisation d'infrastructure nous permet d'offrir des solutions sur mesure qui répondent précisément aux besoins spécifiques de chaque client.
Pour notre propre plateforme interne, nous avons également mis en place une infrastructure entièrement automatisée sur AWS, utilisant Terraform et des pipelines CI/CD, ce qui nous donne une compréhension approfondie des défis techniques et organisationnels liés à ce type de projet.
Conclusion
L'intégration de ServiceNow, Azure DevOps et Terraform offre une solution puissante pour automatiser le déploiement de ressources cloud. Cette approche permet non seulement de gagner en efficacité opérationnelle, mais aussi d'améliorer la gouvernance et la sécurité de l'infrastructure IT.
La mise en œuvre d'une telle solution nécessite une expertise dans plusieurs domaines : ITSM, DevOps, cloud computing et Infrastructure as Code. C'est précisément à l'intersection de ces compétences que se situe notre expertise chez Platane.
Vous envisagez d'automatiser le déploiement de vos ressources cloud ou de moderniser votre infrastructure IT ? Nous serions ravis d'échanger avec vous sur votre projet. Notre équipe d'experts peut vous accompagner à chaque étape, de la conception à la mise en œuvre, en passant par la formation de vos équipes.
N'hésitez pas à prendre rendez-vous via notre formulaire de contact pour discuter de vos besoins spécifiques. Chez Platane, nous croyons que la technologie doit être au service de vos objectifs métier, et nous mettons notre créativité et notre expertise technique à votre disposition pour concrétiser votre vision.
Intelligence artificielle et gestion de stocks en santé : les enjeux technologiques pour les pharmacies connectées
Comment créer une plateforme e-learning performante avec intelligence artificielle en 2024
Comment créer une plateforme d'abonnement sécurisée avec gestion de paiements récurrents et intelligence artificielle
N'hésitez pas à nous contacter.
Nous aussi et c'est évidemment sans engagement !