Обновите шаблоны Azure ARM с помощью соединителя
Я использую шаблон ARM для развертывания приложения логики, которое отправляет почту через коннектор office365. Он прекрасно работает для его развертывания, но если я обновлю шаблон и захочу повторно развернуть его, соединитель к office365 отключится, и мне придется снова авторизовать соединение. Есть ли способ избежать отсоединения разъема, когда я хочу обновить logicapp?
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"env_suffix": {
"defaultValue": null,
"type": "String"
}
},
"variables": {
"workflow_name": "[concat('GoMail', parameters('env_suffix'))]"
},
"resources": [
{
"type": "Microsoft.Web/connections",
"apiVersion": "2016-06-01",
"location": "[resourceGroup().location]",
"name": "office365",
"properties": {
"api": {
"id": "[concat(subscription().id,'/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/office365')]"
},
"displayName": "office365",
"parameterValues": {
}
}
},
{
"type": "Microsoft.Logic/workflows",
"name": "[variables('workflow_name')]",
"apiVersion": "2017-07-01",
"location": "westeurope",
"dependsOn": [
"[resourceId('Microsoft.Web/connections', 'office365')]"
],
"tags": {},
"scale": null,
"properties": {
"state": "Enabled",
"parameters": {
"$connections": {
"value": {
"office365": {
"connectionId": "[resourceId('Microsoft.Web/connections', 'office365')]",
"connectionName": "office365",
"id": "[concat(subscription().id,'/providers/Microsoft.Web/locations/westeurope/managedApis/office365')]"
}
}
}
},
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Condition": {
"actions": {},
"else": {
"actions": {
"Condition_2": {
"actions": {
"Send_an_email_2": {
"inputs": {
"body": {
"Body": "@{base64ToString(triggerBody()?['payload'])}",
"From": "@triggerBody()?['from']",
"Importance": "Normal",
"IsHtml": true,
"Subject": "@triggerBody()?['subject']",
"To": "mailme@company.com"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"else": {
"actions": {
"Until": {
"actions": {
"Delay": {
"inputs": {
"interval": {
"count": 10,
"unit": "Second"
}
},
"runAfter": {
"Send_an_email_3": [
"Failed"
]
},
"type": "Wait"
},
"Send_an_email_3": {
"inputs": {
"body": {
"Body": "@{base64ToString(triggerBody()?['payload'])}",
"From": "noreply@company.com",
"Importance": "Normal",
"IsHtml": true,
"Subject": "@triggerBody()?['subject']",
"To": "@triggerBody()?['email']"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"expression": "@equals(outputs('Send_an_email_3')['statusCode'], 200)",
"limit": {
"count": 5,
"timeout": "PT5M"
},
"runAfter": {},
"type": "Until"
}
}
},
"expression": "@endswith(triggerBody()?['email'], 'integtest.com')",
"runAfter": {},
"type": "If"
}
}
},
"expression": "@equals(triggerBody()?['email'], 'ping')",
"runAfter": {},
"type": "If"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {
"$connections": {
"defaultValue": {},
"type": "Object"
}
},
"triggers": {
"manual": {
"inputs": {
"schema": {
"properties": {
"email": {
"type": "string"
},
"payload": {
"type": "string"
},
"subject": {
"type": "string"
}
},
"type": "object"
}
},
"kind": "Http",
"type": "Request"
}
}
}
}
}
]
}
2 ответа
Вы можете отделить шаблон подключения Office365 Api от шаблона приложений логики, вам просто нужно развернуть и авторизовать подключение Api за один раз, в приложении логики вы просто используете авторизованное подключение Api.
Фактически, это зависит от категории используемого вами соединения API, если не от типа соединения API (Office365, Outlook, Keyvalut Custom Connector, динамического CRM, Salesforce), который требует авторизации MFA, вы можете поместить свой шаблон соединения Api вместе с вашим Шаблон приложения логики.
Если вы повторно развернете приложение логики через шаблон, соединение должно быть разорвано. Я не думаю, что вы можете авторизовать соединение вместе с шаблоном. Соединитель авторизован Azure AD, шаблон ARM включает только ресурсы вашей подписки, но не уровень Azure AD, объявление Azure находится над подпиской.
Вот аналогичная проблема, на которую ответила Microsoft, вы можете посмотреть.
Разрешение:
Основываясь на наблюдениях, у меня были обсуждения с экспертами, и кажется, что соединитель в настоящее время может принимать только аутентификацию Windows AD и, следовательно, проблему. В группе продуктов есть это обновление функции в бэклоге, и он будет обновлять соединитель в ближайшие дни, у нас пока нет ETA по этому вопросу.
В нем говорится, что функция будет обновляться в ближайшие дни, если функция будет поддерживать PowerShell, я думаю, что она, вероятно, будет поддерживать шаблон ARM, потому что два способа должны по существу вызывать один и тот же API остальных.