Как вернуть 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 ставит задание в очередь и немедленно возвращает его, затем вы выполняете тяжелую работу по функции триггера очереди.

Другие вопросы по тегам