Как создать приложение логики с подпиской на Event Grid из ARM-шаблона - PullRequest
0 голосов
/ 22 февраля 2019

Я создал приложение логики, которое слушает тему сетки событий, и она отлично работает, но если я удаляю ее и пытаюсь создать из шаблона, она не работает.Он никогда не запускается.

Проблема заключается в том, что, хотя он создает соединение API с сеткой событий, он оставляет его неавторизованным и не создает никакой подписки на тему сетки событий.Ни в коем случае не отображаются какие-либо ошибки.Все успешно, но оно просто не создает все, что должно.

Чтобы обойти это, я добавил команды в скрипт Powershell для аутентификации.Это работает нормально, но это, конечно, не создает подписку.

Если я снова запусту ARM-шаблон, я ожидал, что он создаст его сейчас, поскольку соединение недействительно, но нет, это не так.Я полагаю, Azure понимает, что ничего не изменилось в шаблоне и ничего не делает?Если я отредактирую ARM-шаблон, изменим имя подписки и снова разверну его, тогда подписка будет создана и она начнет работать.

Конечно, я мог бы дважды вызвать шаблон с двумя разными именами подписки в качестве параметра, ноэто звучит глупо.Должен быть какой-то лучший способ.

Итак, как лучше всего создать такое логическое приложение из шаблонов и скриптов?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете создать как подписку на раздел «Сетка событий», так и подключение к ней приложений логики как отдельные ресурсы.Примеры шаблонов объектов приведены ниже.Помните, что соединение использует 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": []
}
0 голосов
/ 25 февраля 2019

Я полагаю, что нет способа обойти авторизацию, требуемую после первого развертывания.Таким образом, самое простое решение состоит в том, чтобы иметь 2 отдельных шаблона - один для соединения API и другой для приложения логики.

Ваш сценарий PowerShell сначала развернет соединение API, авторизует его, а затем развернет приложение логики.

Вы также можете иметь их в том же шаблоне и контролировать, который развертывается с помощью condition на каждом ресурсе.

...