Aszinkron Azure-műveletek nyomon követése

Egyes Azure REST-műveletek aszinkron módon futnak, mert a művelet nem hajtható végre gyorsan. Ez a cikk azt ismerteti, hogyan követheti nyomon az aszinkron műveletek állapotát a válaszban visszaadott értékeken keresztül.

Az aszinkron műveletek állapotkódjai

Az aszinkron művelet kezdetben egy HTTP-állapotkódot ad vissza:

  • 201 (Létrehozva)
  • 202 (Elfogadva)

Ez az állapotkód azonban nem feltétlenül jelenti azt, hogy a művelet aszinkron. Az aszinkron művelet olyan értéket provisioningState is visszaad, amely azt jelzi, hogy a művelet nem fejeződött be. Az érték műveletenként változhat, de nem tartalmazza a Sikeres, a Sikertelen vagy a Mégse értéket. Ez a három érték azt jelzi, hogy a művelet befejeződött. Ha a rendszer nem ad vissza provisioningStateértéket, a művelet befejeződött és sikeres volt.

Ha a művelet sikeresen befejeződött, a következőt adja vissza:

  • 200 (OK)
  • 204 (Nincs tartalom)

Tekintse meg a REST API dokumentációját a futtatandó műveletre adott válaszok megtekintéséhez.

A 201-ben vagy 202-ben kapott válaszkód lekérése után készen áll a művelet állapotának figyelésére.

Az állapot monitorozásához tartozó URL-cím

Az aszinkron művelet állapotának monitorozása két különböző módon lehetséges. A helyes megközelítést az eredeti kérésből visszaadott fejlécértékek vizsgálatával határozhatja meg. Először keresse meg a következőt:

  • Azure-AsyncOperation - A művelet folyamatos állapotának ellenőrzésére szolgáló URL-cím. Ha a művelet ezt az értéket adja vissza, használja a művelet állapotának nyomon követéséhez.
  • Retry-After - Az aszinkron művelet állapotának ellenőrzése előtt várandó másodpercek száma.

Ha Azure-AsyncOperation nem a fejlécértékek egyike, keresse meg a következőt:

  • Location - A művelet befejezésének időpontjának meghatározására szolgáló URL-cím. Ezt az értéket csak akkor használja, ha Azure-AsyncOperation nincs visszaadva.
  • Retry-After - Az aszinkron művelet állapotának ellenőrzése előtt várandó másodpercek száma.

Ha nem adja vissza a Retry-after fejlécet, implementálja a saját újrapróbálkozás logikáját.

Megjegyzés:

A REST-ügyfélnek el kell fogadnia a legalább 4 KB-os URL-méretet és Locationa Azure-AsyncOperation .

Engedély az aszinkron állapot nyomon követéséhez

Az aszinkron művelet állapotának nyomon követéséhez elegendő engedélyre van szüksége az erőforráscsoport szintjén. Ha csak az erőforrás szintjén rendelkezik engedéllyel, elindíthatja a műveletet, de nem követheti nyomon az állapotát. Az erőforráscsoport szintjén engedélyre van szükség, mert a nyomkövetési állapot URL-címe nem tartozik az erőforrás hatókörébe.

Egy virtuális gép elindításához például a virtuális gépet tartalmazó erőforráscsoport virtuálisgép-közreműködői szerepkörére van szükség. Az indítási kérelem nyomon követésének URL-címe nem tartalmazza a virtuális gépet az elérési útjában.

GET 
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2019-12-01

Azure-AsyncOperation kérés és válasz

Ha a Azure-AsyncOperation fejlécértékből származó URL-címmel rendelkezik, küldjön egy GET kérést erre az URL-címre. Az állapot ellenőrzéséhez használja a forrás értékének Retry-After ütemezését. Egy válaszobjektumot kap, amely a művelet állapotát jelzi. A művelet állapotának URL-címmel való ellenőrzésekor a rendszer egy másik választ ad Location vissza. A hely URL-címéből kapott válaszról további információt a Tárfiók létrehozása (202 hely és újrapróbálkozás után) című témakörben talál.

A választulajdonságok eltérőek lehetnek, de mindig tartalmazzák az aszinkron művelet állapotát.

{
    "status": "{status-value}"
}

Az alábbi példa a műveletből visszaadható egyéb értékeket mutatja be:

