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:
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:
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.
Deploy to Azure App ServiceIn Solution Explorer, right-click the project and select Publish. In the Publish dialog box, select Azure for Target, and then select Next. Select Azure WebJobs for Specific target, and then select Next. Above App Service instances select the plus (+) button to Create a new Azure WebJob.
Azure WebJobs are deprecated, but still in use. They are being phased out in favor of Azure Functions. Azure Functions is a more up-to-date and feature rich service which offers a greater degree of flexibility and control.
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:
Hope this saves a few other developers from scratching their head trying to figure this one out.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With