我们有Terraform来创建和部署Logic。
我们还在Logic中创建了工作流。
我们希望实现逻辑应用程序的创建和内部工作流的自动化。
例如,请参见下面的工作流:

发布于 2022-01-24 11:27:28
在部署逻辑应用程序工作流( bingsmap work )时,terraform有一个限制,不能创建工作流中所需的api连接,只能通过arm模板或从门户手动部署,然后需要在工作流中手动配置,如: connection和E 212 outlook E 116connectionE 217。
如果您是,开始从terraform部署逻辑应用程序,那么快速修复将在手动创建工作流之后引用工作流的ARM模板,然后转到逻辑应用程序代码视图,以获得如何用terraform编写自定义操作的想法。
或
您可以从terraform部署逻辑应用程序,然后使用逻辑应用程序代码视图中的代码使用https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/resource_group_template_deployment从terraform部署。
参考资料:
用于部署逻辑应用程序和工作流,您可以使用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线程中提到的解决方案来配置它。
发布于 2022-02-16 12:25:52
你应该看看逻辑应用程序(标准)。它们提供了更好的开发/部署经验。您可以创建使用terraform的逻辑应用程序标准运行库并使用Azure CI/CD管道部署工作流。
然而,在逻辑应用程序(标准)中,只有三层定价:WS1、WS2和WS3。即使您的实例处于空闲状态,也始终需要支付费用。逻辑应用程序(标准)将托管在应用程序服务中。好处是:您的工作流代码可以在git中进行源代码控制,并且您可以使用在VSCode中本地开发/调试。
所以可以归结为这样的比较:
逻辑应用程序消费
优点
缺点
逻辑应用程序(标准)
优点
缺点
目前,我们决定运行标准模型,因为任何东西都可以用CI/CD自动控制。然而,我们只运行少量的工作流,而且成本很高。我们最好选择消费方式。
发布于 2022-06-21 07:54:21
在以上答案的基础上,您现在可以使用
然后,可以在工作流参数或自定义操作主体下的连接中使用连接。
https://stackoverflow.com/questions/70757669
复制相似问题