我有一个 StringList 类型的 SSM 参数,其中包含 AWS 账户 ID,例如
12345678910, 12345678911, 12345678912, ... etc
这被保存为 SSM 参数,因为列表是由其他进程更新的(我不会在这里讨论该进程,因为它有点无关紧要,除了说对于每个 terraform 运行,列表每次都可能略有不同 - 因此不保存静态地在 tf 代码中)
我的根模块中有一个数据源,定义如下:
data "aws_ssm_parameter" "account_list" {
name = "account_list"
}
然后像这样填充本地:
accounts = [
data.aws_ssm_parameter.account_list.value
]
这可以验证,但不起作用,因为数据是作为单个字符串获取的,例如:
"12345678910, 12345678911, 12345678912"
所以会发生的情况是列表中只有一个值。我已经尝试过
split(",",data.aws_ssm_parameter.account_list.value)
但这只会给我带来与string is expected
相关的错误
我真正想要的是动态填充本地值,就像
accounts = [
"12345678910",
"12345678911",
"12345678912"
]
我显然做错了什么,并且大量谷歌搜索并没有让我找到解决方案。
这可能吗?我不应该为此使用 SSM 参数吗?
正如文档所述,
数据源当前遵循 SSM API 的行为来返回字符串值,无论参数类型如何。对于 StringList 类型,我们可以使用内置的
函数来获取列表中的值。示例:split()
split(",", data.aws_ssm_parameter.subnets.value)
因此您可以使用类似的方法来检索列表:
locals {
accounts = split(",", data.aws_ssm_parameter.account_list.value)
}
旁注:AWS 账户 ID 通常被认为是敏感的,因此请注意这些值将以未加密的纯文本格式存储在状态中。