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

如何在Terraform中为列表内map类型变量的RDS密码字段分别提示用户输入

可行实现方案

方案1:拆分变量结构,原生Terraform支持实现

你可以把密码字段从原来的rds_config_list中剥离,单独定义为敏感map变量,再通过local块合并为完整配置:

  1. 首先调整变量定义,移除rds_config_list中的rds_password字段,新增独立密码变量:
variable "rds_config_list" {
  type = list(object({
    rds_name                           = string
    rds_identifier                     = string
    rds_snapshot_identifier            = string
    rds_postgres_instance_class        = string
    rds_postgres_engine_version        = string
    rds_postgres_family                = string
    rds_postgres_allocated_storage     = number
    rds_postgres_max_allocated_storage = number
    rds_backup_retention_period        = number
    rds_postgres_multi_az              = bool
    rds_postgres_deletion_protection   = bool
  }))
  description = "RDS实例基础配置列表"
}

variable "rds_passwords" {
  type = map(string)
  description = "各RDS实例对应密码,key为rds_name,格式示例:{\"shiftleft\" = \"密码1\", \"shiftleft2\" = \"密码2\"}"
  sensitive = true
}
  1. 新增local块合并基础配置和密码:
locals {
  full_rds_configs = [
    for rds in var.rds_config_list : merge(rds, {
      rds_password = var.rds_passwords[rds.rds_name]
    })
  ]
}

后续你执行terraform apply时如果没有提前传入rds_passwords的值,Terraform会自动提示你输入该map参数,你按照格式填入对应实例的密码即可,也可以通过-var参数、或者单独的敏感tfvars文件传入密码。


方案2:外部脚本预处理,实现逐实例交互式输入

如果想要更友好的逐个提示输入,不需要手动拼写map格式,可以写简单的预处理脚本:

  1. 脚本先读取tfvars中rds_config_list的所有rds_name
  2. 循环提示用户输入每个实例的密码,自动生成passwords.auto.tfvars文件存储密码map
  3. 执行terraform apply自动加载生成的密码配置

示例shell脚本逻辑参考:

#!/bin/bash
# 需提前安装hcl2json、jq工具用于解析tfvars
RDS_NAMES=$(hcl2json terraform.tfvars | jq -r '.rds_config_list[].rds_name')
echo "rds_passwords = {" > passwords.auto.tfvars
for name in $RDS_NAMES; do
  read -s -p "请输入RDS实例 ${name} 的密码: " pwd
  echo ""
  echo "  \"${name}\" = \"${pwd}\"" >> passwords.auto.tfvars
done
echo "}" >> passwords.auto.tfvars

记得将passwords.auto.tfvars加入.gitignore,避免敏感信息提交到代码仓库。


注意事项

所有密码相关的变量必须加sensitive = true配置,避免Terraform在日志、输出中打印明文密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:06:04