terraform:如何覆盖AWS RDS最终快照



在tf文件中拥有以下DB资源:

resource "aws_db_instance" "app_db" {
count = local.db_count
allocated_storage     = 5
max_allocated_storage = 10
engine                = "postgres"
instance_class        = "db.t3.micro"
name                  = var.db_creds["db_name"]
port                  = 5432
username              = var.db_creds["username"]
password              = var.db_creds["password"]
db_subnet_group_name   = aws_db_subnet_group.database_sg.name
vpc_security_group_ids = [aws_security_group.app.id]
final_snapshot_identifier = "${var.environment_deployment_tag}-app-db-snaphot"
}

在销毁数据库资源后,我得到了这个错误:

DBSnapshotAlreadyExists:无法创建快照,因为标识符为app db snaphot的快照已存在

我知道这是因为具有此类标识符的快照已经存在,但我想问是否有方法覆盖以前的快照?

如果没有,并且所有快照都应该有唯一的名称,我想这样的格式应该可以:final_snapshot_identifier = "${var.environment_deployment_tag}-app-db-snaphot-${timestamp()}"

我想知道如何清理以前的快照,这样RDS上就不会有很多快照了?管理最终快照的最佳方法是什么?

如果您确实想维护最终的数据库快照并使用final_snapshot_identifier = "${var.environment_deployment_tag}-app-db-snaphot-${timestamp()}"片段,请确保添加此lifecycle块,这样后续的Terraform计划就不会看到";改变";每次由于使用timestamp()功能:

lifecycle {
ignore_changes = [
final_snapshot_identifier,
]
}

您可能还需要使用replace(timestamp(), ":", "-")timestamp()函数中的:字符替换为-字符,如下所示:

final_snapshot_identifier = "${var.environment_deployment_tag}-app-db-snaphot-${replace(timestamp(), ":", "-")}"

如果您真的不需要最终快照,您可以使用以下方法跳过它:

skip_final_snapshot  = true

相关内容

  • 没有找到相关文章