Create a Scheduled Azure WebJob with PowerShell
Asked Answered
D

1

11

I am trying to create an Azure WebJob to send a BrokeredMessage to an Azure ServiceBus Topic, the actual act of creating and sending the message is trivial however I have been unable to find a way to automate the creation of the Scheduled WebJob.

The automated workflow should work as follows:

  1. Create a new Azure Website [Done]
  2. Create a new triggered Azure WebJob uploading a PS1 file [Done]
  3. Create a new Azure Scheduler Job Collection [Proven Concept]
  4. Create a new Azure Scheduler Job that triggers the WebJob

The Azure Management Portal provides a nice UI for this functionality, which under the covers creates an Azure WebJob in the selected WebSite, an Azure Scheduler Job Collection and an Azure Scheduler Job:

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

There doesn't appear to be an analogous mechanism for creating a scheduled Azure WebJob with the Azure Service Management PowerShell Module. It is certainly possible to create new WebJobs, Azure Scheduler Collections and Jobs - however I have no idea what URL or Storage Queue the Azure Scheduler is posting to to schedule Azure WebJobs.

Distracted answered 14/8, 2014 at 11:42 Comment(2)
The question isn't clear. Are you asking how to get the schedule set? Can you be more specific?Serigraph
Fair comment, I have added some more detail at the top of the question. Does that help?Distracted
D
26

There is a close relationship between Azure Scheduler and Azure WebJobs. Specifically Azure WebJobs does not have any internal support for scheduling, WebJobs relies on the Azure Scheduler to call into the *.scm.azurewebsites.net website. Relationship between Azure WebSites, WebJobs and Scheduler

As such it is possible to use PowerShell cmdlets for these services to setup Azure WebJobs to be triggered on schedule using 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"; `
  };

It's a little long winded so in plain english the above script does the following:

  1. Creates a new Azure Website.
  2. Creates and Uploads a new WebJob.
  3. Creates a new Azure Scheduler Job Collection.
  4. Generates the HTTP Basic Authentication header value.
  5. Creates a new Azure Scheduler HTTP Job that makes an authenticated request to the *.scm.azurewebsites.net API.

Hope this saves a few other developers from scratching their head trying to figure this one out.

Distracted answered 22/8, 2014 at 22:35 Comment(3)
Ok, I made use of your PowerShell (thank you for the head start), but have a question. I now see a WebJob and Scheduler Job in the Azure Portal, but the WebJob says that it is On-Demand. The Job is running via the Scheduler, but would like for it to be linked like a manually created Job.Plaything
@Plaything although it's been over a year since your question, I'm adding the answer for others finding this. To make it look linked like a manually created job, name the scheduler "<sitename>-<jobname>". Azure does the linking purely by checking the job name.Liken
Hi @Richard-Slater, I'm trying to replicate what you are doing here. Where do you get your jobfile from? Do you mind sharing with me your process for deploying/generating -JobFile ~\Desktop\test.zip;?Substage

© 2022 - 2024 — McMap. All rights reserved.