Управляемые приложения Azure с уведомлениями
Уведомления управляемых приложений Azure позволяют издателям автоматизировать действия на основе событий жизненного цикла экземпляров управляемых приложений. Издатели могут указывать пользовательские конечные точки веб-перехватчика уведомлений для получения уведомлений о событиях новых и имеющихся экземпляров управляемых приложений. Издатели могут настраивать пользовательские рабочие процессы во время подготовки, обновления и удаления приложений.
Начало работы
Чтобы начать получать уведомления управляемого приложения, создайте общедоступную конечную точку HTTPS. Укажите конечную точку при публикации определения приложения каталога услуг или предложения Microsoft Azure Marketplace.
Далее представлено пошаговое объяснение для быстрого начала работы:
- Создайте общедоступную конечную точку HTTPS, которая регистрирует входящие запросы POST и возвращает
200 OK
. - Добавьте конечную точку в определение приложения каталога услуг или в предложение Azure Marketplace, как описано далее в этой статье.
- Создайте экземпляр управляемого приложения, который ссылается на определение приложения или предложение Azure Marketplace.
- Проверьте, получены ли уведомления.
- Включите авторизацию, как описано в разделе Проверка подлинности конечной точки этой статьи.
- Следуйте инструкциям из раздела Схема уведомления этой статьи, чтобы проанализировать запросы уведомлений и реализовать бизнес-логику на основе уведомления.
Добавление уведомлений об определении приложения из каталога услуг
В следующих примерах показано, как добавить URI конечной точки уведомлений с помощью портала или REST API.
Портал Azure
Сведения о начале работы см . в кратком руководстве по созданию и публикации определения управляемого приложения Azure.
REST API
Примечание.
Вы можете указать только одну конечную точку в свойстве notificationEndpoints
определения управляемого приложения.
{
"properties": {
"isEnabled": true,
"lockLevel": "ReadOnly",
"displayName": "Sample Application Definition",
"description": "Notification-enabled application definition.",
"notificationPolicy": {
"notificationEndpoints": [
{
"uri": "https://isv.azurewebsites.net:1214?sig=unique_token"
}
]
},
"authorizations": [
{
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"roleDefinitionId": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635"
},
...
Добавление уведомлений управляемого приложения Azure Marketplace
Дополнительные сведения см. в статье Создание предложения приложения Azure.
Триггеры событий
В следующей таблице описаны все возможные сочетания свойств eventType
и provisioningState
и их триггеров:
EventType | ProvisioningState | Триггер для уведомления |
---|---|---|
PUT | Принято | Управляемая группа ресурсов была создана и проецирована успешно после запуска приложения PUT (до запуска развертывания внутри управляемой группы ресурсов). |
PUT | Выполнено | Полная подготовка управляемого приложения прошла успешно после операции PUT. |
PUT | Неудачно | Сбой операции PUT для подготовки экземпляра приложения в любой момент. |
PATCH | Выполнено | После успешного исправления в экземпляре управляемого приложения для обновления тегов, политики JIT-доступа или управляемого удостоверения. |
DELETE | Удаление | Как только пользователь инициирует операцию DELETE для экземпляра управляемого приложения. |
DELETE | Deleted | После полного успешного удаления управляемого приложения. |
DELETE | Неудачно | После любой ошибки в процессе отзыва, блокирующем удаление. |
Схема уведомления
При создании конечной точки веб-перехватчика для обработки уведомлений необходимо проанализировать полезные данные, чтобы получить важные свойства, чтобы затем действовать при уведомлении. Многие свойства, предоставляемые каталогом услуг и уведомлениями управляемых приложений Azure Marketplace, одинаковы, но есть и ряд различных свойств. Свойство applicationDefinitionId
применяется только к каталогу услуг. Свойства billingDetails
и plan
применяются только к Azure Marketplace.
Azure добавляет /resource
к универсальному коду ресурса (URI) конечной точки уведомлений, указанному в определении управляемого приложения. Конечная точка веб-перехватчика должна иметь возможность обрабатывать уведомления по URI /resource
. Например, если вы указали универсальный код ресурса (URI) конечной точки уведомлений https://fabrikam.com
, то URI конечной точки веб-перехватчика будет иметь вид https://fabrikam.com/resource
.
Схема уведомлений приложения каталога услуг
В следующем примере показано уведомление каталога услуг после успешной подготовки экземпляра управляемого приложения.
POST https://{your_endpoint_URI}/resource?{optional_parameter}={optional_parameter_value} HTTP/1.1
{
"eventType": "PUT",
"applicationId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applications/<applicationName>",
"eventTime": "2019-08-14T19:20:08.1707163Z",
"provisioningState": "Succeeded",
"applicationDefinitionId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applicationDefinitions/<appDefName>"
}
Если подготовка завершается сбоем, уведомление с сведениями об ошибке отправляется в указанную конечную точку.
POST https://{your_endpoint_URI}/resource?{optional_parameter}={optional_parameter_value} HTTP/1.1
{
"eventType": "PUT",
"applicationId": "subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applications/<applicationName>",
"eventTime": "2019-08-14T19:20:08.1707163Z",
"provisioningState": "Failed",
"applicationDefinitionId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applicationDefinitions/<appDefName>",
"error": {
"code": "ErrorCode",
"message": "error message",
"details": [
{
"code": "DetailedErrorCode",
"message": "error message"
}
]
}
}
Схема уведомлений приложений Azure Marketplace
В следующем примере показано уведомление каталога услуг после успешной подготовки экземпляра управляемого приложения.
POST https://{your_endpoint_URI}/resource?{optional_parameter}={optional_parameter_value} HTTP/1.1
{
"eventType": "PUT",
"applicationId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applications/<applicationName>",
"eventTime": "2019-08-14T19:20:08.1707163Z",
"provisioningState": "Succeeded",
"billingDetails": {
"resourceUsageId": "<resourceUsageId>"
},
"plan": {
"publisher": "publisherId",
"product": "offer",
"name": "skuName",
"version": "1.0.1"
}
}
Если подготовка завершается сбоем, уведомление с сведениями об ошибке отправляется в указанную конечную точку.
POST https://{your_endpoint_URI}/resource?{optional_parameter}={optional_parameter_value} HTTP/1.1
{
"eventType": "PUT",
"applicationId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applications/<applicationName>",
"eventTime": "2019-08-14T19:20:08.1707163Z",
"provisioningState": "Failed",
"billingDetails": {
"resourceUsageId": "<resourceUsageId>"
},
"plan": {
"publisher": "publisherId",
"product": "offer",
"name": "skuName",
"version": "1.0.1"
},
"error": {
"code": "ErrorCode",
"message": "error message",
"details": [
{
"code": "DetailedErrorCode",
"message": "error message"
}
]
}
}
Свойство | Description |
---|---|
eventType |
Тип события, вызвавшего уведомление. Например, PUT, PATCH, DELETE. |
applicationId |
Полный идентификатор ресурса управляемого приложения, для которого было активировано уведомление. |
eventTime |
Метка времени события, вызвавшего уведомление. Дата и время в формате UTC ISO 8601. |
provisioningState |
Состояние подготовки экземпляра управляемого приложения. Например, "Успешно", "Сбой", "Удаление", "Удалено". |
applicationDefinitionId |
Указывается только для управляемых приложений каталога услуг. Представляет полный идентификатор ресурса определения приложения, для которого был подготовлен экземпляр управляемого приложения. |
billingDetails |
Указывается только для управляемых приложений Azure Marketplace. Сведения о выставлении счетов для экземпляра управляемого приложения. Содержит параметр resourceUsageId , который можно использовать для запроса сведений об использовании в Azure Marketplace. |
plan |
Указывается только для управляемых приложений Azure Marketplace. Представляет издателя, предложение, номер SKU и версию экземпляра управляемого приложения. |
error |
Указывается только при сбое свойства provisioningState. Содержит код ошибки, сообщение и сведения о неполадке, которая привела к сбою. |
Проверка подлинности конечной точки
Чтобы защитить конечную точку веб-перехватчика и убедиться в подлинности уведомления, сделайте следующее:
- Укажите параметр запроса поверх URI веб-перехватчика в следующем формате:
https://your-endpoint.com?sig=Guid
. При каждом уведомлении проверьте, что параметр запросаsig
имеет ожидаемое значениеGuid
. - Отправьте запрос GET в экземпляре управляемого приложения с параметром
applicationId
. Убедитесь, что параметрprovisioningState
соответствует параметруprovisioningState
уведомления, чтобы обеспечить согласованность.
Повторы уведомлений
Служба уведомлений управляемого приложения ожидает от конечной точки веб-перехватчика ответ 200 OK
на уведомление. Служба уведомлений повторяет попытку, если конечная точка веб-перехватчика возвращает код ошибки HTTP больше или равен 500, возвращает код ошибки 429 или временно недоступен. Если конечная точка веб-перехватчика не станет доступной в течение 10 часов, сообщение уведомления удаляется и останавливается повторные попытки.