Terraform 地形-如何修改地图关键点?

Terraform 地形-如何修改地图关键点?,terraform,interpolation,amazon-ecs,Terraform,Interpolation,Amazon Ecs,在Terraform 0.12.xx中,是否可以修改地图中的关键点而不是其各自的值?假设模块定义中包含以下内容: locals { task_logging = [ for k, v in var.task_logging_options : { name = trimprefix(k,"TASK_LOGGING_") value = v } ] } 但是,trimprefix此处仅适用于值 下面我正在为ECS服务创建一个

在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\u logging\u options
,如下所示:

task_logging_options = {
    TASK_LOGGING_Name = "es"
    TASK_LOGGING_Host = "some.host"
  }
其中本地函数应该去掉前缀
TASK\u LOGGING\u
,为Fluentbit配置构建JSON对象

最终结果应该是一个对象,类似于terraform plan中的代码片段:

~ 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 = []
                    }
   

不完全理解您想要实现什么,但您也可以使用
trimprefix(k,“任务日志记录”)
作为键

例如:


locals { 
  task_logging2 = [
    for k, v in var.task_logging_options : {
        trimprefix(k,"TASK_LOGGING_") = v
      }
    ]  
}
将导致
本地。任务记录2
为:

[
  {
    "Host" = "some.host"
  },
  {
    "Name" = "es"
  },
]
{
  "Host" = "some.host"
  "Name" = "es"
}
更新 如果需要对象,可以使用以下选项:

locals {
  
  task_logging2 = {
    for k, v in var.task_logging_options : 
        trimprefix(k,"TASK_LOGGING_") => v
      }   
}
这导致
本地。任务记录2
为:

[
  {
    "Host" = "some.host"
  },
  {
    "Name" = "es"
  },
]
{
  "Host" = "some.host"
  "Name" = "es"
}

不完全理解您想要实现什么,但您也可以使用
trimprefix(k,“任务日志记录”)
作为键

例如:


locals { 
  task_logging2 = [
    for k, v in var.task_logging_options : {
        trimprefix(k,"TASK_LOGGING_") = v
      }
    ]  
}
将导致
本地。任务记录2
为:

[
  {
    "Host" = "some.host"
  },
  {
    "Name" = "es"
  },
]
{
  "Host" = "some.host"
  "Name" = "es"
}
更新 如果需要对象,可以使用以下选项:

locals {
  
  task_logging2 = {
    for k, v in var.task_logging_options : 
        trimprefix(k,"TASK_LOGGING_") => v
      }   
}
这导致
本地。任务记录2
为:

[
  {
    "Host" = "some.host"
  },
  {
    "Name" = "es"
  },
]
{
  "Host" = "some.host"
  "Name" = "es"
}

我试过了。也许我忘了提到,结果应该是一个对象。我将编辑我的问题。@AlanKis我更新了答案,现在给出了对象。我已经尝试过了。也许我忘了提到,结果应该是一个对象。我将编辑我的问题。@AlanKis我更新了答案,现在给出了对象。