Stop-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob
Start-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob -JobType Continuous
问题是:在Azure Logic Apps中调用这样的脚本最简单的方法是什么?似乎没有Powershell的内置块/连接器,因此我想知道有哪些可能性。或者可能更容易通过类似操作运行az CLI命令。
Stop-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob
Start-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob -JobType Continuous
最后我找到了一种利用Azure自动化的解决方案。从Azure门户中,我们可以创建新的资源,在输入Automation
之后:
创建资源之后,我们可以在运行簿选项卡下添加新的Runbook:
Runbook可以运行Powershell Workflow,并使用AzureRunAsConnection
选项进行授权(详情请参见此处)。我的示例Powershell旨在重启特定应用服务上的WebJob,如下所示:
Workflow RestartMyWebJob
{
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
$AzureContext = Select-AzureRmSubscription -SubscriptionId $Conn.SubscriptionID
$Apiversion = "2015-08-01"
$ResourceGroupName = 'My-Resource-Group-Name'
$ResourceName = 'My-Resource-Group-Name/My-AppService--WebJob-Name'
Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action stop -ApiVersion $Apiversion -Force
Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action start -ApiVersion $Apiversion -Force
}
有了这个工作流程设置,我们可以通过在逻辑中添加新的块来从Azure Logic Apps运行它。
目前,Azure逻辑似乎不支持运行PowerShell和CLI脚本,这里是 Azure反馈中的一种声音,您可以投票。
解决方法:
如果您想启动和停止Web作业,可以在逻辑应用中调用 Kudu WebJobs API。
您可以按照以下步骤进行操作。
1.在本地运行PowerShell命令以生成您的Web应用程序的授权令牌。
$creds = Invoke-AzureRmResourceAction -ResourceGroupName joywebapp -ResourceType Microsoft.Web/sites/config -ResourceName joywebapp2/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
$username = $creds.Properties.PublishingUserName
$password = $creds.Properties.PublishingPassword
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$base64AuthInfo
是我们需要的内容,应该像这样:JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j
。
令牌除非您重置发布配置文件,否则永远不会更改,因此您只需要执行此步骤一次。
2.在逻辑应用中,指定方法、URI、标头(标头应该像这样:Authorization: Basic JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j
,注意使用空格来分隔Basic
和令牌),例如,我在我的Web应用程序中启动了一个触发的WebJob。
触发结果:
所以您只需要按照上述步骤操作,针对您的问题,请参考以下API:
您还可以让您的PowerShell代码在支持PowerShell的Azure容器实例中运行,并从Logic App工作流创建一个新的容器组。