Terraform导入Azure Logic App时含$的workflow参数未被正确识别
Terraform导入Azure Logic App工作流时$connection参数不一致问题解决
问题场景
使用Terraform导入Azure Logic App工作流后,执行terraform plan发现Terraform计划销毁现有资源中的$connection参数,并创建新的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 = "Object" } } logic_app_workflow_tags = { applicationName = "Logic App workflow" } } }
问题原因
- 参数名称不匹配:Azure Logic App中内置的连接参数名称为
$connection(带美元符号),但tfvars中配置的是connection,Terraform将其识别为两个不同参数,因此计划删除原$connection并新建connection。 - 参数值结构不匹配:现有资源中
$connection的defaultValue并非空对象{},而是包含connectionId、connectionName等具体连接信息的结构,tfvars中的空对象与实际资源值不一致。
解决方案
步骤1:修正参数名称为$connection
将tfvars中的connection参数名改为$connection,匹配Azure Logic App的实际参数名称。
步骤2:同步defaultValue与现有资源一致
通过Azure Portal或Azure CLI获取现有Logic App工作流中$connection参数的实际defaultValue内容,替换tfvars中的空对象。
修正后的tfvars示例
logic_app_workflows = { logic_app_workflow1 = { name = "test-logic" location = "canadacentral" resource_group_name = "test-rg" enabled = true workflow_parameters = { "$connection" = { defaultValue = { connectionId = "/subscriptions/<订阅ID>/resourceGroups/test-rg/providers/Microsoft.Web/connections/<连接名称>" connectionName = "<连接名称>" id = "/subscriptions/<订阅ID>/resourceGroups/test-rg/providers/Microsoft.Web/connections/<连接名称>" } type = "Object" } } logic_app_workflow_tags = { applicationName = "Logic App workflow" } } }
步骤3:验证配置
执行terraform plan,确认计划中不再有销毁和创建$connection参数的操作,资源配置与现有状态完全匹配。
内容的提问来源于stack exchange,提问作者lviswa
相关产品推荐
相关产品推荐

