如何解决如何使用 Terratest 测试我的资源是否可以避免意外破坏?
我正在构建一个 terraform 模块,以使用 AWS S3 和 AWS DynamoDB 创建一个 terraform 远程后端,并希望避免通过 terraform destroy
意外破坏资源。
因此,我使用 this workaround:
lifecycle { prevent_destroy = true }
应用于我的模块的资源
resource "random_id" "protector" {
count = var.prevent_destroy ? 1 : 0
byte_length = 16
keepers = {
s3_bucket_id = aws_s3_bucket.this.id
dynamodb_table_id = aws_dynamodb_table.this.id
}
lifecycle {
prevent_destroy = true
}
}
接下来,我想通过调用 terraform destroy
来测试资源不能被破坏,以确保我的模块按预期工作。
我使用 Terratest
库创建了一个测试,正如 Yevgeniy Brikman 在 terraform: Up and Running 中所述:
package test
import (
"testing"
"github.com/gruntwork-io/terratest/modules/terraform"
)
func TestIndestructibleS3BackendCreateAndFailedDestroy(t *testing.T) {
opts := &terraform.Options{
// pass the example's directory
terraformDir: "../examples/terraform-s3-backend/indestructible-backend",}
// Todo defer removeProtectorAndDestroy
terraform.InitAndApply(t,opts)
terraform.Destroy(t,opts) // we want this call to fail
// Todo catch exception and check that it indicates that the resources cannot be deleted
}
正如预期的那样,测试失败了:
TestIndestructibleS3BackendCreateAndFailedDestroy 2021-06-28T14:06:24+02:00 retry.go:99: Returning due to Fatal error: FatalError{Underlying: error while running command: exit status 1; ╷
│ Error: Instance cannot be destroyed
│
│ on ../../../modules/terraform-s3-backend/main.tf line 44:
│ 44: resource "random_id" "protector" {
│
│ Resource module.example-s3-backend.random_id.protector[0] has
│ lifecycle.prevent_destroy set,but the plan calls for this resource to be
│ destroyed. To avoid this error and continue with the plan,either disable
│ lifecycle.prevent_destroy or reduce the scope of the plan using the -target
│ flag.
╵}
如何断言在调用 terraform.Destroy
后抛出错误?
另外,在此测试后我如何正确清理?
我想移除保护器,然后销毁资源。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。