Как создать приложение логики с подпиской на Event Grid из ARM-шаблона

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

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

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

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

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

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

2 ответа

Решение

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

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

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

Вы можете создать как свою подписку на раздел "Сетка событий", так и подключение к ней в качестве отдельных ресурсов. Примеры шаблонов объектов приведены ниже. Имейте в виду, что соединение использует oauth.

Event Grid Тема Подписка

{
  "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": []
}
Другие вопросы по тегам