Azure-hanterade program med meddelanden

Med azure-meddelanden för hanterade program kan utgivare automatisera åtgärder baserat på livscykelhändelser för de hanterade programinstanserna. Utgivare kan ange webhook-slutpunkter för anpassade meddelanden för att ta emot händelsemeddelanden om nya och befintliga instanser av hanterade program. Utgivare kan konfigurera anpassade arbetsflöden vid tidpunkten för programetablering, uppdateringar och borttagning.

Komma igång

Börja ta emot hanterade program genom att starta en offentlig HTTPS-slutpunkt och ange den när du publicerar programdefinitionen för tjänstkatalogen eller Azure Marketplace erbjudande.

Här är de rekommenderade stegen för att komma igång snabbt:

  1. Skapa en offentlig HTTPS-slutpunkt som loggar inkommande POST-begäranden och returnerar 200 OK .
  2. Lägg till slutpunkten i programdefinitionen för tjänstkatalogen eller Azure Marketplace enligt förklaringen senare i den här artikeln.
  3. Skapa en hanterad programinstans som refererar till programdefinitionen eller Azure Marketplace erbjudandet.
  4. Kontrollera att meddelandena tas emot.
  5. Aktivera auktorisering enligt förklaringen i avsnittet Slutpunktsautentisering i den här artikeln.
  6. Följ anvisningarna i avsnittet Meddelandeschema i den här artikeln för att parsa meddelandebegäranden och implementera din affärslogik baserat på meddelandet.

Lägga till definitionsmeddelanden för tjänstkatalogprogram

Azure Portal

Kom igång genom att gå till Publicera ett tjänstkatalogprogram via Azure Portal.

Definitionsmeddelanden för tjänstkatalogprogram i Azure Portal

REST API

Anteckning

För närvarande kan du bara ange en slutpunkt i notificationEndpoints i egenskaperna för programdefinitionen.

    {
      "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"
          },
        ...

Lägga Azure Marketplace hanterade programmeddelanden

Mer information finns i Skapa ett erbjudande för Azure-program.

Azure Marketplace hanterade programmeddelanden i Azure Portal

Händelseutlösare

I följande tabell beskrivs alla möjliga kombinationer av EventType och ProvisioningState och deras utlösare:

Eventtype ProvisioningState Utlösare för meddelande
PUT Har godkänts Hanterad resursgrupp har skapats och projicerats korrekt efter att programmet PUT (innan distributionen i den hanterade resursgruppen har utstartats).
PUT Lyckades Fullständig etablering av det hanterade programmet lyckades efter en PUT.
PUT Misslyckad Det gick inte att etablera programinstansen i PUT när som helst.
PATCH Lyckades Efter en lyckad PATCH på den hanterade programinstansen för att uppdatera taggar, JIT-åtkomstprincip eller hanterad identitet.
DELETE Tas bort Så snart användaren initierar en DELETE av en instans av en hanterad app.
DELETE Borttagen Efter den fullständiga och lyckade borttagningen av det hanterade programmet.
DELETE Misslyckad Efter eventuella fel under avetableringsprocessen som blockerar borttagningen.

Meddelandeschema

När du laddade upp webhook-slutpunkten för att hantera meddelanden måste du parsa nyttolasten för att få viktiga egenskaper att sedan agera på meddelandet. Tjänstkatalogen och Azure Marketplace av hanterade program ger många av samma egenskaper. Två små skillnader beskrivs i tabellen som följer efter exemplen.

Schema för programavisering för tjänstkatalog

Här är ett exempel på ett meddelande i tjänstkatalogen efter att en instans av ett hanterat program har etablerats:

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>"    
}

Om etableringen misslyckas skickas ett meddelande med felinformationen till den angivna slutpunkten.

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 schema för programaviseringar

Här är ett exempel på ett meddelande i tjänstkatalogen efter att en instans av ett hanterat program har etablerats:

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"
    }
}

Om etableringen misslyckas skickas ett meddelande med felinformationen till den angivna slutpunkten.

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"
            }
        ]
    }
}

Parameter Beskrivning
Händelsetyp Den typ av händelse som utlöste meddelandet. (Till exempel PUT, PATCH, DELETE.)
applicationId Det fullständigt kvalificerade resurs-ID:t för det hanterade program som meddelandet utlöstes för.
Händelsetid Tidsstämpeln för den händelse som utlöste meddelandet. (Datum och tid i UTC ISO 8601-format.)
provisioningState Etableringstillståndet för den hanterade programinstansen. (Till exempel Lyckades, Misslyckades, Tar bort, Borttagna.)
fel Anges endast när provisioningState är Failed. Innehåller felkoden, meddelandet och information om problemet som orsakade felet.
applicationDefinitionId Anges endast för tjänstkatalog-hanterade program. Representerar den fullständigt kvalificerade resursidentifieraren för programdefinitionen som instansen av det hanterade programmet har etablerats för.
planera Anges endast för Azure Marketplace hanterade program. Representerar utgivare, erbjudande, SKU och version av den hanterade programinstansen.
billingDetails Anges endast för Azure Marketplace hanterade program. Faktureringsinformation för den hanterade programinstansen. Innehåller resourceUsageId som du kan använda för att fråga Azure Marketplace efter användningsinformation.

Slutpunktsautentisering

Så här skyddar du webhook-slutpunkten och ser till att meddelandet är äkta:

  1. Ange en frågeparameter ovanpå webhook-URI:n så här: https : //your-endpoint.com?sig=Guid. Med varje meddelande kontrollerar du att frågeparametern sig har det förväntade värdet Guid .
  2. Utfärda en GET på den hanterade programinstansen med hjälp av applicationId. Kontrollera att provisioningState matchar provisioningState för meddelandet för att säkerställa konsekvens.

Återförsök för meddelanden

Meddelandetjänsten för hanterade program förväntar 200 OK sig ett svar från webhook-slutpunkten till meddelandet. Meddelandetjänsten försöker igen om webhook-slutpunkten returnerar en HTTP-felkod som är större än eller lika med 500, om den returnerar felkoden 429 eller om slutpunkten tillfälligt inte kan nås. Om webhook-slutpunkten inte blir tillgänglig inom 10 timmar tas aviseringsmeddelandet bort och återförsöken avbryts.