Динамически устанавливаемое расписание в функции 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 ответа

Решение
  1. Используйте 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

  2. Затем отправьте запрос на внесение изменений

    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.

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