如何将多个aws_secretsmanager_secret_version版本导入Terraform状态?
问题场景
在CI/CD流水线中尝试将Secrets Manager的两个版本导入到同一个aws_secretsmanager_secret_version.example资源,配置如下:
import { to = aws_secretsmanager_secret_version.example id = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456|xxxxx-xxxxxxx-xxxxxxx-xxxxx" } import { to = aws_secretsmanager_secret_version.example id = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456|yyyyy-yyyyyyy-yyyyyyy-yyyyy" }
执行时触发报错:
│ Error: Duplicate import configuration for "aws_secretsmanager_secret_version.example"
│
│ on main.tf line 6:
│ 6: import {
│
│ An import block for the resource
│ "aws_secretsmanager_secret_version.example"
│ was already declared at main.tf:1,1-7. A resource can have only one import
│ block.
原因分析
Terraform的aws_secretsmanager_secret_version资源每个实例只能对应一个密钥版本,该资源的设计目的就是管理单个密钥版本的生命周期,因此不允许将多个版本导入到同一个资源实例中。
解决方案
需要为每个密钥版本定义独立的aws_secretsmanager_secret_version资源实例,再分别导入:
定义多版本资源实例
在你的Terraform配置中,为每个要导入的版本创建单独的资源块,确保它们指向同一个基础密钥:resource "aws_secretsmanager_secret_version" "example_v1" { secret_id = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456" } resource "aws_secretsmanager_secret_version" "example_v2" { secret_id = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456" }配置对应导入块
修改导入配置,将每个版本导入到对应的资源实例:import { to = aws_secretsmanager_secret_version.example_v1 id = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456|xxxxx-xxxxxxx-xxxxxxx-xxxxx" } import { to = aws_secretsmanager_secret_version.example_v2 id = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456|yyyyy-yyyyyyy-yyyyyyy-yyyyy" }执行导入与初始化
运行以下命令完成导入和状态同步:terraform init terraform import
补充说明
- 每个
aws_secretsmanager_secret_version实例对应一个密钥版本,Terraform会独立跟踪每个版本的状态 - 如果需要管理密钥的历史版本,这种多实例的方式完全符合Secrets Manager的版本管理逻辑
- 后续若要更新某个版本,只需修改对应资源块的配置即可
内容的提问来源于stack exchange,提问作者Python coder

