Terraform字符串插值报错:如何修复索引无效问题?
Terraform SecretsManager 配置错误修复
问题说明
期望生成如下格式的Secret字符串:
DB_PASSWORD="secret1" REDIS_PASSWORD="secret1"
但执行terraform plan时触发索引无效错误:
Error: Invalid index ... random_password.app_secrets is object with 2 attributes The given key does not identify an element in this collection value.
错误根源
在aws_secretsmanager_secret_version的secret_string模板中,两处变量引用存在语法错误:
- 字符串插值时,
{x}未使用Terraform的变量引用语法${x},导致变量无法解析 - 引用
random_password.app_secrets实例时,索引部分的{x}同样未正确解析循环变量
修复后代码
locals { require_new_secrets = toset([ "db", "redis" ]) } resource "random_password" "app_secrets" { for_each = local.require_new_secrets length = 16 special = false } resource "aws_secretsmanager_secret" "app_secrets" { name_prefix = "app-secrets-" recovery_window_in_days = 7 tags = var.tags } resource "aws_secretsmanager_secret_version" "app_secrets" { secret_id = aws_secretsmanager_secret.app_secrets.id secret_string = <<-EOF %{for x in local.require_new_secrets} ${upper("${x}_PASSWORD")}="${random_password.app_secrets[x].result}" %{endfor} EOF }
核心修改点
- 将
upper("{x}_PASSWORD")调整为upper("${x}_PASSWORD"),确保循环变量x被正确解析 - 将
random_password.app_secrets["{x}"].result改为random_password.app_secrets[x].result,直接用循环变量作为实例索引 - 为密码值添加双引号,完全匹配你期望的输出格式
内容的提问来源于stack exchange,提问作者devxvda1
相关产品推荐
相关产品推荐

