Create a Scheduled Azure WebJob with PowerShell
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.
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:
- Creates a new Azure Website.
- Creates and Uploads a new WebJob.
- Creates a new Azure Scheduler Job Collection.
- Generates the HTTP Basic Authentication header value.
- 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.