Есть ли способ программно перезапустить функцию Azure - PullRequest
0 голосов
/ 10 января 2019

У меня есть функция Azure, запускаемая по таймеру каждые несколько минут, который после разного периода времени запуска будет сбой при каждом запуске из-за внешнего API, и нажатие кнопки перезагрузки вручную на портале Azure устраняет проблему. и работа снова работает.

Есть ли способ заставить функцию Azure перезапустить себя или сделать что-то внешне перезапустить функцию Azure через веб-ловушку или запрос API или запустив таймер

Я пытался использовать службу управления API Azures, которую можно использовать для перезапуска других типов служб приложений в Azure, но оказывается, что в API нет функциональности для запроса перезапуска функции Azure, а также рассмотрел Power Shell и Похоже, это та же проблема, что вы можете перезапустить различные службы приложений, но не функции Azure

я пытался работать с API https://docs.microsoft.com/en-us/rest/api/azure/ Пример запроса API, где вы можете перечислить функции внутри функции Azure ПОЛУЧИТЬ https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/functions?api-version=2016-08-01

но нет возможности перезапустить функцию лазури из того, что я исследовал

По сути, я хочу перезапустить функцию Azure, как если бы я нажал эту кнопку Функции Azure: кнопки ручного останова / запуска и перезапуска на портале Azure

потому что есть случай, когда задание переходит в плохое состояние каждый раз, когда оно выполняется, из-за внешнего API, который я не могу контролировать, и нажатие на перезагрузку запускает работу снова

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Почему бы вам не попробовать ниже ARM API. Поскольку функция Azure также попадает в категорию служб приложений, иногда это может быть полезно, https://docs.microsoft.com/en-us/rest/api/appservice/webapps/restart

0 голосов
/ 10 января 2019

Функции Azure по своей природе вызываются событием. Это может быть таймер, триггер или вызов, например, событие HTTP. Они не могут быть перезапущены сами по себе, то есть, если вы вызываете функцию и создаете исключение, вы не можете найти конкретный экземпляр и повторно запустить его, используя готовые функциональные возможности.

Однако вы можете найти более надежное решение:

  1. Воспроизвести событие, которое вызвало функцию (т.е. снова запустить ее)
  2. Для нечувствительных данных зарегистрируйте полезную нагрузку функции и создайте другую функцию, которая может быть вызвана по требованию для ее повторного запуска. То есть вы создаете прокси для повторного вызова функции.
  3. Укрепите свой код, внедрив политику повторных попыток. См. Полли .
  4. Добавьте служебную шину в вашу архитектуру. Имеют простую функцию для записи полезной нагрузки вызова в полезную нагрузку шины сообщений. Иметь другую функцию для сбора полезной нагрузки и более интенсивной ее обработки в случаях, когда возможны ненадежные интеграции и т. Д.). Таким образом, если вызов не удастся, вы можете отказаться и отказать в мертвой букве для последующей обработки.
  5. Подумайте об использовании Durable Function Extensions и использовании устойчивых шаблонов, это может помочь сделать ваш код функций более устойчивым и управлять состоянием.
...