Планирование запускаемой по таймеру функции Azure на портале Azure

У меня есть функция Azure (построенная в Visual Studio 2019 и работающая в стеке .NET Core 3.x в Azure), которая должна запускаться по таймеру для запуска, например. один раз за ночь.

Я могу легко создать функцию и определить расписание как выражение NCRONTAB следующим образом:

[FunctionName("MyFunctionName")]
public void Run([TimerTrigger("0 15 3 * * 1-5")]TimerInfo myTimer, ILogger log)
{
    // Azure function code here ....
}

Работает как шарм - НО я хотел бы иметь возможность определять расписание на портале Azure, а не в моем коде функции, для обработки, например, DEV vs. TEST vs. PROD ситуации. На платформах DEV и TEST я, возможно, захочу запускать это несколько раз в день - в производственной среде может быть только один раз в неделю.

Но при таком подходе, когда расписание установлено - оно установлено, я не могу изменить его на портале Azure (все поля ввода неактивны / редактирование отключено).

Я надеялся, что смогу просто пропустить выражение NCRONTAB в объявлении моей функции Azure - вот так:

[FunctionName("MyFunctionName")]
public void Run([TimerTrigger()]TimerInfo myTimer, ILogger log)
{
    // Azure function code here ....
}

а затем укажите фактическое выражение CRON на портале Azure - но не вперед, выражение CRON является обязательным ....

Так я слишком многого прошу здесь? Или есть способ запланировать это вне моей фактической базы кода?


person marc_s    schedule 07.07.2020    source источник
comment
ты пробовал это? stackoverflow.com/a/51733261/1537195   -  person silent    schedule 07.07.2020
comment
@silent: спасибо за ссылку - после небольшого количества проб и ошибок этот вопрос, на который вы указали ссылку, предоставил решение - спасибо!   -  person marc_s    schedule 08.07.2020


Ответы (1)


В качестве сообщения, предоставленного сайтом silent, мы можем использовать ConfigurationManager.AppSettings["key"]. Но я думаю, вы можете обратиться к более простому решению ниже.

1. Измените код функции локально, не указывайте в коде выражение cron, вместо этого используйте %myTimerCron%.

введите описание изображения здесь

2. Опубликуйте его с локального на лазурный, а затем добавьте пару "ключ-значение" в настройках приложения. введите описание изображения здесь

3. Затем вы можете изменить выражение cron, изменив значение myTimerCron в настройках приложения на портале Azure.

Кстати, когда вы тестируете код локально в Visual Studio, вам просто нужно предоставить выражение cron с именем myTimerCron в local.setting.json. введите описание изображения здесь

person Hury Shen    schedule 08.07.2020
comment
Спасибо - кажется, это просто здорово помогает! - person marc_s; 08.07.2020