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
相关产品推荐
相关产品推荐

