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

Terraform读取Secrets Manager密钥至RDS时jsondecode报错求助

解决Terraform jsondecode解析Secrets Manager密钥时的换行符错误

问题原因

报错提示invalid character '\n' in string literal,说明从AWS Secrets Manager读取的secret_string包含未转义的换行符,jsondecode函数无法解析带有这类字符的JSON字符串。通常是因为Secrets Manager中存储的JSON是格式化后的(带换行、缩进),而非紧凑格式。

解决方案

1. 清理字符串中的换行符

修改locals块,在jsondecode前用replace函数移除所有换行符:

locals {
  your_secret = jsondecode(
    replace(data.aws_secretsmanager_secret_version.creds.secret_string, "\n", "")
  )
}

如果还有制表符或多余空格,可使用regex_replace统一替换为单个空格:

locals {
  your_secret = jsondecode(
    regex_replace(data.aws_secretsmanager_secret_version.creds.secret_string, "\\s+", " ")
  )
}

2. 验证Secrets Manager中的JSON格式

登录AWS控制台,检查Secrets Manager中存储的密钥内容,确保是合法的JSON格式:

  • 避免多余的换行、缩进
  • 确保引号配对正确,逗号使用规范
  • 示例正确格式:{"username":"admin","password":"your_secure_password"}

3. 调试原始字符串(可选)

若不确定问题所在,可添加输出查看原始密钥内容:

output "raw_secret_string" {
  value = data.aws_secretsmanager_secret_version.creds.secret_string
  sensitive = true # 避免明文输出敏感信息
}

执行terraform refresh后,通过terraform output raw_secret_string查看原始字符串,定位具体格式问题。

修改后的完整示例

data "aws_secretsmanager_secret_version" "creds" {
  secret_id = "your_secret"
}

locals {
  your_secret = jsondecode(
    replace(data.aws_secretsmanager_secret_version.creds.secret_string, "\n", "")
  )
}

resource "aws_db_instance" "example" {
  engine               = "mysql"
  engine_version       = "8.0"
  instance_class       = "db.t3.micro"
  name                 = "example_db"
  username             = local.your_secret.username
  password             = local.your_secret.password
  # 其他必要配置...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:46:40