Tester l'infrastructure en tant que code Terraform: Analysez les tests unitaires et le développement de bout en bout en testant les comportements





Pour les futurs étudiants du cours «Infrastructure as a code in Ansible» et toutes les personnes intéressées, nous avons préparé une traduction de matériel utile.



Nous vous invitons également à vous inscrire à une leçon ouverte sur le thème "Gérer Kubernetes avec Kubespray" .









Nous saluons le retour! Ceci est un autre article technique dans une série d'articles terraform et kubernetes sur l'infrastructure en tant que code de Contino.



TL; DR

La taille de la commande n'a pas d'importance. Dans tous les cas, la mise en œuvre d'une bonne analyse de la configuration de l'infrastructure terraform et des tests de cohérence de bout en bout ne doit pas être un processus long et complexe.



J'ai été confronté à un défi passionnant: explorer, développer et présenter un cadre de test open source approprié pour la base de code terraform dans le cadre du pipeline de publication de l'infrastructure. Le principe du «contrôle qualité en tout» est loin d'être nouveau. Mais sa mise en œuvre dépend de la maturité de l'infrastructure de l'organisation et du niveau de risque acceptable - jusqu'au stade de l'obtention d'un produit fini [de quelque manière que ce soit].



Un regard neuf sur le domaine des tests de code d'infrastructure m'a permis de me familiariser avec les derniers frameworks de test et de mettre à jour mes connaissances.



image



Certes, au début de mon voyage, j'ai souffert du préjugé selon lequel la préparation et la mise en œuvre d'un tel «contrôle de la qualité d'entreprise» peut demander beaucoup de travail.



Après tout, Hashicorp Terraform a suffisamment de fonctionnalités prêtes à l'emploi pour valider et valider votre base de code .



  • Contrôle de la qualité du code - terraform fmt -check



    et terraform validate



    .
  • Aperçu - terraform plan



    .
  • Bâtiment - TFLOG=debug terraform apply



    pour une vérification méticuleuse.


Outils d'analyse de code statique Terraform



Un peigne Google a révélé une vaste gamme d'outils de test de terraform potentiellement utiles.



Mais d'abord, parcourons la liste de nos besoins.



  • Avoir des tests unitaires dans la configuration des ressources terraform et la possibilité d'étendre une telle liste générique de bonnes pratiques * vérifie un fournisseur de cloud spécifique. De plus, nous sommes intéressés par des outils faciles à utiliser avec lesquels vous pouvez commencer immédiatement.


* Manque d'instances ec2 exposées au monde 0.0.0.0/0 - et ainsi de suite.



  •  — «» , . , , , EKS.


  • , , — , , . , , .


  • , . , , Go Python. , , , , . , , . , .


Spotlight: Analyse et comparaison des outils et plates-formes de test Terraform



Nous espérons que la liste suivante facilitera votre travail sur l'analyse de l'infrastructure statique en tant que code et le contrôle qualité. Notez qu'il s'agit d'une liste complète de tous les outils de test terraform pertinents que j'ai trouvés, qui est un mélange de tests de validité de configuration, de contrôle de la qualité du code et de meilleures pratiques axées sur secOps avec des tests unitaires. Cette liste est présentée ci-dessous.









Résumons. J'ai essayé de trouver un test unitaire standardisé pour les composants de ressources terraform et une suite de tests plus personnalisables qui prennent la configuration des ressources pour valider par rapport aux résultats terraform plan



.



Après avoir examiné les avantages et les inconvénients de chaque plate-forme, j'ai opté pour un outil checkov



et une plate-forme avec un nom très approprié terraform-compliance



 - tous deux écrits en python. Ils répondaient à toutes mes exigences décrites ci-dessus.



L'infrastructure en tant que pipeline de publication de code ressemble à ceci en termes généraux.



Après avoir approfondi ces plates-formes, j'ai inévitablement révisé ma propre expérience et suis arrivé aux conclusions pertinentes suivantes sur le sujet en discussion:



  • .
  • , , , .
  • , , , - « » « ».




 — Checkov BridgeCrew



www.checkov.io



Checkov est un outil d'analyse de code statique pour l'infrastructure en tant que code.



Il analyse l'infrastructure cloud fournie avec les modèles Terraform, Cloudformation, Kubernetes, Serverless ou ARM et identifie les erreurs de configuration pour la sécurité et la conformité.


Il existe plusieurs tests unitaires par défaut exécutés lors de l'analyse du référentiel de code terraform qui montrent des écarts par rapport aux meilleures pratiques - par exemple, lorsque, selon votre configuration de sécurité, vous avez une machine virtuelle sur le port 22 exposée au monde (0.0.0.0/0).



