Terraform配置aws_secretsmanager_secret键值对不兼容随机密码如何解决
报错原因
variable是Terraform的输入变量,仅支持静态默认值,不允许在其默认值中引用其他资源的动态返回结果(比如这里random_password.default_password.result是资源生成的动态值),因此触发Variables may not be used here.错误。
解决方案
将动态组装键值对的逻辑从variable块改为使用locals局部值块,或者直接在secret_string参数内直接构造KV对象即可,修改后的完整配置如下:
// TODO: Generalize this to produce a password once per (username, company) // tuple in a list. resource "random_password" "default_password" { length = 20 special = false } # NOTE: Since we aren't specifying a KMS key this will default to using # `aws/secretsmanager`/ resource "aws_secretsmanager_secret" "user_default" { name = "user/default" tags = local.tags } # 用局部值组装动态KV内容,也可以跳过这一步直接在secret_string里构造 locals { secret_contents = { password = random_password.default_password.result company = "test" } } resource "aws_secretsmanager_secret_version" "secret_val" { secret_id = aws_secretsmanager_secret.user_default.id secret_string = jsonencode(local.secret_contents) }
如果不需要复用这个KV结构,也可以简化写法,直接在参数内构造:
resource "aws_secretsmanager_secret_version" "secret_val" { secret_id = aws_secretsmanager_secret.user_default.id secret_string = jsonencode({ password = random_password.default_password.result company = "test" }) }
以上配置执行后,Secrets Manager中会生成键值对格式的密钥,可直接在控制台分别查看password和company两个字段的值。
内容的提问来源于stack exchange,提问作者AlexLordThorsen
相关产品推荐
相关产品推荐

