Automatiser le déploiement d’un AKS avec Terraform et Azure DevOps !

Aujourd’hui je vous propose de configurer un pipeline Azure DevOps pour exécuter un script Terraform afin de provisionner un cluster Azure Kubernetes Services (AKS) !

IT Process Automation in the Cloud Age - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Pour la prise en main de Terraform et la compréhension de son contenu je vous invite à consulter cet article qui servira de base à notre tuto du jour 🙂 Pour une approche plus globale de Terraform avec Azure je vous renvoie à cette vidéo (et sa suite) de Stanilas Quastana.

Les élements présentés ici sont tous disponible dans ce répo GitHub.

Terraform

Importer les fichiers

Dans mon projet Azure DevOps fraichement créé, onglet Repos j’importe les 6 fichiers disponibles :

1 1024x612 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Nous avons :

  • output.tf : permet de spécifier les informations renvoyés par Terraform à l’issu du déploiement
  • provider.tf : spécifie le provider cible : ici azurerm
  • variables.tf : la définition des variables utilisées dans le script
  • variables.tfvars : l’affectation de ces même variables
  • main.tf : le script Terraform en lui même

Le contenu précis de ces fichiers est expliqué ici. Voyons maintenant les parties importantes de ces scripts pour notre automatisation.

Les variables

Dans le fichier .tfvars nous avons ceci :

2 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

On set les variables avec des valeurs assez abstraites pour le moment, nous y reviendrons tout à l’heure !

Le main.tf

Ce script contient un certain nombres de choses.

La description du Backend pour le stockage du tfstate :

3 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

La description du ressource group qui contiendra nos ressources Azure :

4 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

La définition d’un Azure Container Registry :

5 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

La définition du cluster Azure Kubernetes Services :

6 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

On remarque dans ce script l’utilisation des variable définies dans le tfvars au moyen de : ${var.nomDeLaVariable}

Configurer Azure DevOps

Service Connection

Avant de créer notre pipeline Azure DevOps nous aller configurer un service connection à notre tenant Azure. Pour cela dans les Project settings sélectionner l’onglet Service Connections.

12 1024x406 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Puis ajouter votre service connexion. Vous devrez renseigner les informations suivantes :

14 516x1024 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Pour créer un service principal vous pouvez utiliser cette commande dans une fenêtre powershell ou le shell du portail Azure :

az ad sp create-for-rbac --name ServicePrincipalName

Pour obtenir le tenantId et le subscriptionId utilisé actuellement vous pouvez utiliser cette commande :

az account show

Le pipeline

Il faut maintenant créer notre Pipeline pour exécuter ce script Terraform. Dans l’onglet Pipeline, choisir New Pipeline :

7 1024x108 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Mon code est ici stocké dans mon repo Azure DevOps mais il pourrait tout à fait être utilisé depuis mon repo GitHub.

8 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Je choisi mon repository local :

9 1024x394 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Ici le pipeline est déja écrit, il faut donc le réutiliser :

10 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Et sélectionner le fichier yml correspondant, ici nommé sobrement azure-pipelines.

11 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Les variables du pipeline

Maintenant que notre pipeline est créé et avant de le détailler et de l’exécuter nous allons lui fournir les variables dont il aura besoin à l’execution. Pour cela, sélectionner Variables :

27 1024x329 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Vous allez devoir créer et valoriser l’ensemble de ces variables :

15 1 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Ici vous avez du remarquer que toutes mes variables déclarées ont le même nom que la valeur affectée à la variable Terraform dans mon fichier tfvars modulo les deux underscores positionnés avant et après le nom :

aks-cluster-name = __aks-cluster-name__

Nous verrons très vite comment le lien entre ces variables AzureDevOps et le Terraform s’opère.

Le contenu du pipeline

Si on s’intéresse maintenant au pipeline en lui même on y trouve tout d’abord la copie des fichiers dans un espace de travail temporaire :

17 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Gestion des variables

Etapes très importante ! Ici nous allons parcourir les fichiers tfvars et provider.tf pour y trouver __ positionnées autour d’un nom de variable. Exemple :

__aks-cluster-name__

Quand on en trouve un on remplace le aks-cluster-namepar la valeur renseignée précédemment dans la variable du pipeline :

18 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Ainsi __aks-cluster-name__ devient “clustervacd”.

On passe ensuite à la récupération de la dernière version de Terraform précisée dans une variable également :

19 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Il est maintenant temps de voir les 3 étapes nécessaire à Terraform pour déployer mon infra.

Init

Le Init permet de tester la connexion à l’environnement cible, ici ma souscription Azure et mon backend. Ce backend, un storage account Azure doit bien sur avoir été créé au préalable.

20 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Plan

Le plan permet de comparer le contenu décrit dans le script à son infra actuelle (via le tfstate). Ainsi Terraform obtient une liste d’élément à supprimer / modifier / créer.

21 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Apply

L’étape Apply permet de réaliser le déploiement de notre infrastructure sur Azure. Ici aussi j’ai besoin de passer dans commandOptions le nom de mon fichier de variables.

22 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Une fois mon pipeline enregistré, un build démarre :

23 1024x558 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Le pipeline est en cours d’execution :

24 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Si vous cliquez sur l’étape Deploy vous obtiendrez les détails de l’exécution du traitement :

25 1024x553 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Une fois l’execution achevée, vous pourrez vérifier sur le portail Azure le bon déploiement de votre ressource group contenant un Azure Container Registry et un cluster Azure Kubernetes Services :

26 1024x323 - Automatiser le déploiement d'un AKS avec Terraform et Azure DevOps !

Et c’est terminé pour cette automatisation du déploiement d’un cluster AKS avec Terraform et Azure DevOps !

Dans un prochain article, nous verrons comment configurer un pipeline d’intégration / déploiement continu d’une application sur ce cluster AKS fraichement créé !

A bientôt !

Thomas

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *