[英]Terraform : "Error: error deleting S3 Bucket" while trying to destroy EKS Cluster
所以我使用給出的示例創建了 EKS 集群
Cloudposse eks terraform 模塊
最重要的是,我創建了 AWS S3 和 Dynamodb 來分別存儲 state 文件和鎖定文件,並在terraform 后端配置中添加了相同的內容。
這是它的外觀:
resource "aws_s3_bucket" "terraform_state" {
bucket = "${var.namespace}-${var.name}-terraform-state"
# Enable versioning so we can see the full revision history of our
# state files
versioning {
enabled = true
}
# Enable server-side encryption by default
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
}
}
}
}
resource "aws_dynamodb_table" "terraform_locks" {
name = "${var.namespace}-${var.name}-running-locks"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
terraform {
backend "s3" {
bucket = "${var.namespace}-${var.name}-terraform-state"
key = "${var.stage}/terraform.tfstate"
region = var.region
# Replace this with your DynamoDB table name!
dynamodb_table = "${var.namespace}-${var.name}-running-locks"
encrypt = true
}
}
現在,當我嘗試使用terraform destroy
刪除 EKS 集群時,我收到此錯誤:
Error: error deleting S3 Bucket (abc-eks-terraform-state): BucketNotEmpty: The bucket you tried to delete is not empty. You must delete all versions in the bucket.
這是terraform plan -destroy
在集群因 s3 錯誤而部分銷毀后
Changes to Outputs:
- dynamodb_table_name = "abc-eks-running-locks" -> null
- eks_cluster_security_group_name = "abc-staging-eks-cluster" -> null
- eks_cluster_version = "1.19" -> null
- eks_node_group_role_name = "abc-staging-eks-workers" -> null
- private_subnet_cidrs = [
- "172.16.0.0/19",
- "172.16.32.0/19",
] -> null
- public_subnet_cidrs = [
- "172.16.96.0/19",
- "172.16.128.0/19",
] -> null
- s3_bucket_arn = "arn:aws:s3:::abc-eks-terraform-state" -> null
- vpc_cidr = "172.16.0.0/16" -> null
我無法手動刪除 s3 中的 tfstate,因為這會使 terraform 重新創建所有內容,我也嘗試從 tfstate 中刪除 s3 資源,但它給了我鎖定錯誤(也嘗試強制刪除鎖定並使用 -lock=false)
所以我想知道有沒有辦法告訴 terraform 在刪除所有內容后最后刪除 s3。 或者有沒有辦法使用本地s3中的terraform?
當您的 TF state 位於 s3 后端並且您使用相同的 terraform 創建了 s3 和 dynamodb 時,刪除 EKS 集群的正確方法是什么。
通常,不建議將用於 Terraform 的后端 state 管理的 S3 存儲桶保留在 Terraform state 本身中(確切原因)。 我已經在 Terraform 文檔中看到了這一點,但我無法在快速搜索中找到它。
我會做些什么來解決這個問題:
terraform force-unlock LOCK_ID
,其中LOCK_ID
顯示在您嘗試運行命令時給您的錯誤消息中)。由於它仍在使用相同的舊 state 文件(現在只是來自不同的存儲桶),它不會重新創建所有內容,您將能夠將 TF state 存儲桶/文件與其他資源分離。
如果由於某種原因,Terraform 拒絕強制解鎖,您可以通過 AWS 控制台將 go 插入 DynamoDB 表並手動刪除鎖定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.