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

使用Terraform创建Azure Logic App时workflow_parameters输入报错

Terraform创建Azure Logic App工作流报错解决

报错内容

错误:属性值类型不正确

在模块文件../../modules/logic_app_workflow/main.tf第8行的azurerm_logic_app_workflow资源定义中:
8: workflow_parameters = { for k,v in each.value["workflow_parameters"] : k =>jsonencode(v) }
|----------------
| each.value["workflow_parameters"] 是包含1个属性"connection"的对象

属性"workflow_parameters"的取值不恰当:元素"connection"需要字符串类型。

相关代码

模块定义

resource "azurerm_logic_app_workflow" "logic_app_workflow" {
  for_each            = var.logic_app_workflows
  name                = each.value["name"]
  location            = each.value["location"]
  resource_group_name = each.value["resource_group_name"]
  enabled             = each.value["enabled"]
  workflow_parameters = { for k,v in each.value["workflow_parameters"] : k =>jsonencode(v) } 
  tags                = each.value["logic_app_workflow_tags"]
}

变量定义

variable "logic_app_workflows" {
  type = map(object({
    name                    = string
    location                = string
    resource_group_name     = string
    enabled                 = bool
    workflow_parameters     = any
    logic_app_workflow_tags = map(string)
  }))
}

tfvars配置

logic_app_workflows = {
  logic_app_workflow1 = {
    name                = "test-logic"    
    location            = "canadacentral" 
    resource_group_name = "test-rg"       
    enabled             = true
    workflow_parameters = {
      connection = {
        defaultValue = {}
        type         = { type = "Object" }
      }
    }
    logic_app_workflow_tags = {
      applicationName = "Logic App workflow"
    }
  }
}

问题分析

报错核心是Terraform推断workflow_parameters的元素类型不符合要求:azurerm_logic_app_workflow资源的workflow_parameters字段要求是**map(string)**类型(每个值为JSON格式的字符串),但当前变量定义中workflow_parameters设为any,导致Terraform无法正确识别内部嵌套结构的类型,进而无法正确执行jsonencode转换为字符串。

解决方案

方案1:修正变量类型定义

将变量中workflow_parameters的类型从any改为map(any),明确这是一个键值对结构,确保Terraform能正确识别每个值为可被JSON编码的对象:

variable "logic_app_workflows" {
  type = map(object({
    name                    = string
    location                = string
    resource_group_name     = string
    enabled                 = bool
    workflow_parameters     = map(any) # 修改此处
    logic_app_workflow_tags = map(string)
  }))
}

保持模块中的workflow_parameters处理代码不变,重新执行terraform plan/apply即可。

方案2:强制转换为map(string)

如果方案1仍未解决问题,可以在模块中强制将转换后的结果转为map(string)类型:

workflow_parameters = tomap({ for k,v in each.value["workflow_parameters"] : k => jsonencode(v) })

额外建议

确保使用的azurerm provider为最新稳定版本,避免版本兼容问题。可以在versions.tf中指定:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.0.0" # 使用最新稳定版
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:47:37