Rastrear operações assíncronas no Azure
Algumas operações REST do Azure são executadas de forma assíncrona porque a operação não pode ser concluída com rapidez. Este artigo descreve como controlar o status das operações assíncronas por meio de valores retornados na resposta.
Códigos de status de operações assíncronas
Uma operação assíncrona inicialmente retorna um dos seguintes códigos de status HTTP:
- 201 (Criado)
- 202 (Aceito)
No entanto, esse código de status não significa necessariamente que a operação seja assíncrona. Uma operação assíncrona também retorna um valor para provisioningState
que indica que a operação não foi concluída. O valor pode variar de acordo com a operação, mas não inclui Bem-sucedido, Com Falha ou Cancelado. Esses três valores indicam que a operação foi concluída. Se nenhum valor for retornado para provisioningState
, a operação foi concluída e bem-sucedida.
Quando a operação for concluída com êxito, ela retorna um dos seguintes:
- 200 (OK)
- 204 (Sem Conteúdo)
Consulte a Documentação da API REST para ver as respostas para a operação que você está executando.
Depois de obter o código de resposta 201 ou 202, você estará pronto para monitorar o status da operação.
URL para monitorar o status
Há duas maneiras diferentes de monitorar o status da operação assíncrona. Você determina a abordagem correta examinando os valores de cabeçalho retornados da solicitação original. Primeiro, procure:
Azure-AsyncOperation
‑ A URL para verificar o status da operação em andamento. Se a operação retornar esse valor, sempre o use para acompanhar o status da operação.Retry-After
‑ O número de segundos de espera antes de verificar o status da operação assíncrona.
Se Azure-AsyncOperation
não for um dos valores de cabeçalho, procure:
Location
- URL para determinar quando uma operação é concluída. Use esse valor somente quandoAzure-AsyncOperation
não for retornado.Retry-After
‑ O número de segundos de espera antes de verificar o status da operação assíncrona.
Quando o cabeçalho Retry-after
não for retornado, implemente sua própria lógica de repetição.
Observação
Seu cliente REST deve aceitar um tamanho mínimo de URL de 4 KB para Azure-AsyncOperation
e Location
.
Permissão para rastrear o status assíncrono
Para rastrear o status de uma operação assíncrona, você precisa de permissão suficiente no nível do grupo de recursos. Se você tiver permissão apenas no nível do recurso, poderá iniciar a operação, mas não poderá acompanhar seu status. A permissão no nível do grupo de recursos é necessária porque o URL para rastrear o status não tem escopo para o recurso.
Por exemplo, para iniciar uma máquina virtual, você precisa da função de Colaborador de Máquina Virtual para o grupo de recursos que contém a máquina virtual. A URL para acompanhamento de uma solicitação de início não inclui a máquina virtual em seu caminho.
GET
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2019-12-01
Solicitação e resposta de Azure-AsyncOperation
Se você tiver uma URL no valor de cabeçalho Azure-AsyncOperation
, envie uma solicitação GET para essa URL. Use o valor de Retry-After
para agendar com que frequência verificar o status. Você obtém um objeto de resposta que indica o status da operação. Uma resposta diferente é retornada ao verificar o status da operação com a URL Location
. Para obter mais informações sobre a resposta de uma URL de localização, veja Criar conta de armazenamento (202 com Location e Retry-After).
As propriedades de resposta podem variar, mas sempre incluem o status da operação assíncrona.
{
"status": "{status-value}"
}
O exemplo a seguir mostra outros valores que podem ser retornados da operação:
{
"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}"
}
}
O objeto de erro é retornado quando o status é Falha ou Cancelado. Todos os outros valores são opcionais. A resposta que você recebe pode ter uma aparência diferente em relação à do exemplo.
Valores de provisioningState
Operações que criam, atualizam ou excluem (PUT, PATCH, DELETE) um recurso geralmente retornam um valor provisioningState
. Quando uma operação é concluída, um dos três valores a seguir é retornado:
- Com sucesso
- Falha
- Canceled
Todos os outros valores indicam que a operação ainda está em execução. O provedor de recursos pode retornar um valor personalizado que indica o estado. Por exemplo, você recebe Aceito quando a solicitação é recebida e está em execução.
Exemplo de solicitações e respostas
Iniciar a máquina virtual (202 com Azure-AsyncOperation)
Este exemplo mostra como determinar o status da operação start para máquinas virtuais. A solicitação inicial está no seguinte formato:
POST
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Compute/virtualMachines/{vm-name}/start?api-version=2019-12-01
Ele retorna um código de status 202. Entre os valores de cabeçalho, você verá:
Azure-AsyncOperation : https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2019-12-01
Para verificar o status da operação assíncrona, envie outra solicitação para essa URL.
GET
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2019-12-01
O corpo da resposta contém o status da operação:
{
"startTime": "2017-01-06T18:58:24.7596323+00:00",
"status": "InProgress",
"name": "9a062a88-e463-4697-bef2-fe039df73a02"
}
Implantar recursos (201 com Azure-AsyncOperation)
Este exemplo mostra como determinar o status da operação deployments para implantação de recursos no Azure. A solicitação inicial está no seguinte formato:
PUT
https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/microsoft.resources/deployments/{deployment-name}?api-version=2020-06-01
Ele retorna um código de status 201. O corpo da resposta inclui:
"provisioningState":"Accepted",
Entre os valores de cabeçalho, você verá:
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
Para verificar o status da operação assíncrona, envie outra solicitação para a URL.
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
O corpo da resposta contém o status da operação:
{
"status": "Running"
}
Quando a implantação for concluída, a resposta conterá:
{
"status": "Succeeded"
}
Criar conta de armazenamento (202 com Location e Retry-After)
Este exemplo mostra como determinar o status da operação create para contas de armazenamento. A solicitação inicial está no seguinte formato:
PUT
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Storage/storageAccounts/{storage-name}?api-version=2019-06-01
E o corpo da solicitação contém as propriedades da conta de armazenamento:
{
"location": "South Central US",
"properties": {},
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage"
}
Ele retorna um código de status 202. Entre os valores de cabeçalho, você verá os dois valores a seguir:
Location: https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2019-06-01
Retry-After: 17
Depois de aguardar o número de segundos especificado em Retry-After, verifique o status da operação assíncrona enviando outra solicitação para a URL.
GET
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2019-06-01
Se a solicitação ainda estiver em execução, você receberá um código de status 202. Se a solicitação for concluída, você receberá um código de status 200. O corpo da resposta contém as propriedades da conta de armazenamento que foi criada.
Próximas etapas
- Para ver a documentação sobre cada operação REST, consulte Documentação da API REST.
- Para saber mais sobre a implantação de modelos por meio da API REST do Resource Manager, confira Implantar recursos com modelos do Resource Manager e a API REST do Resource Manager.