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

执行Terraform State迁移后,SecretsManager版本资源需重建且导入失败求助

Terraform Secrets Manager 资源迁移后需重建的问题排查与解决

问题描述

我执行了这条命令试图迁移状态:

terraform state mv -state-out="path" module.rds.aws_secretsmanager_secret_version.superuser module.rds.aws_secretsmanager_secret_version.superuser

在新配置中执行terraform plan后,返回资源必须重建的结果:

# module.rds.aws_secretsmanager_secret_version.superuser must be replaced
-/+ resource "aws_secretsmanager_secret_version" "superuser" {
      ~ arn            = "arn:aws:secretsmanager:eu-west-2:**********:secret:rds-superuser-TJ*******-M****B" -> (known after apply)
      ~ id             = "arn:aws:secretsmanager:eu-west-2:**********:secret:rds-superuser-TJ*******-M****|terraform-202000000000070000001d" -> (known after apply)
      ~ secret_string  = (sensitive value) # forces replacement
      ~ version_id     = "terraform-202400000000001d" -> (known after apply)
      ~ version_stages = [
          - "AWSCURRENT",
        ] -> (known after apply)
        # (1 unchanged attribute hidden)
    }

我尝试用terraform import命令:

terraform import aws_secretsmanager_secret_version.superuser 'arn:aws:secretsmanager:eu-west-2:::::::secret:rds-superuser-T:::::::::B|terraform-202400000000001d'

但terraform plan结果还是显示需要重建。

换成这条导入命令时直接失败:

terraform import aws_secretsmanager_secret_version.superuser 'arn:aws:secretsmanager:eu-west-2:::::::secret:rds-superuser-T:::::::::B|"AWSCURRENT"'

报错信息:

Error: reading Secrets Manager Secret Version (arn:aws:secretsmanager:eu-west-2::::::secret:rds-superuser-T::::B|AWSCURRENT): operation error Secrets Manager: GetSecretValue, https response error StatusCode: 400, RequestID: 13cf60fc-482a-438a-a22c-4265c56b07cd, api error ValidationException: 1 validation error detected: Value 'AWSCURRENT' at 'versionId' failed to satisfy constraint: Member must have length greater than or equal to 32

问题根源

  • 无效的状态迁移命令:你执行的state mv命令是将资源从自身移动到自身,没有实际将状态写入到指定的-state-out路径,新配置的状态文件中缺少该资源的记录,导致Terraform判定需要重建资源。
  • 导入格式错误:aws_secretsmanager_secret_version的导入ID必须是SecretARN|VersionID格式,AWSCURRENT是版本阶段标记而非VersionID,而VersionID要求长度至少32位,因此用AWSCURRENT会触发验证错误。
  • 配置与实际资源不匹配:新配置中的secret_string或version_stages属性与AWS上已存在的Secret版本不一致,这会触发Terraform的强制替换逻辑。

解决步骤

1. 修正状态迁移命令

确保状态被正确写入到目标路径:

terraform state mv -state-out="path/to/new/state.tfstate" module.rds.aws_secretsmanager_secret_version.superuser module.rds.aws_secretsmanager_secret_version.superuser

执行后,检查目标状态文件,确认已包含该资源的状态记录。

2. 获取正确的Secret VersionID

通过AWS CLI查询目标Secret的所有版本信息:

aws secretsmanager list-secret-version-ids --secret-id arn:aws:secretsmanager:eu-west-2:**********:secret:rds-superuser-TJ*******-M****B

在返回结果中找到对应版本的VersionId(例如terraform-202400000000001d)以及关联的VersionStages。

3. 对齐Terraform配置与实际资源

检查aws_secretsmanager_secret_version的资源配置,确保:

  • secret_string的内容与AWS上的Secret值一致(如果是静态配置);
  • version_stages列表包含实际的版本阶段(比如["AWSCURRENT"])。

4. 正确执行导入命令(状态迁移无效时使用)

导入时需带上模块前缀,确保资源被识别到模块命名空间下:

terraform import module.rds.aws_secretsmanager_secret_version.superuser 'arn:aws:secretsmanager:eu-west-2:**********:secret:rds-superuser-TJ*******-M****B|terraform-202400000000001d'

5. 验证结果

重新执行terraform plan,确认资源不再显示为需要重建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:13:23