Tous les tests peuvent être trouvés sur ce lien GitHub.



Il est très facile de démarrer avec la plateforme.



  • Installez le binaire.
  • Initialisez le répertoire terraform avec terraform init.
  • Exécutez chechov sur ce répertoire.


Tous les tests unitaires exécutés par défaut peuvent être répertoriés sur la ligne de commande. De plus, lors de l'exécution de checkov, la plate-forme renverra par défaut tous les tests unitaires réussis et échoués. Très pratique, facile à utiliser. Les méthodes avancées de Terraform sont testées, mais pas toutes. C'est une différence fondamentale.



Chechov évaluera UNIQUEMENT votre code avec plaisir terraform



. La plate-forme peut fonctionner immédiatement après terraform init



. Elle ne se soucie pas du vôtre terraform plan



 - avec tous les avantages et inconvénients. La plateforme fait ce qui est dit, à savoir "l'analyse statique du code". Soyez conscient des conséquences possibles, ainsi que des considérations logiques, pour vos ressources.



image



image



checkov .



Si vous êtes prêt à faire du développement Python en profondeur, vous pouvez écrire des tests unitaires supplémentaires. Le langage de développement de plate-forme était l'une de mes exigences, car je dois parfois analyser la base de code des tests pour estimer à quel point il serait difficile [si nécessaire] de créer de telles méthodes supplémentaires. Ce moment, couplé aux problèmes de service pour le groupe dans son ensemble, est devenu le facteur principal dans le choix de cette plateforme plutôt qu'une alternative, ce qui vous permet d'obtenir le même résultat.



Pour résumer, la plate-forme checkov est excellente dans le domaine de l'analyse de code statique. Plus précisément, si j'ai besoin de mettre sur liste blanche le sous-réseau IP initialement défini. Mais cette option ne convient pas aux tests e2e qui nécessitent une plate-forme de test distincte.



D'autre part, comme solution, je peux répliquer le test unitaire et coder en dur mes paramètres de sous-réseau / IP. Et puis que faire si j'ai plusieurs instances et projets - sauter ce test, même si j'en ai besoin? Peut être. Ou peut être pas.



C'est là que la deuxième plate-forme de test entre en jeu - terraform-compliance



.



Conformité Terraform



terraform-compliance.com



Terraform-Compliance  est une plate-forme de test légère conçue pour les audits de sécurité et de conformité dans terraform afin de garantir que votre infrastructure est testée aussi négativement que le code.


Contexte



Encore une fois, le développement de bout en bout des tests comportementaux (BDD) a récemment été utilisé comme cadre de test, soulignant la nécessité d'un cadre de test universel. Mais ce n'est pas le seul avantage. Simplicité.



En fait, il me semble que BDD ne retient pas suffisamment l'attention. Vous avez peut-être entendu parler de Test Driven Development (TDD), qui prend des racines profondes, principalement dans l'environnement de développement logiciel. Mais c'est là que des plates-formes comme BDD facilitent la création d'une logique supplémentaire, offrant au mainteneur d'infrastructure moyen un moyen plus simple, concis et reproductible de développer des tests personnalisés de bout en bout sans connaissance approfondie de tout nouveau langage de programmation spécialisé.



