Управляемые приложения Azure с уведомлениями

Уведомления управляемых приложений Azure позволяют издателям автоматизировать действия на основе событий жизненного цикла экземпляров управляемых приложений. Издатели могут указывать пользовательские конечные точки веб-перехватчика уведомлений для получения уведомлений о событиях новых и имеющихся экземпляров управляемых приложений. Издатели могут настраивать пользовательские рабочие процессы во время подготовки, обновления и удаления приложений.

Начало работы

Чтобы начать получать уведомления управляемого приложения, создайте общедоступную конечную точку HTTPS. Укажите конечную точку при публикации определения приложения каталога услуг или предложения Microsoft Azure Marketplace.

Далее представлено пошаговое объяснение для быстрого начала работы:

  1. Создайте общедоступную конечную точку HTTPS, которая регистрирует входящие запросы POST и возвращает 200 OK.
  2. Добавьте конечную точку в определение приложения каталога услуг или в предложение Azure Marketplace, как описано далее в этой статье.
  3. Создайте экземпляр управляемого приложения, который ссылается на определение приложения или предложение Azure Marketplace.
  4. Проверьте, получены ли уведомления.
  5. Включите авторизацию, как описано в разделе Проверка подлинности конечной точки этой статьи.
  6. Следуйте инструкциям из раздела Схема уведомления этой статьи, чтобы проанализировать запросы уведомлений и реализовать бизнес-логику на основе уведомления.

Добавление уведомлений об определении приложения из каталога услуг

В следующих примерах показано, как добавить URI конечной точки уведомлений с помощью портала или REST API.

Портал Azure

Сведения о начале работы см. в статье Краткое руководство. Создание и публикация определения Управляемого приложения 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": "d6b7fbd3-4d99-43fe-8a7a-f13aef11dc18",
        "roleDefinitionId": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635"
      },
    ...

Добавление уведомлений управляемого приложения Azure Marketplace

Дополнительные сведения см. в статье Создание предложения приложения Azure.

Снимок экрана: уведомления управляемого приложения Azure Marketplace на портале Azure.

Триггеры событий

В следующей таблице описаны все возможные сочетания свойств eventType и provisioningState и их триггеров:

EventType ProvisioningState Триггер для уведомления
PUT Принято Управляемая группа ресурсов успешно создана и спроектирована после операции PUT (до начала развертывания в управляемой группе ресурсов).
PUT Выполнено Полная подготовка управляемого приложения прошла успешно после операции PUT.
PUT Сбой Сбой операции PUT для подготовки экземпляра приложения в любой момент.
PATCH Выполнено После успешного выполнения операции 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"
      }
    ]
  }
}
Свойство Описание
eventType Тип события, вызвавшего уведомление. (Например, PUT, PATCH, DELETE)
applicationId Полный идентификатор ресурса управляемого приложения, для которого было активировано уведомление.
eventTime Метка времени события, вызвавшего уведомление. (Дата и время в формате UTC ISO 8601.)
provisioningState Состояние подготовки экземпляра управляемого приложения. Например, "Успешно", "Сбой", "Удаление", "Удалено".
applicationDefinitionId Указывается только для управляемых приложений каталога услуг. Представляет полный идентификатор ресурса определения приложения, для которого был подготовлен экземпляр управляемого приложения.
billingDetails Указывается только для управляемых приложений Azure Marketplace. Сведения о выставлении счетов для экземпляра управляемого приложения. Содержит параметр resourceUsageId, который можно использовать для запроса сведений об использовании в Azure Marketplace.
plan Указывается только для управляемых приложений Azure Marketplace. Представляет издателя, предложение, номер SKU и версию экземпляра управляемого приложения.
error Указывается только при сбое свойства provisioningState. Содержит код ошибки, сообщение и сведения о неполадке, которая привела к сбою.

Проверка подлинности конечной точки

Чтобы защитить конечную точку веб-перехватчика и убедиться в подлинности уведомления, сделайте следующее:

  1. Укажите параметр запроса поверх URI веб-перехватчика в следующем формате: https://your-endpoint.com?sig=Guid. При каждом уведомлении проверьте, что параметр запроса sig имеет ожидаемое значение Guid.
  2. Отправьте запрос GET в экземпляре управляемого приложения с параметром applicationId. Убедитесь, что параметр provisioningState соответствует параметру provisioningState уведомления, чтобы обеспечить согласованность.

Повторы уведомлений

Служба уведомлений управляемого приложения ожидает от конечной точки веб-перехватчика ответ 200 OK на уведомление. Служба уведомлений повторит попытку, если конечная точка веб-перехватчика возвратит код ошибки HTTP, значение которого больше или равно 500, если она возвратит код ошибки 429 или если конечная точка временно недоступна. Если конечная точка веб-перехватчика не станет доступной в течение 10 часов, сообщение об уведомлении будет удалено, и повторные попытки будут прекращены.