如何使用ARM模板的事件网格订阅创建Logic App

时间:2019-02-22 11:29:21

标签: azure azure-logic-apps azure-eventgrid

我已经制作了一个可以监听事件网格主题的Logic应用程序,它可以正常工作,但是如果我删除它并尝试从模板中创建它,将无法正常工作。它永远不会运行。

问题在于,尽管它确实创建了与事件网格的API连接,但未授权它,并且也未创建对事件网格主题的任何订阅。绝对不会显示任何错误。一切都成功了,但并没有创造出应有的一切。

要解决此问题,我向Powershell脚本添加了命令以对其进行身份验证。这可以正常工作,但是这当然不会创建订阅。

如果我再次运行ARM模板,我希望它现在可以创建它,因为连接无效,但是无效。我想Azure意识到模板中没有任何变化,什么也没做?如果我编辑ARM模板并更改订阅名称,然后再次部署它,那么将创建订阅并开始工作。

我当然可以使用2个不同的订阅名称作为参数两次调用模板,但这听起来很愚蠢。必须有更好的方法。

那么从模板和脚本创建这种逻辑应用程序的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我认为,第一次部署后,无法解决所需的授权问题。因此,最简单的解决方案是拥有2个单独的模板-一个用于API连接,另一个用于Logic App。

您的PowerShell脚本将首先部署API连接,对其进行授权,然后再部署Logic App。

您也可以将它们放在同一模板中,并通过在每个资源上使用condition来控制部署。

答案 1 :(得分:0)

您既可以创建事件网格主题订阅,也可以将Logic Apps连接创建为单独的资源。示例模板对象如下。请记住,该连接正在使用oauth。

事件网格主题订阅

{
  "type": "Microsoft.EventGrid/topics/providers/eventSubscriptions",
  "name": "[concat(parameters('TopicName'), '/Microsoft.EventGrid/', variables('name'))]",
  "location": "[parameters('Location')]",
  "apiVersion": "2018-01-01",
  "properties": {
    "destination": {
      "endpointType": "WebHook",
      "properties": {
        "endpointUrl": "[parameters('Endpoint')]"
      }
    },
    "filter": {
      "includedEventTypes": [
        "[parameters('EventType')]"
      ]
    }
  },
  "dependsOn": [
  ]
}

Web连接

{
  "type": "Microsoft.Web/connections",
  "name": "[variables('connectionName')]",
  "apiVersion": "2016-06-01",
  "location": "[parameters('ConnectionLocation')]",
  "properties": {
    "displayName": "[variables('connectionName')]",
    "api": {
      "id": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/northcentralus/managedApis/azureeventgrid/')]"
    },
    "parameterValues": {
      "token:clientId": "[parameters('ConnectionClientId')]",
      "token:clientSecret": "[parameters('ConnectionClientSecret')]",
      "token:TenantId": "[parameters('ConnectionTenantId')]",
      "token:resourceUri": "https://management.core.windows.net/",
      "token:grantType": "client_credentials"
    }
  },
  "dependsOn": []
}