Динамически устанавливаемое расписание в функции Azure
У меня есть следующий function.json для моей функции Azure, расписание которой настроено на 9.30 ежедневно. То, что я хочу, это динамически установить schedule
Атрибут этого JSON. Этот сценарий возникает, когда клиент, использующий мое приложение, вводит дату, в которую должен запускаться планировщик даты.
{
"bindings": [
{
"name": "myTimer",
"type": "timerTrigger",
"direction": "in",
"schedule": "0 30 9 * * *" //Want to set dynamically
}
],
"disabled": false
}
Это возможно?
(Также обратите внимание, что я не хочу использовать Azure Scheduler по причинам бюджетирования)
3 ответа
Используйте API Kudu для изменения function.json https://github.com/projectkudu/kudu/wiki/REST-API
PUT https: // {functionAppName}.scm.azurewebsites.net / api / vfs / {pathToFunction.json}, заголовки: If-Match: "*", тело: новый контент function.json
Затем отправьте запрос на внесение изменений
POST https://{functionAppName}.scm.azurewebsites.net/api/functions/synctriggers
Или вы можете использовать Queue Trigger с сообщениями "initialVisibilityDelay". В этом случае вам нужно написать собственный код для реализации планировщика.
Вы можете изменить свой function.json, чтобы получить выражение cron из настроек приложения.
"schedule": "% TriggerSchedule%"
Определите TriggerSchedule в ваших настройках приложения. Вы можете динамически изменять настройки приложения, и триггер функции будет соответствовать ему.
Это старый вопрос, но все еще актуальный. Недавно я столкнулся с подобной проблемой. Функция Azure имеет встроенную функциональность, которую вы можете использовать. Это называется Вечная оркестровка в надежных функциях (функции Azure). Вы можете сделать что-то вроде
[FunctionName("Periodic_Cleanup_Loop")]
public static async Task Run([OrchestrationTrigger] IDurableOrchestrationContext
context)
{
await context.CallActivityAsync("DoCleanup", null);
// sleep for one hour between cleanups
DateTime nextCleanup = context.CurrentUtcDateTime.AddHours(1);
await context.CreateTimer(nextCleanup, CancellationToken.None);
context.ContinueAsNew(null);
}
Дополнительную информацию о lnfo можно найти на https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-eternal-orchestrations?tabs=csharp.