Как вернуть 202 Принято, а затем продолжить обработку запроса в Powershell
Как вернуть 202 Принятый, а затем продолжить обработку запроса в PowerShell.
У меня есть скрипт, который выполняется>3 минуты в приложении-функции Azure Http Trigger(используя экспериментальный язык PowerShell).
Я нажимаю на функцию выше, используя приложение логики, которое отключится через 2 минуты.
Есть ли способ вернуть 202 Принятый из PowerShell и продолжить выполнение скрипта.
Tried Out-File (запускается после завершения выполнения), return (разрывает приложение)
3 ответа
Просто столкнулся с подобной проблемой. Клиент, вызывающий функцию Azure, получает ответ HTTP 503. Похоже, что он исходит из жесткого ограничения Azure в 230 секунд таймаута ответа HTTP. Попробуйте отправить HTTP-ответ 202 ACCEPTED из вашей функции Azure с помощью командлета PowerShell для привязки вывода ответа Push-OutputBinding.
Ссылка: https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-powershell
Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::Accepted
Body = "Process Started"
}) -Clobber
Не уверен, что ваш запрос выполним, но в качестве альтернативы вы можете создать рабочую книгу Azure Automation и запустить сценарий PS в приложении логики с помощью Azure Automation Action.
{
"$connections": {
"value": {
"azureautomation": {
"connectionId": "/subscriptions/<SubscriptionId>/resourceGroups/<ResourceGroup>/providers/Microsoft.Web/connections/azureautomation",
"connectionName": "azureautomation",
"id": "/subscriptions/<SubscriptionId>/providers/Microsoft.Web/locations/southeastasia/managedApis/azureautomation"
}
}
},
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Create_job": {
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['azureautomation']['connectionId']"
}
},
"method": "put",
"path": "/subscriptions/@{encodeURIComponent('<SubscriptionId>')}/resourceGroups/@{encodeURIComponent('ResourceGroup')}/providers/Microsoft.Automation/automationAccounts/@{encodeURIComponent('<AutomationAccount>')}/jobs/",
"queries": {
"runbookName": "test",
"wait": true,
"x-ms-api-version": "2015-10-31"
}
},
"runAfter": {},
"type": "ApiConnection"
},
"Get_job_output": {
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['azureautomation']['connectionId']"
}
},
"method": "get",
"path": "/subscriptions/@{encodeURIComponent('<SubscriptionId>')}/resourceGroups/@{encodeURIComponent('ResourceGroup')}/providers/Microsoft.Automation/automationAccounts/@{encodeURIComponent('<AutomationAccount>')}/jobs/@{encodeURIComponent(body('Create_job')?['properties']?['jobId'])}/output",
"queries": {
"x-ms-api-version": "2015-10-31"
}
},
"runAfter": {
"Create_job": [
"Succeeded"
]
},
"type": "ApiConnection"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {
"$connections": {
"defaultValue": {},
"type": "Object"
}
},
"triggers": {
"manual": {
"inputs": {
"schema": {}
},
"kind": "Http",
"type": "Request"
}
}
}
}
Карен предоставила хорошее решение, кроме того, вы можете использовать
- Очереди Azure
- Концентратор событий Azure или шина событий.
Функция HTTP ставит задание в очередь и немедленно возвращает его, затем вы выполняете тяжелую работу по функции триггера очереди.