Colas Mérand
08/06/2025
Azure
Terraform
ServiceNow
5 minutes
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.
L'automatisation du déploiement d'infrastructure présente de nombreux avantages :
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 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 :
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.
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.
Pour commencer, nous devons créer un formulaire de demande personnalisé dans ServiceNow qui capturera toutes les informations nécessaires au déploiement :
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.
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.
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'
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);
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.
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.