部署逻辑应用工作流程时 terraform 存在限制,您无法创建工作流程所需的 api 连接 ,只能通过 arm 模板部署或从门户手动部署,然后需要在工作流中手动配置 喜欢 bingsmap 连接和outlook 连接。
如果您开始从 terraform 部署逻辑应用程序,那么快速修复将是在手动创建工作流后参考工作流的 ARM 模板并转到逻辑应用程序代码视图,了解如何在 terraform 中编写自定义操作。
或
您可以只需从 terraform 部署 logicapp,然后使用逻辑应用代码视图中的代码从 terraform 部署 使用 azurerm_resource_group_template_deployment。
参考资料:
Another SO thread where I have mentioned about configuring webapiconnections for logic app using ARM template
***Example provide by AZApril on how to use terraform to deploy logic app and then workflow using template deployment***
为了部署逻辑应用和工作流,您可以使用 terraform 中的以下内容:
provider "azurerm" {
features{}
}
data "azurerm_resource_group" "example" {
name="ansumantest"
}
resource "azurerm_logic_app_workflow" "example" {
name = "workflow1"
location = data.azurerm_resource_group.example.location
resource_group_name = data.azurerm_resource_group.example.name
}
resource "azurerm_resource_group_template_deployment" "apiconnections" {
name = "group-deploy"
resource_group_name = data.azurerm_resource_group.example.name
deployment_mode = "Incremental"
template_content = <<TEMPLATE
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"connections_bingmaps_name": {
"defaultValue": "bingmaps",
"type": "string"
},
"connections_office365_name": {
"defaultValue": "office365",
"type": "string"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Web/connections",
"apiVersion": "2016-06-01",
"name": "[parameters('connections_bingmaps_name')]",
"location": "eastus",
"kind": "V1",
"properties": {
"displayName": "BingMapsConnection",
"statuses": [
{
"status": "Connected"
}
],
"customParameterValues": {},
"nonSecretParameterValues": {},
"createdTime": "2022-01-24T08:26:56.8147674Z",
"changedTime": "2022-01-24T08:28:05.4634315Z",
"api": {
"name": "[parameters('connections_bingmaps_name')]",
"displayName": "Bing Maps",
"description": "Bing Maps",
"iconUri": "[concat('https://connectoricons-prod.azureedge.net/releases/v1.0.1538/1.0.1538.2619/', parameters('connections_bingmaps_name'), '/icon.png')]",
"brandColor": "#008372",
"id": "[concat('/subscriptions/<subscriptionId>/providers/Microsoft.Web/locations/eastus/managedApis/', parameters('connections_bingmaps_name'))]",
"type": "Microsoft.Web/locations/managedApis"
},
"testLinks": []
}
},
{
"type": "Microsoft.Web/connections",
"apiVersion": "2016-06-01",
"name": "[parameters('connections_office365_name')]",
"location": "eastus",
"kind": "V1",
"properties": {
"displayName": "<emailid>",
"statuses": [
{
"status": "Connected"
}
],
"customParameterValues": {},
"nonSecretParameterValues": {},
"createdTime": "2022-01-24T08:33:55.8159813Z",
"changedTime": "2022-01-24T08:35:04.9083183Z",
"api": {
"name": "[parameters('connections_office365_name')]",
"displayName": "Office 365 Outlook",
"description": "Microsoft Office 365 is a cloud-based service that is designed to help meet your organization's needs for robust security, reliability, and user productivity.",
"iconUri": "[concat('https://connectoricons-prod.azureedge.net/releases/v1.0.1538/1.0.1538.2621/', parameters('connections_office365_name'), '/icon.png')]",
"brandColor": "#0078D4",
"id": "[concat('/subscriptions/<subscriptionId>/providers/Microsoft.Web/locations/eastus/managedApis/', parameters('connections_office365_name'))]",
"type": "Microsoft.Web/locations/managedApis"
},
"testLinks": [
{
"requestUri": "[concat('https://management.azure.com:443/subscriptions/<subscriptionId>/resourceGroups/ansumantest/providers/Microsoft.Web/connections/', parameters('connections_office365_name'), '/extensions/proxy/testconnection?api-version=2016-06-01')]",
"method": "get"
}
]
}
}
],
"outputs": {
"bingmapid":{
"type": "string",
"value" : "[resourceId('Microsoft.Web/connections', parameters('connections_bingmaps_name'))]"
} ,
"officeid": {
"type": "string",
"value": "[resourceId('Microsoft.Web/connections', parameters('connections_office365_name'))]"
}
}
}
TEMPLATE
depends_on = [
azurerm_logic_app_workflow.example
]
}
locals {
bingmapconnectionid = jsondecode(azurerm_resource_group_template_deployment.apiconnections.output_content).bingmapid.value
office365connectionid = jsondecode(azurerm_resource_group_template_deployment.apiconnections.output_content).officeid.value
}
resource "azurerm_logic_app_trigger_recurrence" "trigger" {
name = "Recurrence"
logic_app_id = azurerm_logic_app_workflow.example.id
frequency = "Week"
interval = 1
schedule {
at_these_minutes=[0,15,30,45]
at_these_hours =["8","9","7"]
on_these_days=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
}
depends_on = [
azurerm_resource_group_template_deployment.apiconnections
]
}
resource "azurerm_logic_app_action_custom" "action1" {
name = "Get_route_and_travel_time_with_traffic"
logic_app_id = azurerm_logic_app_workflow.example.id
body = <<BODY
{
"runAfter": {},
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"name": "${local.bingmapconnectionid}"
}
},
"method": "get",
"path": "/V3/REST/V1/Routes/@{encodeURIComponent('Driving')}",
"queries": {
"distanceUnit": "Mile",
"optimize": "timeWithTraffic",
"wp.0": "21930 SE 51st ,Issaugh,WA,98029",
"wp.1": "3003 160th Ave,Bellevue,WA,98029"
}
}
}
BODY
depends_on = [
azurerm_logic_app_trigger_recurrence.trigger
]
}
resource "azurerm_logic_app_action_custom" "action2" {
name = "Create_variable_to_store_travel_time"
logic_app_id = azurerm_logic_app_workflow.example.id
body = <<BODY
{
"inputs": {
"variables": [
{
"name": "travelTime",
"type": "integer",
"value": "@div(body('Get_route_and_travel_time_with_traffic')?['travelDurationTraffic'],60)"
}
]
},
"runAfter": {
"Get_route_and_travel_time_with_traffic": [
"Succeeded"
]
},
"type": "InitializeVariable"
}
BODY
depends_on = [
azurerm_logic_app_action_custom.action1
]
}
resource "azurerm_logic_app_action_custom" "condition" {
name = "If_travel_time_exceeds_limit"
logic_app_id = azurerm_logic_app_workflow.example.id
body = <<BODY
{
"actions": {
"Send_email_with_travel_time": {
"runAfter": {},
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "<p>Add extra travel time (minutes): @{sub(variables('travelTime'),15)}</p>",
"Subject": "Current travel time (minutes): @{variables('travelTime')}",
"To": "admin@xxxxxxxxxx.onmicrosoft.com"
},
"host": {
"connection": {
"name": "${local.office365connectionid}"
}
},
"method": "post",
"path": "/v2/Mail"
}
}
},
"runAfter": {
"Create_variable_to_store_travel_time": [
"Succeeded"
]
},
"expression": {
"and": [
{
"greater": [
"@variables('travelTime')",
15
]
}
]
},
"type": "If"
}
BODY
depends_on = [
azurerm_logic_app_action_custom.action2
]
}
输出:
所有东西都已部署,但 api 连接在逻辑应用中出现错误,因此您必须手动或通过以下方式进行配置我在另一个 SO 线程中提到的解决方案。