如何在Terraform中为LogicApps编写if语句实现环境差异化配置
问题原因
你将Terraform的条件逻辑直接写在了<<-BODY原生字符串内部,Terraform不会解析字符串内的三元表达式,只会将其作为普通文本直接传递给Logic App,导致Logic Apps收到的Payload包含未执行的条件语句,出现格式报错。同时原有代码还存在重复定义method参数、JSON结构未闭合、引号未正确转义的问题。
修复后代码
resource "azurerm_logic_app_action_http" "example" { name = "webhook" logic_app_id = azurerm_logic_app_workflow.example.id method = "POST" uri = "http://example.com/some-webhook" headers = { "Content-Type" = "application/json" } body = <<-BODY { "blocks": [ { "text": { "text": "${var.environment_name == "prod" ? "*This is prod alert*" : "*---*"}", "type": "mrkdwn" } } ] } BODY }
核心修改点
- 将三元判断逻辑整体放在Terraform插值符号
${}内部,Terraform会在渲染模板前先执行判断,直接输出对应文本结果,不会把条件语句传递给Logic App - 修正了重复定义的
method参数,删除了多余的GET声明 - 补全了JSON的闭合括号,避免JSON格式非法
- 正确处理了字符串的引号嵌套,不会出现转义错误
如果你需要在文本前保留环境名标识,可以将text字段的插值部分修改为:"[${var.environment_name}] ${var.environment_name == "prod" ? "*This is prod alert*" : "*---*"}"
内容的提问来源于stack exchange,提问作者Kenny_I
相关产品推荐
相关产品推荐

