Testing-best-practices Clean Terraform-destroy Terraform-apply

Since automated tests with Terratest deploy real resources into real environments, you’ll want to make sure your tests always cleanup after themselves so you don’t leave a bunch of resources lying around. Typically, you should use Go’s defer keyword to ensure that the cleanup code always runs, even if the test hits an error along the way.

For example, if your test runs terraform apply, you should run terraform destroy at the end to clean up:

// Ensure cleanup always runs
defer terraform.Destroy(t, options)

// Deploy
terraform.Apply(t, options)

// Validate
checkServerWorks(t, options)

Of course, despite your best efforts, occasionally cleanup will fail, perhaps due to the CI server going down, or a bug in your code, or a temporary network outage. To handle those cases, we run a tool called cloud-nuke in our test AWS account on a nightly basis to clean up any leftover resources.

Built by Gruntwork

Your entire infrastructure. Defined as code. In about a day.