从 AWS SSM 参数动态填充 terraform 字符串列表

问题描述 投票:0回答:1

我有一个 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 参数吗?

amazon-web-services terraform terraform-provider-aws aws-ssm
1个回答
0
投票

正如文档所述,

数据源当前遵循 SSM API 的行为来返回字符串值,无论参数类型如何。对于 StringList 类型,我们可以使用内置的

split()
函数来获取列表中的值。示例:
split(",", data.aws_ssm_parameter.subnets.value)

因此您可以使用类似的方法来检索列表:

locals {
    accounts = split(",", data.aws_ssm_parameter.account_list.value)
}

旁注:AWS 账户 ID 通常被认为是敏感的,因此请注意这些值将以未加密的纯文本格式存储在状态中。

© www.soinside.com 2019 - 2024. All rights reserved.