Есть ли способ программно перезапустить функцию Azure

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

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

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

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

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

В основном я хочу перезапустить функцию Azure, как если бы я нажал эту кнопку Ручная остановка / запуск функций Azure и кнопки перезапуска на лазурном портале

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


person Aurelius    schedule 10.01.2019    source источник
comment
чего ты хочешь добиться? Зачем нужно явно перезапускать приложение функций Azure?   -  person alwayslearning    schedule 10.01.2019
comment
Не могли бы вы пояснить, что имеется в виду под перезагрузкой? Функция будет «запускаться» каждый раз, когда вы делаете HTTP-вызов. Вы хотите спросить об обновлении кода функции?   -  person Eamonn McEvoy    schedule 10.01.2019
comment
отредактировал вопрос, чтобы предоставить дополнительную информацию   -  person Aurelius    schedule 11.01.2019


Ответы (3)


Другой способ перезапустить вашу функцию - использовать параметр watchDirectories в файле host.json. Если ваш host.json выглядит так:

{
    "version": "2.0",
    "watchDirectories": [ "Toggle" ]
}

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

System.IO.File.WriteAllText("D:/home/site/wwwroot/Toggle/restart.conf", DateTime.Now.ToString());     

При просмотре журналов функция перезагружается, когда обнаруживает изменение файла в каталоге:

Watched directory change of type 'Changed' detected for 'D:\home\site\wwwroot\Toggle\restart.conf'  
Host configuration has changed. Signaling restart
person DSpirit    schedule 21.08.2019
comment
К сожалению, это решение не работает, когда папка кода функции защищена от записи: переменная настройки приложения WEBSITE_RUN_FROM_PACKAGE установлена ​​в 1. - person pmosconi; 25.10.2020

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

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

  1. Воспроизвести событие, вызвавшее функцию (т.е. запустить ее снова)
  2. Для неконфиденциальных данных зарегистрируйте полезную нагрузку функции и создайте другую функцию, которую можно будет вызвать по запросу для ее повторного запуска. Т.е. вы создаете прокси для «повторного вызова» функции.
  3. Укрепите свой код, реализуя политику повтора. См. Polly.
  4. Добавьте служебную шину в свою архитектуру. Имейте простую функцию для записи полезной нагрузки вызова в полезную нагрузку шины сообщений. Есть еще одна функция для сбора полезной нагрузки и ее более тщательной обработки там, где может быть ненадежная интеграция и т. Д.). Таким образом, если вызов не удастся, вы можете отказаться от него и отказаться от мертвой буквы для последующей обработки.
  5. Рассмотрите возможность использования Durable Function Extensions и используя устойчивые шаблоны, они могут помочь сделать код ваших функций более надежным и управлять состоянием.
person Murray Foxcroft    schedule 10.01.2019
comment
Это не к делу. Например, мне нужно перезапустить функции, потому что похоже, что каждый триггер http создает новую функцию, а не повторно использует существующие, которые никогда не умирают, и таким образом они в конечном итоге съедают все доступные соединения с базой данных, никогда не освобождая их. - person pmosconi; 25.10.2020

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

person Inzi    schedule 12.01.2019