You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform迁移AWS Aurora从Serverless V1到V2遇快照错误求助

解决Aurora Serverless V1升级V2时的Terraform快照错误

问题场景

要通过Terraform将AWS Aurora Serverless V1升级到V2,执行步骤为:创建旧集群快照→基于快照创建预配置集群→升级至PostgreSQL 13.6→克隆为Serverless V2集群。但执行时触发错误:

RDS Cluster FinalSnapshotIdentifier is required when a final snapshot is required

已配置快照标识属性,但仍报错,相关Terraform代码如下:

旧V1集群代码

resource "aws_rds_cluster" "aurora" {
  cluster_identifier              = local.env_config.rds_db_identifier
  engine                          = local.env_config.rds_engine
  engine_mode                     = local.env_config.rds_engine_mode
  engine_version                  = local.env_config.rds_engine_version
  allow_major_version_upgrade     = local.env_config.rds_allow_major_version_upgrade
  apply_immediately               = local.env_config.rds_apply_immediately

  master_username = local.env_config.auroradb_user
  master_password = random_password.aurora_passwd.result
  # final_snapshot_identifier = "aurora-cluster-snapshot-7654"

  vpc_security_group_ids = [aws_security_group.aurora.id]
  db_subnet_group_name   = aws_db_subnet_group.aurora_group.id

  copy_tags_to_snapshot        = true
  deletion_protection          = false
  enable_http_endpoint         = true
  preferred_maintenance_window = local.env_config.preferred_maintenance_window
  backup_retention_period      = 14
  preferred_backup_window      = "01:00-02:00"
  skip_final_snapshot          = false
  final_snapshot_identifier = "aurora-cluster-snapshot-7654"
  storage_encrypted            = true
}

创建快照代码

resource "aws_db_cluster_snapshot" "aurora_snapshot" {
  db_cluster_identifier = aws_rds_cluster.aurora.id
  db_cluster_snapshot_identifier = "aurora-cluster-snapshot"
  tags = local.default_tags
}

预配置集群代码

resource "aws_rds_cluster" "aurora_pg_v2" {
  cluster_identifier = "aurora-cluster-new-provisioned-v29067"
  engine  = local.env_config.rds_engine
  engine_version  = local.env_config.rds_engine_version
  database_name = local.env_config.auroradb_name
  master_username = local.env_config.auroradb_user
  master_password = random_password.aurora_passwd.result
  snapshot_identifier = aws_db_cluster_snapshot.aurora_snapshot.id
  backup_retention_period = 14
  preferred_backup_window = "01:00-02:00"
  db_subnet_group_name = aws_db_subnet_group.aurora_group.id
  vpc_security_group_ids = [aws_security_group.aurora.id]
  engine_mode = "provisioned"
  skip_final_snapshot = true
  apply_immediately = true

  depends_on = [aws_db_cluster_snapshot.aurora_snapshot]
}

Serverless V2集群代码

resource "aws_rds_cluster" "aurora_pg_v2_serverless" {
  cluster_identifier = "aurora-pg-v2-serverless-cluster-new-197789"
  engine = local.env_config.rds_engine
  engine_version = local.env_config.rds_engine_version
  database_name = local.env_config.auroradb_name
  master_username = local.env_config.auroradb_user
  master_password = random_password.aurora_passwd.result
  backup_retention_period = 14
  preferred_backup_window = "01:00-02:00"
  db_subnet_group_name = aws_db_subnet_group.aurora_group.id
  vpc_security_group_ids = [aws_security_group.aurora.id]
  engine_mode = "serverless"
  apply_immediately = true
  enable_http_endpoint         = true
  depends_on = [aws_cloudwatch_log_group.fhirdevplatform_rds_log]
  timeouts {
    create = "120m"
  }
  scaling_configuration {
    auto_pause = true
    min_capacity = 2
    max_capacity = 4
  }
}

错误原因分析

错误触发的核心是某个RDS集群资源在需要生成最终快照时,未配置有效的final_snapshot_identifier:

  1. Terraform中aws_rds_cluster的skip_final_snapshot默认值为false,意味着销毁集群时必须生成最终快照,若未指定final_snapshot_identifier就会报错。
  2. 检查代码发现,aurora_pg_v2_serverless集群未配置skip_final_snapshot和final_snapshot_identifier,符合触发错误的条件。
  3. 另外需确认:旧集群的final_snapshot_identifier是否与现有快照重名,或者local变量中的参数(如rds_apply_immediately)是否导致配置变更时触发快照需求。

解决方案

1. 补全Serverless V2集群的快照配置

根据需求选择以下两种方式之一:

  • 如果销毁该集群时不需要保留最终快照,添加skip_final_snapshot = true:
resource "aws_rds_cluster" "aurora_pg_v2_serverless" {
  # 原有配置不变
  skip_final_snapshot = true
}
  • 如果需要保留最终快照,添加唯一的final_snapshot_identifier:
resource "aws_rds_cluster" "aurora_pg_v2_serverless" {
  # 原有配置不变
  skip_final_snapshot = false
  final_snapshot_identifier = "aurora-serverless-v2-final-snapshot"
}

2. 验证所有集群的快照配置一致性

  • 过渡用的预配置集群aurora_pg_v2已设置skip_final_snapshot = true,无需修改。
  • 旧集群aurora的final_snapshot_identifier需确保未与aws_db_cluster_snapshot.aurora_snapshot的标识重复(当前配置aurora-cluster-snapshot-7654和aurora-cluster-snapshot不重复,没问题)。

3. 检查local变量影响

确认local.env_config中的rds_apply_immediately和rds_allow_major_version_upgrade参数是否会触发意外的快照需求:

  • 若allow_major_version_upgrade = true且执行版本升级,需确保集群配置了有效的快照标识。

内容的提问来源于stack exchange,提问作者CodeCademy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:22:16