求助:如何通过Terraform配置创建多租户Consumption计划类型的Azure Logic App
我完全懂你的处境——想通过Terraform创建采用Consumption(多租户)计划的Azure Logic App,结果翻遍AzureRM Provider的资源列表,只找到针对单租户Standard计划的azurerm_logic_app_standard,压根没有专门对应Consumption类型的原生资源。别慌,这里有两个实用的解决方案,帮你搞定这个需求:
方案1:通过ARM模板部署(最推荐的稳定方案)
Consumption计划的Logic App本质对应Azure ARM资源类型Microsoft.Logic/workflows,虽然Terraform没有原生封装这个资源,但我们可以用azurerm_resource_group_template_deployment资源来直接调用ARM模板完成创建,这是目前最可靠的方式,还能让Terraform正常管理资源状态。
下面是一个完整的示例,我们把ARM模板内联在Terraform配置中:
# 先创建依赖的资源组 resource "azurerm_resource_group" "logic_app_rg" { name = "consumption-la-rg" location = "East US" } # 部署Consumption计划的Logic App resource "azurerm_resource_group_template_deployment" "consumption_logic_app" { name = "deploy-consumption-logic-app" resource_group_name = azurerm_resource_group.logic_app_rg.name template_content = jsonencode({ "$schema" = "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#" "contentVersion" = "1.0.0.0" "resources" = [ { "type" = "Microsoft.Logic/workflows" "apiVersion" = "2017-07-01" "name" = "my-multi-tenant-logic-app" "location" = azurerm_resource_group.logic_app_rg.location "properties" = { "state" = "Enabled" # 这里可以替换为你实际的工作流定义 "definition" = jsonencode({ "$schema" = "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#" "contentVersion" = "1.0.0.0" "parameters" = {} "triggers" = {} "actions" = {} "outputs" = {} }) "parameters" = {} } } ] }) }
你只需要根据自己的需求修改definition部分,添加对应的触发器、动作即可,Terraform会像管理其他资源一样处理这个部署的生命周期(创建、更新、销毁)。
方案2:借助Azure CLI + Terraform null_resource(适合临时场景)
如果你的场景比较简单,或者只是需要快速创建,也可以用null_resource配合local-exec provisioner,直接调用Azure CLI命令来创建Consumption Logic App:
resource "azurerm_resource_group" "logic_app_rg" { name = "consumption-la-rg" location = "East US" } resource "null_resource" "create_consumption_la" { provisioner "local-exec" { command = <<EOT az logic workflow create \ --resource-group ${azurerm_resource_group.logic_app_rg.name} \ --name my-multi-tenant-logic-app \ --location ${azurerm_resource_group.logic_app_rg.location} \ --definition '{"$schema":"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#","contentVersion":"1.0.0.0","parameters":{},"triggers":{},"actions":{},"outputs":{}}' EOT } depends_on = [azurerm_resource_group.logic_app_rg] }
⚠️ 注意:这个方案的局限性是Terraform无法直接跟踪这个Logic App的状态,后续的配置更新、资源销毁需要手动处理,所以更适合一次性创建的临时场景。
补充说明
目前AzureRM Provider确实还没有推出针对Consumption计划Logic App的原生资源,你可以关注Provider的动态,但在原生资源发布前,上面的两个方案是行业内的主流解决办法。
内容的提问来源于stack exchange,提问作者Dinesh Kumar Mohan