Et si le code peut décrire, en fait, tout dans le monde, en fin de compte tout se résume à la gérabilité, la capacité à comprendre la complexité du code (qui peut nécessiter la préparation d'une documentation complète), sans parler du support et de la maintenance.  En savoir plus sur BDD ici.



Cucumber.io  est plus qu'un simple langage, c'est un système qui facilite les tests en adoptant une approche WYSIWYG pour la conception, la compréhension et la maintenance des tests. Ces exemples sont déterminés avant le développement et sont utilisés comme critères d'acceptation.



Ils font partie de la définition.



Test avec la conformité Terraform



Chaque plate-forme est revue pour ses mérites, avec une étude approfondie des endroits où ses fonctionnalités et ses nuances peuvent être le mieux exploitées. Pour l'avenir, je peux dire que les deux plates-formes peuvent être utilisées.



Voici un exemple d'un tel test développé à l'aide de la plateforme terraform-compliance



BDD. Il vous permet d'effectuer des tests de bout en bout assez complexes.



La plateforme terraform-compliance



utilise la sortie terraform plan



... En conséquence, il permet de former et de tester minutieusement des «plans» de publication complets. Par exemple, vérifiez que la bonne paire de clés de chiffrement [pour votre fournisseur de cloud] est utilisée pour le compte, l'environnement, etc. Vous disposez d'une grande liberté créative et, surtout, la plate-forme est très facile à utiliser.



Consultez simplement les étapes ci-dessous et des exemples.



  • Étape 1. Initialisez le répertoire terraform: # terraform init
  • Étape 2. Vous pouvez générer rapidement un plan terraform avec la commande suivante: #terraform plan -out = plan.out
  • Étape 3. Rédigez quelques tests. C'est une question simple - il existe déjà un dossier avec des exemples. Passons en revue mes propres exemples de test ci-dessous, écrits en fonction de la sortie de mon plan terraform.


Il s'agit d'un extrait d'une terraform



 configuration plan -terraform qui crée un EKS avec le groupe de lancement spécifié. Assurons - notre code terraform



ne pas utiliser l' infrastructure instancetype



, mais utilise le « approuvé » a1.xlarge



ou a1.2xlarge



.



Maintenant, je vais le changer intentionnellement t2.small



pour simuler des échecs de test.



Écrivons un test pour nous assurer que cette exigence est validée avec succès.



  • Étape 4. Faisons terraform-compliance



    évaluer les tableaux à l'aide de scénarios de test:#terraform-compliance -p plan.out -f ./<test-cases-folder>







Exécution de tests



Exemple de réussite et d'échec



image



Si notre code de framework Terraform utilise le bon instancetype



, alors tous les résultats seront verts SUCCESS.



Si notre code d'infrastructure Terraform ne respecte pas l'exigence parce qu'elle est incorrecte instancetype



, les résultats seront en rouge FAIL.



Écrivons encore plus de tests



image



Quelques tests plus simples tirés du répertoire des exemples:



image



Si l'un d'entre eux échoue, l'utilisateur verra "actual_value", qui est récupéré et affiché à des fins d'aide et de débogage.



Résultats de test



Une fois tous les tests exécutés, un récapitulatif pratique de tous les tests réussis et échoués s'affiche, qui comprend également les tests manqués. Je l'aime car cela me permet d'écrire une longue liste de tests rigoureux, ainsi que de fournir des informations claires à l'issue desquelles les tests ont échoué et quand. De plus, en cas d'échec, certains tests peuvent être ignorés avec une balise @warning



, comme indiqué dans l'exemple ci-dessous.

habrastorage.org/getpro/habr/upload_files/c22/910/cb9/c22910cb95fb4ccc7555d44bd8b5436b



Résultat



C'était sans aucun doute une excellente occasion de jeter un regard neuf sur certains des cadres de validation et de test supérieurs disponibles pour le code en tant que frameworks Terraform.



J'ai aimé regarder ces deux plates-formes et j'ai été particulièrement surpris par la facilité d'intégration de checkov ainsi que par les incroyables e2e terraform plan



options de validation et de test personnalisés qu'il offre terraform-compliance



.



Ce dernier me rappelle le comportement de Behave , un autre excellent cadre de test BDD e2e kubernetes avec lequel j'ai travaillé dans le passé.



Les frameworks de test entièrement écrits en Python facilitent le partage des connaissances Python entre les plates-formes et réduisent la quantité de matière grise nécessaire pour maintenir et développer des tests à l'avenir.



Si vous avez besoin de vérifier votre configuration par rapport aux meilleures pratiques lorsque vous n'avez pas besoin d'un plan de terraform, alors checkov est probablement ce dont vous avez besoin. Sinon, la réponse peut être une plate terraform-compliance



- forme dotée d'un ensemble plus riche de fonctionnalités de validation terraform plan



. Mieux encore, être une plate-forme BDD est terraform-compliance



très facile à apprendre.



Les tests unitaires viennent en premier. Aussi facile que la tarte. La plate-forme Checkov de Bridgecrewio permet le contrôle de conformité aux meilleures pratiques dès le départ.



Il n'y a vraiment aucune bonne raison de sauter l'un de ces tests de contrôle qualité, quelle que soit la taille de votre groupe. Surtout compte tenu des coûts de main-d'œuvre insignifiants qui doivent être appliqués pour les mettre en œuvre (voir exemples dans l'article).



PS Contino a un bon nombre de projets fantastiques. Si vous souhaitez travailler sur des projets d'infrastructure ultra-modernes ou recherchez des tâches sérieuses, contactez-nous! Nous recrutons du personnel et recherchons des esprits brillants à tous les niveaux. Chez Contino, nous sommes fiers de développer des projets de transformation cloud de pointe pour les moyennes et grandes entreprises.

«Infrastructure as a code in Ansible».



« Kubernetes Kubespray».





All Articles