{
    "id": "{resource path from GET operation}",
    "name": "{operation-id}",
    "status" : "Succeeded | Failed | Canceled | {resource provider values}",
    "startTime": "2017-01-06T20:56:36.002812+00:00",
    "endTime": "2017-01-06T20:56:56.002812+00:00",
    "percentComplete": {double between 0 and 100 },
    "properties": {
        /* Specific resource provider values for successful operations */
    },
    "error" : {
        "code": "{error code}",  
        "message": "{error description}"
    }
}

A hibaobjektum akkor jelenik meg, ha az állapot sikertelen vagy megszakítva. Az összes többi érték megadása nem kötelező. A kapott válasz eltérhet a példától.

provisioningState-értékek

Az erőforrásokat létrehozó, frissítő vagy törlő műveletek (PUT, PATCH, DELETE) általában egy provisioningState értéket adnak vissza. Ha egy művelet befejeződött, a rendszer a következő három érték egyikét adja vissza:

  • Sikeres
  • Failed
  • Canceled

Minden más érték azt jelzi, hogy a művelet még fut. Az erőforrás-szolgáltató olyan testreszabott értéket adhat vissza, amely az állapotát jelzi. A kérés fogadása és futtatásakor például elfogadva lesz.

Példakérések és válaszok

Virtuális gép indítása (202 az Azure-AsyncOperation használatával)

Ez a példa bemutatja, hogyan határozható meg a virtuális gépek indítási műveletének állapota. A kezdeti kérés formátuma a következő:

POST 
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Compute/virtualMachines/{vm-name}/start?api-version=2019-12-01

A 202-s állapotkódot adja vissza. A fejlécértékek között a következő látható:

Azure-AsyncOperation : https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2019-12-01

Az aszinkron művelet állapotának ellenőrzéséhez küldjön egy másik kérést az adott URL-címre.

GET 
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2019-12-01

A válasz törzse a művelet állapotát tartalmazza:

{
  "startTime": "2017-01-06T18:58:24.7596323+00:00",
  "status": "InProgress",
  "name": "9a062a88-e463-4697-bef2-fe039df73a02"
}

Erőforrások üzembe helyezése (201 az Azure-AsyncOperation használatával)

Ez a példa bemutatja, hogyan határozható meg az erőforrások Azure-ban történő üzembe helyezési műveletének állapota. A kezdeti kérés formátuma a következő:

PUT
https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/microsoft.resources/deployments/{deployment-name}?api-version=2020-06-01

A 201-ben visszaadott állapotkódot adja vissza. A válasz törzse a következőket tartalmazza:

"provisioningState":"Accepted",

A fejlécértékek között a következő látható:

Azure-AsyncOperation: https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Resources/deployments/{deployment-name}/operationStatuses/{operation-id}?api-version=2020-06-01

Az aszinkron művelet állapotának ellenőrzéséhez küldjön egy másik kérést az ADOTT URL-címre.

GET 
https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Resources/deployments/{deployment-name}/operationStatuses/{operation-id}?api-version=2020-06-01

A válasz törzse a művelet állapotát tartalmazza:

{
    "status": "Running"
}

Ha az üzembe helyezés befejeződött, a válasz a következőket tartalmazza:

{
    "status": "Succeeded"
}

Tárfiók létrehozása (202 hely és újrapróbálkozás után)

Ez a példa bemutatja, hogyan határozhatja meg a tárfiókok létrehozási műveletének állapotát. A kezdeti kérés formátuma a következő:

PUT
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Storage/storageAccounts/{storage-name}?api-version=2019-06-01

A kérelem törzse pedig a tárfiók tulajdonságait tartalmazza:

{
    "location": "South Central US",
    "properties": {},
    "sku": {
        "name": "Standard_LRS"
    },
    "kind": "Storage"
}

A 202-s állapotkódot adja vissza. A fejlécértékek között a következő két érték látható:

Location: https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2019-06-01
Retry-After: 17

Az Újrapróbálkozási idő beállításban megadott másodpercek száma után ellenőrizze az aszinkron művelet állapotát, ha egy másik kérést küld az adott URL-címre.

GET 
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2019-06-01

Ha a kérés továbbra is fut, egy 202-s állapotkódot kap. Ha a kérés befejeződött, a rendszer egy 200-os állapotkódot kap. A válasz törzse tartalmazza a létrehozott tárfiók tulajdonságait.

További lépések