我试图通过更新我的资源来创建我当前存在的未加密aws_rds_cluster
的加密版本,我添加:
kms_key_id = "mykmskey"
storage_encrypted = true
我的资源应该是这样的:
resource "aws_rds_cluster" "my_rds_cluster" {
cluster_identifier = "${var.service_name}-rds-cluster"
database_name = var.db_name
master_username = var.db_username
master_password = random_password.db_password.result
engine = var.db_engine
engine_version = var.db_engine_version
kms_key_id = "mykmskey"
storage_encrypted = true
db_subnet_group_name = aws_db_subnet_group.fleet_service_db_subnet_group.name
vpc_security_group_ids = [aws_security_group.fleet_service_service_db_security_group.id]
skip_final_snapshot = true
backup_retention_period = var.environment != "prod" ? null : 7
# snapshot_identifier = "my-rds-instance-snapshot"
tags = { Name = "${var.service_name}-rds-cluster" }
}
问题是原始资源已经定义了delete_protection = true
,我也删除了,但是,即使我删除了它,原始集群也不能通过任何方式删除,以便创建新的集群,无论是通过更改Terraform,还是手动在AWS控制台,它只是抛出一个错误:error creating RDS cluster: DBClusterAlreadyExistsFault: DB Cluster already exists
在这种情况下,有什么办法吗?
要完全通过Terraform完成这个操作,您必须:
- 删除原始Terraform资源的删除保护
- 运行
terraform apply
,这将从AWS 中的实际资源中删除保护 - 对Terraform资源进行修改,这将导致删除或替换当前资源
- 再次运行
terraform apply
,在此期间Terraform将删除和/或替换资源。
这里的关键是,您不能在实际删除资源的同时删除删除保护,因为Terraform在试图删除资源之前不会更新现有资源以修改属性。