Aplicativos gerenciados do Azure com notificações
As notificações de aplicativos gerenciados do Azure permitem que os editores automatizem ações com base em eventos do ciclo de vida das instâncias de aplicativos gerenciados. Os editores podem especificar um ponto de extremidade de webhook de notificação personalizado para receber notificações de eventos sobre instâncias de aplicativos gerenciados novas e existentes. Os editores podem configurar fluxos de trabalho personalizados no momento do provisionamento, atualizações e exclusão de aplicativos.
Introdução
Para começar a receber notificações de aplicativos gerenciados, crie um ponto de extremidade HTTPS público. Especifique o ponto de extremidade ao publicar a definição de aplicativo do catálogo de serviços ou a oferta do Microsoft Azure Marketplace.
Aqui estão as etapas recomendadas para começar rapidamente:
- Crie um ponto de extremidade HTTPS público que registre as solicitações POST de entrada e retorne
200 OK
. - Adicione o ponto de extremidade à definição de aplicativo do catálogo de serviços ou à oferta do Azure Marketplace, conforme explicado posteriormente neste artigo.
- Crie uma instância de aplicativo gerenciado que faça referência à definição de aplicativo ou à oferta do Azure Marketplace.
- Valide se as notificações estão sendo recebidas.
- Habilite a autorização conforme explicado na seção Autenticação de ponto de extremidade deste artigo.
- Siga as instruções na seção Esquema de notificação deste artigo para analisar as solicitações de notificação e implementar sua lógica de negócios com base na notificação.
Adicionar notificações de definição de aplicativo do catálogo de serviços
Os exemplos a seguir mostram como adicionar um URI de ponto de extremidade de notificação usando o portal ou a API REST.
Portal do Azure
Para começar, consulte Guia de início rápido: criar e publicar uma definição de Aplicativo Gerenciado do Azure.
API REST
Nota
Você só pode fornecer um ponto de extremidade na notificationEndpoints
propriedade da definição de aplicativo gerenciado.
{
"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"
},
...
Adicionar notificações de aplicativos gerenciados do Azure Marketplace
Para obter mais informações, consulte Criar uma oferta de aplicativo do Azure.
Acionadores de eventos
A tabela a seguir descreve todas as combinações possíveis de eventType
e provisioningState
seus gatilhos:
EventType | ProvisioningState | Gatilho para notificação |
---|---|---|
PUT | Aceite | O grupo de recursos gerenciados foi criado e projetado com êxito após o PUT do aplicativo (antes que a implantação dentro do grupo de recursos gerenciados seja iniciada). |
PUT | Com êxito | O provisionamento completo do aplicativo gerenciado foi bem-sucedido após um PUT. |
PUT | Com falhas | Falha de PUT de provisionamento de instância de aplicativo em qualquer ponto. |
PATCH | Com êxito | Após um PATCH bem-sucedido na instância do aplicativo gerenciado para atualizar tags, política de acesso just-in-time (JIT) ou identidade gerenciada. |
DELETE | Eliminar | Assim que o usuário inicia um DELETE de uma instância de aplicativo gerenciado. |
DELETE | Eliminado | Após a exclusão completa e bem-sucedida do aplicativo gerenciado. |
DELETE | Com falhas | Após qualquer erro durante o processo de desprovisionamento que bloqueia a exclusão. |
Esquema de notificação
Ao criar seu ponto de extremidade webhook para lidar com notificações, você precisa analisar a carga útil para obter propriedades importantes e, em seguida, agir de acordo com a notificação. O catálogo de serviços e as notificações de aplicativos gerenciados do Azure Marketplace fornecem muitas das mesmas propriedades, mas há algumas diferenças. A applicationDefinitionId
propriedade só se aplica ao catálogo de serviços. As billingDetails
propriedades e plan
só se aplicam ao Azure Marketplace.
O Azure acrescenta ao URI do ponto de /resource
extremidade de notificação fornecido na definição de aplicativo gerenciado. O ponto de extremidade webhook deve ser capaz de lidar com notificações no /resource
URI. Por exemplo, se você forneceu um URI de ponto de extremidade de notificação como https://fabrikam.com
o URI do ponto de extremidade webhook é https://fabrikam.com/resource
.
Esquema de notificação de aplicativo do catálogo de serviços
O exemplo a seguir mostra uma notificação de catálogo de serviços após o provisionamento bem-sucedido de uma instância de aplicativo gerenciado.
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>"
}
Se o provisionamento falhar, uma notificação com os detalhes do erro será enviada para o ponto de extremidade especificado.
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"
}
]
}
}
Esquema de notificação de aplicativo do Azure Marketplace
O exemplo a seguir mostra uma notificação de catálogo de serviços após o provisionamento bem-sucedido de uma instância de aplicativo gerenciado.
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"
}
}
Se o provisionamento falhar, uma notificação com os detalhes do erro será enviada para o ponto de extremidade especificado.
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"
}
]
}
}
Property | Description |
---|---|
eventType |
O tipo de evento que disparou a notificação. Por exemplo, PUT, PATCH, DELETE. |
applicationId |
O identificador de recurso totalmente qualificado do aplicativo gerenciado para o qual a notificação foi disparada. |
eventTime |
O carimbo de data/hora do evento que disparou a notificação. Data e hora no formato UTC ISO 8601. |
provisioningState |
O estado de provisionamento da instância do aplicativo gerenciado. Por exemplo, Succeeded, Failed, Excluting, Deleted. |
applicationDefinitionId |
Especificado apenas para aplicativos gerenciados do catálogo de serviços. Representa o identificador de recurso totalmente qualificado da definição de aplicativo para a qual a instância do aplicativo gerenciado foi provisionada. |
billingDetails |
Especificado apenas para aplicativos gerenciados do Azure Marketplace. Os detalhes de faturamento da instância do aplicativo gerenciado. Contém o que você pode usar para consultar o resourceUsageId Azure Marketplace para obter detalhes de uso. |
plan |
Especificado apenas para aplicativos gerenciados do Azure Marketplace. Representa o editor, a oferta, a SKU e a versão da instância do aplicativo gerenciado. |
error |
Especificado somente quando o provisioningState é Failed. Contém o código de erro, a mensagem e os detalhes do problema que causou a falha. |
Autenticação de ponto de extremidade
Para proteger o ponto de extremidade do webhook e garantir a autenticidade da notificação:
- Forneça um parâmetro de consulta sobre o URI do webhook, da seguinte forma:
https://your-endpoint.com?sig=Guid
. Com cada notificação, verifique se o parâmetrosig
de consulta tem o valorGuid
esperado. - Emita um GET na instância do aplicativo gerenciado usando
applicationId
o . Valide se oprovisioningState
corresponde aoprovisioningState
da notificação para garantir a consistência.
Tentativas de notificação novamente
O serviço de notificação de aplicativo gerenciado espera uma 200 OK
resposta do ponto de extremidade webhook para a notificação. O serviço de notificação tenta novamente se o ponto de extremidade webhook retornar um código de erro HTTP maior ou igual a 500, ele retornará um código de erro de 429 ou se o ponto de extremidade estiver temporariamente inacessível. Se o ponto de extremidade do webhook não ficar disponível dentro de 10 horas, a mensagem de notificação será descartada e as tentativas serão interrompidas.