使用PowerShell创建计划的Azure WebJob

Ric*_*ter 11 powershell azure azure-web-sites azure-scheduler azure-webjobs

我正在尝试创建一个Azure WebJob来发送BrokeredMessage到Azure ServiceBus主题,创建和发送消息的实际行为是微不足道的,但是我一直无法找到自动创建Scheduled WebJob的方法.

自动化工作流程应如下工作:

  1. 创建一个新的Azure网站[完成]
  2. 创建一个新的触发Azure WebJob上传PS1文件[完成]
  3. 创建新的Azure Scheduler作业集[已验证的概念]
  4. 创建一个触发WebJob的新Azure Scheduler作业

Azure管理门户为此功能提供了一个很好的UI,它在所选的WebSite,Azure Scheduler作业集合和Azure Scheduler作业中创建Azure WebJob:

屏幕截图:Azure管理门户中新计划的Web作业任务的第2步

似乎没有使用Azure Service Management PowerShell模块创建计划的Azure WebJob的类似机制.当然可以创建新的WebJobs,Azure Scheduler集合作业 - 但是我不知道Azure Scheduler发布到哪个URL或存储队列来安排Azure WebJobs.

Ric*_*ter 26

Azure Scheduler和Azure WebJobs之间存在密切关系.具体来说,Azure WebJobs没有任何内部支持进行日程安排,WebJobs依赖Azure Scheduler来调用该*.scm.azurewebsites.net网站. Azure WebSites,WebJobs和Scheduler之间的关系

因此,可以使用PowerShell cmdlet为这些服务设置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"; `
  };
Run Code Online (Sandbox Code Playgroud)

它有点长,所以用简单的英语,上面的脚本执行以下操作:

  1. 创建一个新的Azure网站.
  2. 创建并上载新的WebJob.
  3. 创建新的Azure Scheduler作业集合.
  4. 生成HTTP基本身份验证标头值.
  5. 创建一个新的Azure Scheduler HTTP作业,该作业向*.scm.azurewebsites.net API发出经过身份验证的请求.

希望这可以节省一些其他开发人员试图弄清楚这一点.