Wie um zu testen, Terraform-Dateien
Ich bin die Definition meiner Infrastruktur in Terraform-Dateien. Ich mag Terraform viel, aber ich habe Schwierigkeiten, herauszufinden, wie zu testen ist. Ich habe awspec
, das ist wirklich nett und läuft RSpec-wie tests gegen das Ergebnis des builds über die AWS-API. Aber gibt es eine Möglichkeit, das zu tun unit-tests, wie über die Ergebnisse der terraform plan
? Welche Art von Workflows sind andere mit Terraform?
- Können Sie ein Beispiel geben von dem, was Sie testen wollen? Ich habe ein paar Dinge, die ich tun, um zu testen, Terraform-Module (wie das, was das Modul tun soll, gegeben eine Eingabe) und dann gibt es Dinge wie
awspec
oderkitchen
für die überprüfung, dass die Dinge geschaffen worden, die in AWS. - hast du das probiert: github.com/newcontext-oss/kitchen-terraform
- das ist, was ich Suche. Ich würde gerne etwas haben, dass die tests der module in isolation (unit Tests, die behauptet gegen
terraform plan
oder ähnliches), sowie etwas, dass die tests auf die integrierten Ergebnisse auf AWS. Letzteres wird wohl ein Test-Küche build/test/zerstören-Zyklus. - Ich habe nichts, ich kann nur noch auf (es braucht viel mehr Arbeit und etwas mehr Kampf-Tests), aber ich habe nicht gesehen, alles andere es eben doch tun. Gruntworks haben ein framework namens
terratest
dass Sie noch nicht open source, aber klingt wie es könnte etwas ähnliches machen aus dem kleinen habe ich es auch gelesen. Nicht sicher, ob es ' s nichts anderes gibt, mag es trotzdem
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich erweitern, Beginnen Sie die Antwort mit mehr Informationen über Küche-Terraform.
Küche-Terraform ist ein Satz von open-source-plugins, die laufen innerhalb Test-Küche, diese sollen sich in Ihre Terraform-Modul-repository zu test, Modul-Funktionalität vor, die in einem repository erstellt der Ressourcen. Fühlen Sie bitte sich frei, überprüfen Sie die Dokumentation der beiden Projekte für mehr details, aber ich werde gehen durch meine Empfehlungen für Integrationstest Ihre Terraform-code.
Ruby, Terraform
Für dieses Beispiel, die Terraform-Modul repo genannt werden:
my_terraform_module
Erstellen Sie eine
Gemfile
:Installieren Sie die erforderlichen Komponenten (verwendet die
Gemfile
für die Abhängigkeiten derkitchen-terraform
)Erstellen Sie die Test-Küche-Datei
.kitchen.yml
- dies bringt den Test-frame, Test-Küche und Küche-TerraformIhre Terraform-code sollte an der Wurzel der Terraform-Modul-repository wie:
Beispiel-code, gehen Sie in
main.tf
Dann der Hinweis auf die Terraform-Modul nur, wie würden wir in Terraform live-repos - aber in einer test-fixture statt in dieser Datei:
test/fixtures/tf_module/main.tf
Dann von dort aus können Sie Terraform gelten, aber es ist ein wenig anders mit Küche-Terraform-und Test-Küche, die Sie ausführen, ein konvergieren die hilft, halten Sie verfolgen der Staat und ein paar andere Elemente.
Nun haben Sie gesehen, Ihre Terraform-code eine gelten, die wir brauchen, um es zu testen. Test können wir die tatsächlichen Ressourcen, die erstellt wurden, das wäre wie ein integration-test, aber wir können auch testen Sie die Status-Datei, die ist ein semi-Einheit testen, aber ich bin mir nicht bewusst alles, was sich derzeit in den unit-tests gegen die HCL-code von Terraform.
Erstellen Sie eine inspec Standard-Profil-Datei:
test/integration/kt_suite/inspec.yml
Erstellen Sie eine Inspec-Steuerelement für Ihre integration zu testen:
test/integration/kt_suite/controls/basic.rb
- ich bin mit einem test für das Beispiel Terraform-code, den ich früher für diemain.tf
Dies ist ein Beispiel-test von abrufen von Informationen aus der Status-Datei und testen, ob etwas existiert. Dies ist eine grundlegende, aber man kann auf jeden Fall exand auf dieses Beispiel.
Führen Inspec-Steuerelemente mit der Test-Küche und Küche-Terraform:
Nahm ich eine Menge von dieser aus dem erste-Schritte-Handbuch und einige der tutorials hier: https://newcontext-oss.github.io/kitchen-terraform/getting_started.html
Wir haben vor kurzem open-Source -Terratest, unser Schweizer Taschenmesser für die Test-Infrastruktur-code.
Heute, wahrscheinlich sind Sie alle zu testen, Ihre Infrastruktur-code manuell zu implementieren, zu validieren und deinstallation von. Terratest unterstützt Sie bei der Automatisierung dieses Prozesses:
Hier ist ein Beispiel-test für einige Terraform-code:
Diese integration tests, und je nachdem, was Sie testen wollen, kann 5 - 50 Minuten. Es ist nicht schnell (aber mit Docker und test-Phasen, können Sie die Geschwindigkeit einige Dinge), und Sie müssen arbeiten, um die tests zuverlässig, aber es lohnt sich die Zeit.
Check-out die Terratest repo für docs und viele Beispiele von verschiedenen Arten von Infrastruktur-code und die entsprechenden tests für Sie.
Aus meiner Forschung ist dies eine schwierige Frage, da Terraform ist nicht dazu gedacht, für eine voll funktionsfähige Programmiersprache, und erklären Sie, was Ressourcen, die Sie wollen, mit Terraform, nicht, wie Sie zu bauen, versuchen, unit-test nicht wirklich geben Ihnen die Sicherheit, die Sie bauen Ressourcen, wie Sie möchten, ohne tatsächlich die Ausführung einer Anwendung. Dies macht versucht, unit-test fühlen Sie sich mehr wie ein linting mir.
Allerdings könnte man analysieren Ihr HCL-Dateien mit so etwas wie pyhcl, oder analysieren Sie plan-Dateien, aber aus meiner Erfahrung, das war viel Arbeit für wenig nutzen (aber ich könnte fehlt eine einfachere Methode!).
Hier sind einige alternativen, wenn Sie wollte, um zu testen, die Ergebnisse Ihrer terraform passt:
Küche-terraform ist ein Werkzeug für das schreiben Test-Küche Spezifikationen für Ihre Infrastruktur.
Küche-verifier-awspec hilft zusammenbringen
awspec
undkitchen-terraform
, obwohl ich habe es nicht persönlich.Wenn Sie mithilfe von AWS, die ich gefunden habe, AWS Config zu können, bieten viele der gleichen Vorteile wie andere Infrastruktur-testing-tools, ohne viel setup/Wartung. Es ist zwar ziemlich neu, und ich habe nicht verwendet es ausgiebig.
Auch wenn Sie die Zahlung für Terraform Premium erhalten Sie Zugang zu Sentinel, die scheint eine Menge ähnliche Vorteile AWS Config, aber ich habe es nicht persönlich.
Ein Ansatz ist, um die Ausgabe der Ergebnisse in eine Datei mit
-out=tempfile
, dann ein Skript ausführen, um zu überprüfen, was Sie zu tun versuchen, und wenn alle Pässe übergeben Sie die Datei in den Befehl "anwenden".Blick auf
-out
hier:https://www.terraform.io/docs/commands/plan.html
.plan
- Dateien sind binäre--wissen Sie, ob es einen Weg gibt, um analysieren Sie mit Ruby?.plan
Datei jsonKönnen Sie verwenden github.com/palantir/tfjson zum analysieren einer
.plan
Datei zujson
.Es ist ein Problem im moment, dass eine "unbekannt-plan Datei version: 2" Fehler. Dies ist, weil die vendored version von terraform ist zu alt.
Fix ist:
Dort ist dann ein Fehler in
../../hashicorp/terraform/config/testing.go
. Zu beheben, ändern Sie einfach die Zeilezu
Laufen
go get
wieder und danngo install
Sollten Sie dann in der Lage sein, Folgendes zu tun produzieren
json
Ausgabe.t.Helper()
Problem ist wahrscheinlich, weil du läufst Golang <1.9 alsHelper
eingeführt wird, 1.9