Vor kurzem haben wir Terratest , unser Schweizer Taschenmesser , zum Testen von Infrastrukturcode geöffnet .
Heute testen Sie wahrscheinlich Ihren gesamten Infrastrukturcode manuell, indem Sie ihn bereitstellen, validieren und wieder rückgängig machen. Terratest hilft Ihnen, diesen Prozess zu automatisieren:
- Schreibe Tests in Go.
- Verwenden Sie Helfer in Terratest, um Ihre echten IaC-Tools (z. B. Terraform, Packer usw.) auszuführen und eine echte Infrastruktur (z. B. Server) in einer echten Umgebung (z. B. AWS) bereitzustellen.
- Verwenden Sie Helfer in Terratest, um zu überprüfen, ob die Infrastruktur in dieser Umgebung ordnungsgemäß funktioniert, indem Sie HTTP-Anforderungen, API-Aufrufe, SSH-Verbindungen usw. ausführen.
- Verwenden Sie Helfer in Terratest, um die Bereitstellung am Ende des Tests aufzuheben.
Hier ist ein Beispieltest für einen Terraform-Code:
terraformOptions := &terraform.Options {
// The path to where your Terraform code is located
TerraformDir: "../examples/terraform-basic-example",
}
// This will run `terraform init` and `terraform apply` and fail the test if there are any errors
terraform.InitAndApply(t, terraformOptions)
// At the end of the test, run `terraform destroy` to clean up any resources that were created
defer terraform.Destroy(t, terraformOptions)
// Run `terraform output` to get the value of an output variable
instanceUrl := terraform.Output(t, terraformOptions, "instance_url")
// Verify that we get back a 200 OK with the expected text
// It can take a minute or so for the Instance to boot up, so retry a few times
expected := "Hello, World"
maxRetries := 15
timeBetweenRetries := 5 * time.Second
http_helper.HttpGetWithRetry(t, instanceUrl, 200, expected, maxRetries, timeBetweenRetries)
Dies sind Integrationstests, die je nach Testdauer 5 bis 50 Minuten dauern können. Es ist nicht schnell (obwohl Sie mit Docker und Testphasen einige Dinge beschleunigen können), und Sie müssen daran arbeiten, die Tests zuverlässig zu machen, aber es ist die Zeit wert.
Im Terratest-Repo finden Sie Dokumente und viele Beispiele für verschiedene Arten von Infrastrukturcode sowie die entsprechenden Tests für diese.