You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform中能否在string template或jsonencode内使用三元运算符?

在Terraform中使用三元运算符处理JSON结构

可以在Terraform的字符串模板或jsonencode函数内使用三元运算符,但你提供的示例存在语法错误,需遵循Terraform的表达式规则调整写法,以下是修正后的实现:

一、使用jsonencode的正确方式

jsonencode接受Terraform原生表达式,无需用${}包裹变量,直接在对象结构中嵌入三元运算符即可:

event_pattern = jsonencode({
  "detail-type" = ["Step Functions Execution Status Change"],
  "detail" = {
    "stateMachineArn" = var.sfn_arn != "" ? [aws_sfn_state_machine.myapp.arn, var.yourapp_sfn_arn] : [aws_sfn_state_machine.myapp.arn],
    "status" = ["FAILED"]
  },
  "source" = ["aws.states"]
})

Terraform会先计算三元表达式的结果,再将整个对象序列化为标准JSON字符串,避免手动拼接的语法错误。

二、使用字符串模板(HEREDOC)的正确方式

字符串模板中需用${}包裹Terraform表达式,为保证JSON语法正确性,建议用jsonencode处理三元表达式的结果:

event_pattern = <<-EOF
{
  "detail-type": ["Step Functions Execution Status Change"],
  "detail": {
    "stateMachineArn": ${jsonencode(var.sfn_arn != "" ? [aws_sfn_state_machine.myapp.arn, var.yourapp_sfn_arn] : [aws_sfn_state_machine.myapp.arn])},
    "status": ["FAILED"]
  },
  "source": ["aws.states"]
}
EOF

这种方式能自动处理数组的JSON格式转义,避免手动拼接字符串时出现引号、逗号不匹配的问题。

内容的提问来源于stack exchange,提问作者user1119283

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:21:12