Создание запланированного Azure WebJob с помощью PowerShell

Я пытаюсь создать Azure WebJob для отправки BrokeredMessage в тему Azure ServiceBus, фактический акт создания и отправки сообщения тривиален, однако мне не удалось найти способ автоматизировать создание запланированного WebJob.

Автоматический рабочий процесс должен работать следующим образом:

  • Создайте новый веб-сайт Azure [Готово]
  • Создайте новый запущенный Azure WebJob, загружающий файл PS1 [Готово]
  • Создать новую коллекцию заданий планировщика Azure [Проверенная концепция]
  • Создайте новое задание планировщика Azure, которое запускает WebJob

Портал управления Azure обеспечивает приятный пользовательский интерфейс для этой функции, который под обложками создает Azure WebJob в выбранном WebSite, в коллекции заданий Azure Scheduler и в задании Azure Scheduler:

Screenshot: Step 2 of New Scheduled Web Job task in Azure Management Portal

Как представляется, не существует аналогичного механизма для создания запланированного Azure WebJob с помощью модуля PowerShell для управления службами Azure. Конечно, возможно создать новый WebJobs, Коллекции планировщиков Azure и Jobs - однако я понятия не имею, какой URL или Очередь хранения планировщик Azure отправляет, чтобы запланировать Azure WebJobs.

Ответы

Ответ 1

Между Azure Scheduler и Azure WebJobs существует тесная связь. В частности, Azure WebJobs не имеет внутренней поддержки для планирования, WebJobs полагается на Планировщика Azure для вызова на веб-сайт *.scm.azurewebsites.net. Relationship between Azure WebSites, WebJobs and Scheduler

Таким образом, для этих сервисов можно использовать командлеты PowerShell для настройки Azure WebJobs для запуска по расписанию с использованием Azure Scheduler.

$location = "North Europe";

$site = New-AzureWebsite -Location $location `
  -Name "amido-test-website";
$job = New-AzureWebsiteJob -Name $site.Name `
  -JobName "amido-test-job" `
  -JobType Triggered `
  -JobFile ~\Desktop\test.zip;
$jobCollection = New-AzureSchedulerJobCollection `
  -Location $location `
  -JobCollectionName "amido-test-job-collection";
$authPair = "$($site.PublishingUsername):$($site.PublishingPassword)";
$pairBytes = [System.Text.Encoding]::UTF8.GetBytes($authPair);
$encodedPair = [System.Convert]::ToBase64String($pairBytes);
New-AzureSchedulerHttpJob `
  -JobCollectionName $jobCollection[0].JobCollectionName `
  -JobName "test" `
  -Method POST `
  -URI "$($job.Url)\run" `
  -Location $location `
  -StartTime "2014-01-01" `
  -Interval 1 `
  -Frequency Minute `
  -EndTime "2015-01-01" `
  -Headers @{ `
    "Content-Type" = "text/plain"; `
    "Authorization" = "Basic $encodedPair"; `
  };

Это немного длиннее, поэтому на английском языке выше script делает следующее:

  • Создает новый веб-сайт Azure.
  • Создает и загружает новый WebJob.
  • Создает новую коллекцию заданий планировщика Azure.
  • Генерирует значение заголовка базовой аутентификации HTTP.
  • Создает новый HTTP-задание Azure Scheduler, который выполняет аутентифицированный запрос в API *.scm.azurewebsites.net.

Надеюсь, это избавит некоторых других разработчиков от царапин на голове, пытаясь понять это.