最近、インフラストラクチャコードをテストするためのスイスアーミーナイフである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レポドキュメントおよびインフラストラクチャコードの様々なタイプの多くの例とそれらに対応するテストのために。