使用PowerShell创建计划的Azure WebJob

时间:2014-08-14 11:42:20

标签: powershell azure azure-web-sites azure-webjobs azure-scheduler

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

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

  1. 创建新的Azure网站 [完成]
  2. 创建新的触发Azure WebJob,上传PS1文件 [完成]
  3. 创建新的Azure Scheduler作业集 [经验证的概念]
  4. 创建一个触发WebJob的新Azure Scheduler作业
  5. Azure管理门户为此功能提供了一个很好的UI,它在所选的WebSite,Azure Scheduler作业集合和Azure Scheduler作业中创建Azure WebJob:

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

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

1 个答案:

答案 0 :(得分:26)

Azure Scheduler与Azure WebJobs之间存在密切关系。具体来说,Azure WebJobs没有任何内部调度支持,WebJobs依赖Azure Scheduler来调用*.scm.azurewebsites.net网站。 Relationship between Azure WebSites, WebJobs and 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"; `
  };

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

  1. 创建新的Azure网站。
  2. 创建并上传新的WebJob。
  3. 创建新的Azure Scheduler作业集。
  4. 生成HTTP基本身份验证标头值。
  5. 创建一个新的Azure Scheduler HTTP作业,该作业向* .scm.azurewebsites.net API发出经过身份验证的请求。
  6. 希望这可以节省一些其他开发人员试图弄清楚这个问题。