terraform:如何覆盖 AWS RDS 最终快照
Posted
技术标签:
【中文标题】terraform:如何覆盖 AWS RDS 最终快照【英文标题】:terraform: How to override AWS RDS final snapshot 【发布时间】:2021-07-01 08:22:07 【问题描述】:在 tf 文件中有以下数据库资源:
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 上的快照就不会很多了?管理最终快照的最佳方法是什么?
【问题讨论】:
【参考方案1】:如果您确实想维护最终数据库快照并使用 final_snapshot_identifier = "$var.environment_deployment_tag-app-db-snaphot-$timestamp()"
sn-p,请务必添加此 lifecycle
块,以便后续 Terraform 计划不会每次都看到“更改”,因为timestamp()
函数的使用:
lifecycle
ignore_changes = [
final_snapshot_identifier,
]
您可能还需要使用replace(timestamp(), ":", "-")
将timestamp()
函数中的:
字符替换为-
字符,如下所示:
final_snapshot_identifier = "$var.environment_deployment_tag-app-db-snaphot-$replace(timestamp(), ":", "-")"
【讨论】:
最佳方法恕我直言,操作应将此标记为正确答案【参考方案2】:如果您确实不需要最终快照,您可以使用以下方法跳过它:
skip_final_snapshot = true
【讨论】:
以上是关于terraform:如何覆盖 AWS RDS 最终快照的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 创建 AWS MySQL RDS 实例时出错
需要通过 Terraform 在 AWS RDS 中启用备份复制功能
Terraform,AWS RDS aurora mysql serverless 异常“找不到源集群”
在 AWS RDS 集群实例上使用 Terraform 预置多个逻辑数据库