使用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:
- Terraform中
aws_rds_cluster的skip_final_snapshot默认值为false,意味着销毁集群时必须生成最终快照,若未指定final_snapshot_identifier就会报错。 - 检查代码发现,
aurora_pg_v2_serverless集群未配置skip_final_snapshot和final_snapshot_identifier,符合触发错误的条件。 - 另外需确认:旧集群的
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
相关产品推荐
相关产品推荐

