Terraform中能否在单个SSM参数存储多值?尝试后仅存单值
单个SSM参数存储多个值的实现方法
首先明确:可以在单个AWS SSM参数中存储多个值,你当前的问题出在Terraform代码的写法上,而非SSM本身的限制。
你原来的代码里,for_each使用了重复的键"/default/animals",Terraform的map结构不允许重复键,后续赋值会直接覆盖前面的,所以最终只会创建一个参数,值是最后一个turtle。
下面是两种正确的实现方式:
方式1:使用SSM的StringList类型(推荐)
SSM原生支持StringList类型,专门用来存储逗号分隔的多个字符串值,读取时可以直接解析为列表。
先优化变量定义(没必要单独定义三个变量,用列表更简洁):
variable "animals" { type = list(string) default = ["dog", "cat", "turtle"] }
然后创建SSM参数:
resource "aws_ssm_parameter" "animals" { name = "/default/animals" type = "StringList" value = join(",", var.animals) }
这里用join函数把列表拼接成逗号分隔的字符串,符合StringList的格式要求。
方式2:存储为JSON格式字符串
如果需要更复杂的结构(比如键值对),可以把数据序列化为JSON字符串,存储为普通的String类型:
resource "aws_ssm_parameter" "animals" { name = "/default/animals" type = "String" value = jsonencode(var.animals) }
读取参数时,用jsondecode函数就能把字符串还原为列表。
内容的提问来源于stack exchange,提问作者amateurprogrammer
相关产品推荐
相关产品推荐

