Controlar operações assíncronas do Azure
Algumas operações REST do Azure são executadas de forma assíncrona porque a operação não pode ser concluída rapidamente. Este artigo descreve como controlar o status de operações assíncronas por meio de valores retornados na resposta.
Códigos de status para operações assíncronas
Uma operação assíncrona inicialmente retorna um código de status HTTP de:
- 201 (Criado)
- 202 (Aceito)
No entanto, esse código de status não significa necessariamente que a operação é assíncrona. Uma operação assíncrona também retorna um valor que indica que provisioningState
a operação não foi concluída. O valor pode variar de acordo com a operação, mas não inclui Êxito, Falha ou Cancelado. Esses três valores indicam a operação concluída. Se nenhum valor for retornado para provisioningState
, a operação foi concluída e bem-sucedida.
Quando a operação é concluída com êxito, ela retorna:
- 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ê está 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
- URL para verificar o estado em curso da operação. Se sua operação retornar esse valor, use-o para acompanhar o status da operação.Retry-After
- O número de segundos a aguardar antes de verificar o estado 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 a aguardar antes de verificar o estado da operação assíncrona.
Quando o Retry-after
cabeçalho não for retornado, implemente sua própria lógica de repetição.
Nota
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 controlar o status de uma operação assíncrona, você precisa de permissão suficiente no nível do grupo de recursos. Se você só tiver permissão 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 a URL para o status de acompanhamento 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 rastrear 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 Azure-AsyncOperation
Se você tiver uma URL do valor do Azure-AsyncOperation
cabeçalho, 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 Location
URL. Para obter mais informações sobre a resposta de uma URL de local, consulte Criar conta de armazenamento (202 com Localização e Repetir Depois).
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 recebida pode parecer diferente do exemplo.
provisioningState valores
As operações que criam, atualizam ou excluem (PUT, PATCH, DELETE) um recurso normalmente retornam um provisioningState
valor. Quando uma operação é concluída, um dos três valores a seguir é retornado:
- Efetuado com êxito
- Falha
- Cancelado
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 seu estado. Por exemplo, você recebe Aceito quando a solicitação é recebida e executada.
Exemplos de pedidos e respostas
Iniciar máquina virtual (202 com Azure-AsyncOperation)
Este exemplo mostra como determinar o status da operação de início para máquinas virtuais. O pedido 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 o código de status 202. Entre os valores de cabeçalho, você vê:
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 de implantações para implantar recursos no Azure. O pedido 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 o código de status 201. O corpo da resposta inclui:
"provisioningState":"Accepted",
Entre os valores de cabeçalho, você vê:
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 essa 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 estiver concluída, a resposta contém:
{
"status": "Succeeded"
}
Criar conta de armazenamento (202 com Localização e Repetir-Depois)
Este exemplo mostra como determinar o status da operação de criação para contas de armazenamento. O pedido 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 propriedades para a conta de armazenamento:
{
"location": "South Central US",
"properties": {},
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage"
}
Ele retorna o 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 essa 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óximos passos
- Para obter documentação sobre cada operação REST, consulte a documentação da API REST.
- Para obter informações sobre como implantar modelos por meio da API REST do Resource Manager, consulte Implantar recursos com modelos do Resource Manager e API REST do Resource Manager.