Как создать приложение логики с подпиской на 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": []
}