【发布时间】:2020-08-05 07:59:32
【问题描述】:
在 Terraform 0.12.xx 中,是否可以修改地图中的键而不是它们各自的值?让我们假设我们在模块定义中有以下内容:
locals {
task_logging = [
for k, v in var.task_logging_options : {
name = trimprefix(k,"TASK_LOGGING_")
value = v
}
]
}
但是,这里的trimprefix 仅适用于值。
然后我在下面为 ECS 服务创建一个任务定义:
{...}
"logConfiguration": {
"logDriver": "awsfirelens",
"secretOptions": [],
"options": ${jsonencode(local.task_logging_options)}
},
{...}
最后,在模块实例化中,我传递task_logging_options 如下:
task_logging_options = {
TASK_LOGGING_Name = "es"
TASK_LOGGING_Host = "some.host"
}
本地函数应去除前缀 TASK_LOGGING_ 以构建用于 Fluentbit 配置的 JSON 对象。
最终结果应该是一个对象,类似于 terraform plan 中的 sn-p:
~ logConfiguration = {
logDriver = "awsfirelens"
~ options = {
- Buffer_Size = "False" -> null
- HTTP_Passwd = "READACTED" -> null
- HTTP_User = "READACTED" -> null
- Host = "READACTEDd" -> null
- Index = "READACTED" -> null
- Name = "es" -> null
- Port = "READACTED" -> null
+ TASK_LOGGING_Host = "some.host"
+ TASK_LOGGING_Name = "es"
- Tls = "On" -> null
- Trace_Output = "On" -> null
}
secretOptions = []
}
【问题讨论】:
标签: terraform interpolation amazon-ecs