최근 인프라 코드 테스트를 위해 스위스 군용 칼인 Terratest를 오픈 소스로 공개했습니다 .
현재는 배포, 유효성 검사 및 배포 취소를 통해 모든 인프라 코드를 수동으로 테스트하고있을 것입니다. Terratest는이 프로세스를 자동화하는 데 도움이됩니다.
- Go에서 테스트를 작성하십시오.
- Terratest의 도우미를 사용하여 실제 IaC 도구 (예 : Terraform, Packer 등)를 실행하여 실제 환경 (예 : AWS)에 실제 인프라 (예 : 서버)를 배포하십시오.
- Terratest의 도우미를 사용하여 HTTP 요청, API 호출, SSH 연결 등을 만들어 해당 환경에서 인프라가 올바르게 작동하는지 확인하십시오.
- Terratest의 도우미를 사용하여 테스트가 끝날 때 모든 것을 배포 해제하십시오.
다음은 일부 Terraform 코드에 대한 테스트 예제입니다.
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)
이는 통합 테스트이며 테스트 대상에 따라 5-50 분 정도 걸릴 수 있습니다. 그것은 (사용하지만 빠른 아니다 도커 및 테스트 단계 , 당신은 속도를 높일 수 있습니다 몇 가지 업), 당신은 테스트가 신뢰성을 할 일을해야하지만, 시간이 충분하다.
Terratest 저장소 에서 다양한 유형의 인프라 코드 및 이에 대한 테스트에 대한 문서 및 예제를 확인하십시오 .