Für zukünftige Studenten des Kurses "Infrastruktur als Code in Ansible" und alle Interessierten haben wir eine Übersetzung von nützlichem Material vorbereitet.
Wir laden Sie außerdem ein, sich für eine offene Lektion zum Thema "Verwalten von Kubernetes mit Kubespray" anzumelden .
Willkommen zurück! Dies ist ein weiterer technischer Artikel in einer Reihe von Terraform- und Kubernetes-Artikeln zur Infrastruktur als Code von Contino.
TL; DR
Befehlsgröße spielt keine Rolle. In jedem Fall muss die Implementierung einer guten Analyse der Terraform-Infrastrukturkonfiguration und von End-to-End-Sanity-Tests kein langwieriger und komplexer Prozess sein.
Ich stand vor einer spannenden Herausforderung: ein geeignetes Open-Source-Testframework für die Terraform-Codebasis als Teil der Infrastruktur-Release-Pipeline zu erforschen, zu entwickeln und zu präsentieren. Das Prinzip der „Qualitätskontrolle in allem“ ist alles andere als neu. Die Implementierung hängt jedoch von der Reife der Infrastruktur des Unternehmens und dem akzeptablen Risiko ab - bis zum Erreichen eines [in irgendeiner Weise] fertigen Produkts.
Durch einen neuen Blick auf das Gebiet des Testens von Infrastrukturcode konnte ich mich mit den neuesten Test-Frameworks vertraut machen und mein Wissen aktualisieren.
Zugegeben, zu Beginn meiner Reise litt ich unter dem Vorurteil, dass die Vorbereitung und Implementierung einer solchen "Qualitätskontrolle der Enterprise-Klasse" arbeitsintensiv sein kann.
Schließlich verfügt Hashicorp Terraform über genügend sofort einsatzbereite Funktionen , um Ihre Codebasis zu validieren und zu validieren.
- Code-Qualitätskontrolle -
terraform fmt -check
undterraform validate
. - Vorschau -
terraform plan
. - Gebäude -
TFLOG=debug terraform apply
zur sorgfältigen Überprüfung.
Tools zur statischen Code-Analyse von Terraform
Ein Google-Kamm hat eine sehr umfangreiche Liste potenziell nützlicher Terraform-Testwerkzeuge veröffentlicht.
Aber zuerst gehen wir die Liste unserer Anforderungen durch.
- Unit-Tests in der Terraform-Ressourcenkonfiguration und die Möglichkeit, eine solche generische Liste von Best Practices * für einen bestimmten Cloud-Anbieter zu erweitern. Darüber hinaus sind wir an benutzerfreundlichen Tools interessiert, mit denen Sie unverzüglich beginnen können.
* Mangel an ec2-Instanzen, die der Welt 0.0.0.0/0 ausgesetzt sind - und so weiter.
- — «» , . , , , EKS.
- , , — , , . , , .
- , . , , Go Python. , , , , . , , . , .
Spotlight: Analysieren und Vergleichen von Terraform-Testtools und
-plattformen Die folgende Liste erleichtert Ihnen hoffentlich die Arbeit an der statischen Analyse der Infrastruktur als Code und der Qualitätskontrolle. Beachten Sie, dass dies eine vollständige Liste aller relevanten Terraform-Testtools ist, die ich gefunden habe. Dies ist eine Mischung aus Konfigurationsvaliditätstests, Codequalitätskontrolle und secOps-fokussierten Best Practices mit Komponententests. Diese Liste ist unten dargestellt.
- tflint - github.com/terraform-linters
- terrafirma - github.com/wayfair/terrafirma
- tfsec - github.com/liamg/tfsec
- terrascan — github.com/cesar-rodriguez/terrascan ( TF 0.13)
- checkov — github.com/bridgecrewio/checkov
- conftest — github.com/instrumenta/conftest
Fassen wir zusammen. Ich habe versucht, einen standardisierten Komponententest für Terraform-Ressourcenkomponenten und eine anpassbarere Reihe von Tests zu finden, bei denen die Ressourcenkonfiguration zur Validierung anhand der Ergebnisse erforderlich ist
terraform plan
.
Nachdem ich die Vor- und Nachteile jeder Plattform überprüft hatte, entschied ich mich für ein Tool
checkov
und eine Plattform mit einem sehr passenden Namen
terraform-compliance
- beide in Python geschrieben. Sie haben alle meine oben beschriebenen Anforderungen erfüllt.
Die Infrastruktur als Code-Release-Pipeline sieht ungefähr so aus.
Nachdem ich mich eingehend mit diesen Plattformen befasst hatte, überarbeitete ich unweigerlich meine eigenen Erfahrungen und kam zu den folgenden relevanten Schlussfolgerungen zu dem diskutierten Thema:
- .
- , , , .
- , , , - « » « ».
— Checkov BridgeCrew
www.checkov.io
Checkov ist ein statisches Code-Analyse-Tool für die Infrastruktur als Code.
Es scannt die Cloud-Infrastruktur, die mit Terraform-, Cloudformation-, Kubernetes-, Serverless- oder ARM-Vorlagen bereitgestellt wird, und identifiziert Fehlkonfigurationen im Hinblick auf Sicherheit und Compliance.
Beim Scannen des Terraform-Code-Repositorys werden mehrere Standard-Unit-Tests ausgeführt, die Abweichungen von den Best Practices anzeigen. Wenn beispielsweise gemäß Ihrer Sicherheitskonfiguration eine virtuelle Maschine an Port 22 der Welt ausgesetzt ist (0.0.0.0/0).
Alle Tests finden Sie unter diesem GitHub-Link.
Es ist sehr einfach, mit der Plattform zu beginnen.
- Installieren Sie die Binärdatei.
- Initialisieren Sie das Terraform-Verzeichnis mit Terraform Init.
- Führen Sie chechov in diesem Verzeichnis aus.
Alle Unit-Tests, die standardmäßig ausgeführt werden, können in der Befehlszeile aufgelistet werden. Wenn checkov ausgeführt wird, gibt die Plattform außerdem standardmäßig alle bestandenen und fehlgeschlagenen Komponententests zurück. Sehr praktisch, einfach zu bedienen. Fortgeschrittene Terraform-Methoden werden getestet, aber nicht alle. Dies ist ein grundlegender Unterschied.
Chechov wird gerne NUR Ihren Code auswerten
terraform
. Die Plattform kann sofort danach arbeiten
terraform init
. Sie kümmert sich nicht um Ihre
terraform plan
- mit all den Vor- und Nachteilen. Die Plattform macht das, was angegeben ist, nämlich "statische Code-Analyse". Beachten Sie die möglichen Konsequenzen sowie logische Überlegungen für Ihre Ressourcen.
checkov .
Wenn Sie bereit sind, eine umfassende Python-Entwicklung durchzuführen, können Sie zusätzliche Komponententests schreiben. Die Plattformentwicklungssprache war eine meiner Anforderungen, da ich manchmal die Codebasis der Tests analysieren muss, um abzuschätzen, wie schwierig es wäre, [falls erforderlich] solche zusätzlichen Methoden zu erstellen. Dieser Moment, zusammen mit den Serviceproblemen für die gesamte Gruppe, wurde zum Hauptfaktor bei der Auswahl dieser Plattform gegenüber einer alternativen Plattform, mit der Sie das gleiche Ergebnis erzielen können.
Zusammenfassend lässt sich sagen, dass die checkov-Plattform im Bereich der statischen Code-Analyse hervorragend geeignet ist. Insbesondere, wenn ich das ursprünglich definierte IP-Subnetz auf die Whitelist setzen muss. Diese Option eignet sich jedoch nicht für e2e-Tests, für die eine separate Testplattform erforderlich ist.
Andererseits kann ich als Lösung den Komponententest replizieren und meine Subnetz- / IP-Einstellungen fest codieren. Und was ist, wenn ich mehrere Instanzen und Projekte habe - überspringen Sie diesen Test, auch wenn Sie ihn benötigen? Kann sein. Oder vielleicht nicht.
Hier kommt die zweite Testplattform ins Spiel -
terraform-compliance
.
Terraform-Compliance
terraform-compliance.com
Terraform-Compliance ist eine einfache Testplattform, die für Sicherheits- und Compliance-Audits in Terraform entwickelt wurde, um sicherzustellen, dass Ihre Infrastruktur genauso negativ getestet wird wie Code.
Hintergrund
Auch hier wurde die End-to-End-Entwicklung (BDD) für Verhaltenstests kürzlich als Testframework verwendet, um die Notwendigkeit eines universellen Testframeworks hervorzuheben. Dies ist jedoch nicht der einzige Vorteil. Einfachheit.
Tatsächlich scheint es mir, dass BDD nicht genug Aufmerksamkeit erhält. Möglicherweise haben Sie von Test Driven Development (TDD) gehört, das vor allem in der Softwareentwicklungsumgebung tief verwurzelt ist. Hier erleichtern Plattformen wie BDD die Erstellung zusätzlicher Logik und bieten dem durchschnittlichen Infrastrukturbetreiber eine einfachere, präzisere und wiederholbare Möglichkeit, benutzerdefinierte End-to-End-Tests ohne gründliche Kenntnisse einer speziellen und neuen Programmiersprache zu entwickeln.
Und während Code tatsächlich alles auf der Welt beschreiben kann, kommt es letztendlich auf die Verwaltbarkeit an, auf die Fähigkeit, die Komplexität des Codes zu verstehen (was möglicherweise die Erstellung einer umfangreichen Dokumentation erfordert), ganz zu schweigen von Support und Wartung. Lesen Sie hier mehr über BDD.
Cucumber.io ist nicht nur eine Sprache, sondern ein System, das das Testen erleichtert, indem ein WYSIWYG-Ansatz zum Erstellen, Verstehen und Warten von Tests verwendet wird. Diese Beispiele werden vor der Entwicklung festgelegt und als Akzeptanzkriterien verwendet.
Sie sind Teil der Definition.
Testen mit Terraform-Compliance
Jede Plattform wird auf ihre Vorzüge überprüft und eingehend untersucht, wo ihre Funktionen und Nuancen am besten genutzt werden können. Mit Blick auf die Zukunft kann ich sagen, dass beide Plattformen verwendet werden können.
Hier ist ein Beispiel für einen solchen Test, der mit der
terraform-compliance
BDD- Plattform entwickelt wurde . Es ermöglicht ziemlich komplexe End-to-End-Tests.
Die Plattform
terraform-compliance
verwendet die Ausgabe
terraform plan
... Auf diese Weise können vollständige Release-Pläne erstellt und gründlich getestet werden. Kontrollieren Sie beispielsweise, ob das richtige Verschlüsselungsschlüsselpaar [für Ihren Cloud-Anbieter] für Konto, Umgebung usw. verwendet wird. Sie haben viel Gestaltungsfreiheit, und vor allem ist die Plattform sehr einfach zu verwenden.
Schauen Sie sich einfach die folgenden Schritte und Beispiele an.
- Schritt 1. Initialisieren Sie das Terraform-Verzeichnis: # terraform init
- Schritt 2. Mit dem folgenden Befehl können Sie schnell einen Terraform-Plan erstellen: #terraform plan -out = plan.out
- Schritt 3. Schreiben Sie einige Tests. Es ist eine einfache Sache - es gibt bereits einen Ordner mit Beispielen. Lassen Sie uns unten meine eigenen Testbeispiele durchgehen, die auf der Grundlage meiner Terraform-Planausgabe geschrieben wurden.
Dies ist ein Ausschnitt aus einer Plan-
terraform
Terraform-Konfiguration, mit der ein EKS mit der angegebenen Startgruppe erstellt wird. Stellen wir sicher, dass unser Code
terraform
nicht die Infrastruktur verwendet
instancetype
, sondern das "genehmigte"
a1.xlarge
oder
a1.2xlarge
.
Jetzt werde ich es absichtlich ändern,
t2.small
um Testfehler zu simulieren.
Schreiben wir einen Test, um sicherzustellen, dass diese Anforderung erfolgreich validiert wurde.
- Schritt 4. Lassen Sie die
terraform-compliance
Boards anhand von Testszenarien bewerten:#terraform-compliance -p plan.out -f ./<test-cases-folder>
Ausführen von Tests
Beispiel für ein Bestanden- und Nichtbestanden-Ergebnis
Wenn unser Terraform-Framework-Code den richtigen verwendet
instancetype
, sind alle Ergebnisse grün ERFOLGREICH.
Wenn unser Terraform-Infrastrukturcode die Anforderung verletzt, weil er falsch ist
instancetype
, werden die Ergebnisse rot FAIL angezeigt.
Lassen Sie uns noch mehr Tests schreiben.
Einige weitere einfache Tests aus dem Beispielverzeichnis:
Wenn einer fehlschlägt, wird dem Benutzer "actual_value" angezeigt, der abgerufen und zu Hilfe- und Debugging-Zwecken angezeigt wird.
Testergebnisse
Nachdem alle Tests ausgeführt wurden, wird eine praktische Zusammenfassung aller bestandenen und fehlgeschlagenen Tests angezeigt, die auch die fehlenden Tests enthält. Ich mag es, weil es mir ermöglicht, eine lange Liste strenger Tests zu schreiben und klare Informationen zu liefern, am Ende welche Tests fehlgeschlagen sind und wann. Wenn dies fehlschlägt, können einige Tests mit einem Tag übersprungen werden
@warning
, wie im folgenden Beispiel gezeigt.
habrastorage.org/getpro/habr/upload_files/c22/910/cb9/c22910cb95fb4ccc7555d44bd8b5436b
Ergebnis
Ohne Zweifel war dies eine großartige Gelegenheit, einige der überlegenen Validierungs- und Test-Frameworks, die für Code als Terraform-Frameworks verfügbar sind, neu zu betrachten.
Ich habe mir beide Plattformen gerne angesehen und war besonders überrascht von der einfachen Integration von checkov sowie den erstaunlichen Validierungs-
e2e terraform plan
und benutzerdefinierten Testoptionen
terraform-compliance
.
Letzteres erinnert mich an das Verhalten von Verhalten, ein weiteres großartiges BDD e2e Kubernetes-Testframework , mit dem ich in der Vergangenheit gearbeitet habe.
Test-Frameworks, die vollständig in Python geschrieben wurden, erleichtern den plattformübergreifenden Austausch von Python-Wissen und reduzieren den Aufwand für die Wartung und Entwicklung von Tests in der Zukunft.
Wenn Sie Best Practices benötigen, um Ihre Konfiguration zu überprüfen, wenn Sie keinen Terraform-Plan benötigen, ist checkov wahrscheinlich das Richtige für Sie. Andernfalls könnte die Antwort eine Plattform sein
terraform-compliance
, die über umfangreichere Validierungsfunktionen verfügt
terraform plan
. Das Beste ist, dass es
terraform-compliance
sehr einfach ist, eine BDD-Plattform zu sein.
Unit-Tests stehen an erster Stelle. So einfach wie Kuchen. Die Checkov-Plattform von Bridgecrewio ermöglicht die sofortige Überprüfung der Einhaltung bewährter Verfahren.
Es gibt wirklich keinen guten Grund, einen dieser Qualitätskontrolltests zu überspringen, egal wie groß Ihre Gruppe ist. Insbesondere unter Berücksichtigung der unbedeutenden Arbeitskosten, die für deren Umsetzung anfallen müssen (siehe Beispiele im Artikel).
PS Contino hat eine ganze Reihe fantastischer Projekte. Wenn Sie an hochmodernen Infrastrukturprojekten arbeiten möchten oder ernsthafte Aufgaben suchen, kontaktieren Sie uns! Wir stellen Mitarbeiter ein und suchen kluge Köpfe auf allen Ebenen. Wir bei Contino sind stolz darauf, innovative Cloud-Transformationsprojekte für mittelständische Unternehmen und große Unternehmen zu entwickeln.
«Infrastructure as a code in Ansible».
« Kubernetes Kubespray».