Lorsque l’on parle d’infrastructure as Code, on imagine qu’écrire des fichiers JSON représentant une infrastructure est la seule étape. Pourtant il est nécessaire de pouvoir appliquer les mêmes principes de test que l’on trouve dans le développement logiciel à ce que l’on doit déployer sur Azure. Dans cette session nous découvrirons comment effectuer des tests sur les templates ARM et comment interpréter les résultats. Nous nous intéresserons à ARM Template Toolkit (arm-ttk) présenter à MS Ignite 19 et comment l’utiliser et l’étendre pour améliorer la qualité du code et du travail d’équipe. Pour finir nous regardons la façon d’intégrer cela dans une chaine de déploiement.
4. Agenda
Les déploiements ARM
Les possibilités de tests
ARM-TTK
Test cases
Scénarios pour l’intégration continue
Live demo https://github.com/omiossec/arm-ttk-demo
5. Les déploiements ARM
Les Templates ARM sont des documents « JSON » permettant de décrire l’état souhaité de
vos ressources Azure (aka.ms/justLearnARM).
Tout comme Terraform, les templates ARM permettent de faire de « l’Infrastructure As
Code ».
Dès lors que l’on parle de code, il est souhaitable d’adopter les mêmes pratiques utiliser
pour les applications :
S’assurer que le code est fonctionnel
Valider que le code respect les bonnes pratiques
Vérifier que le code ne présente pas de problèmes de sécurités
S’assurer que le code corresponde a ce qui a été demandé
6. Les méthodes de tests
Les tests sont faits en général avec le cmdlet :
Test-AzResourceGroupDeployment
Mais il y a plusieurs limitations :
Peu d’information, indique seulement si le template est capable d’être déployer
Nécessite une connexion à Azure et un groupe de ressources
Ne répond pas à tous les besoins (best practices, sécurités, …)
7. Azure Resource Manager Template Toolkit (arm-ttk)
Annoncé à la MS Ignite 2019 (brk3223)
Toujours en preview, disponible sur GitHub https://github.com/Azure/arm-ttk
Module PowerShell compatible PS Core (donc sur Windows/Linux/Mac)
Il n’est pas disponible (encore) sur la PowerShell Gallery
Son premier but n’est pas de faire une analyse de syntaxe (pas un outil de test unitaire)
mais d’évaluer la prise en compte des bonnes pratiques.
Le module n’utilise pas de connexion à Azure.
Il analyse les fichiers json d’un chemin d’un dossier (si il existe un azdeploy.json) ou d’un
template à partir de testcases
8. Les testcases
adminUsername Should Not Be A Literal
apiVersions Should Be Recent
artifacts parameter
DeploymentTemplate Schema Is Correct
IDs Should Be Derived From ResourceIDs
Location Should Not Be Hardcoded
ManagedIdentityExtension must not be used
Min And Max Value Are Numbers
Outputs Must Not Contain Secrets
Parameters Must Be Referenced
Parameters Property Must Exist
providers apiVersions Is Not Permitted
ResourceIds should not contain
Resources Should Have Location
Secure String Parameters Cannot Have Default
Template Should Not Contain Blanks
Variables Must Be Referenced
Virtual Machines Should Not Be Preview
VM Images Should Use Latest Version
VM Size Should Be A Parameter
9. Utilisation du module
Il est possible de limiter les tests en utilisant –Test
Il est aussi possible de passer des paramètres avec –TestParameter (collection)
Il est possible d’écrire ces propres tests
Première étape, créer un fichier .test.ps1, le nom du fichier doit correspondre au nom du
test en remplacent les espaces par un – ou un _
Seconde étape, avoir un paramètre pour récupérer l’objet à tester
param(
[PSObject]$TemplateObject
)
10. Intégration CI/CD
Puisque ARM-TTK est un module PowerShell il est facile de l’intégrer dans une chaine
d’intégration et de déploiement.
Le but est que chaque Pull Request/Push déclenche un test permettant à l’équipe de
rapidement détecter les problèmes.
Deux Options
GitHub Actions
Azure DevOps
11. GitHub Actions
Nous avons besoin:
D’un dossier où déposer un DockerFile, la definition du workflow et un script
pour tester le/les templates avec ARM-TTK
Un fichier fichier workflow dans le dossier .github/workflows
12. GitHub Actions
Nous avons besoin:
Il est nécessaire d’ajouter l’extension Run ARM TTK Tests de Sam Cogan
(https://marketplace.visualstudio.com/items?itemName=Sam-
Cogan.ARMTTKExtension)
Un fichier yaml pour decrire le Pipeline
13. Conclusions
ARM-TTK n’est pas complet et toujours en preview.
Il est modulaire et permet de s’intéresser à la qualité des templates
Cela permet aux équipes de se concentrer sur les déploiements et d’avoir un gain
qualitatif.
Beaucoup de nouvelle fonctionnalité sur ARM devraient apparaitre dans le courant
de l’année
14. Avec le support des
communautés
francophones AZUG FR,
MUG Wallonie (Belgique),
MUG Lyon,
MUG Rennes,
MUG Strasbourg, et CMD
Microsoft France
Sans oublier toute la régie
et les organisateurs