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

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
}

核心修改点

  1. 将upper("{x}_PASSWORD")调整为upper("${x}_PASSWORD"),确保循环变量x被正确解析
  2. 将random_password.app_secrets["{x}"].result改为random_password.app_secrets[x].result,直接用循环变量作为实例索引
  3. 为密码值添加双引号,完全匹配你期望的输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:24:17