【问题标题】:How do I create Logic App with Event Grid subscription from ARM-template如何从 ARM 模板创建具有事件网格订阅的逻辑应用程序
【发布时间】:2019-07-16 11:46:29
【问题描述】:

我制作了一个监听事件网格主题的逻辑应用程序,它工作正常,但如果我删除它并尝试从模板创建它就不起作用。它永远不会运行。

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

为了解决这个问题,我在 Powershell 脚本中添加了命令来对其进行身份验证。这工作正常,但这当然不会创建订阅。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我相信在您第一次部署后没有办法解决所需的授权。因此,最简单的解决方案是拥有 2 个单独的模板 - 一个用于 API 连接,另一个用于逻辑应用。

    您的 PowerShell 脚本将首先部署 API 连接,对其进行授权,然后部署逻辑应用。

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

    【讨论】:

    • 这听起来像是这样做的方式,我让它工作就是这样。但是,除非更改订阅名称,否则在授权连接后重新运行相同模板不会创建订阅,这感觉就像一个错误。
    【解决方案2】:

    您可以将事件网格主题订阅和与它的逻辑应用连接创建为单独的资源。示例模板对象如下。请记住,连接正在使用 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": [
      ]
    }
    

    网络连接

    {
      "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": []
    }
    

    【讨论】:

    • 非常感谢伙计!我正在努力让 Event Grid Logic App Monitoring 连接设置并通过 ARM 模板连接。你介意告诉你是如何找到这些参数值的吗?我找不到他们的任何文档。
    • @pranav-jituri 很高兴为您提供帮助。看看这个 - GET https://management.azure.com/subscriptions/[your subscription id]/providers/Microsoft.Web/locations/[your connection region (e.g. eastus)]/managedApis/azureeventgrid?api-version=2016-06-01。您还需要一个带有不记名令牌的 Authorization 标头。您可以修改 any 逻辑应用 api 连接的 managedApis 值。
    猜你喜欢
    • 2020-07-18
    • 2021-11-04
    • 1970-01-01
    • 2019-11-05
    • 2020-11-21
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多