Azure逻辑应用程序:如何运行Powershell脚本或Azure CLI?

时间:2018-11-21 14:51:18

标签: azure powershell azure-logic-apps azure-cli

我正在构建Azure Logic应用程序工作区,该工作区应检查某些条件并按照Powershell运行:

Stop-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob
Start-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob -JobType Continuous

问题是:在Azure Logic Apps中调用此类脚本的最简单方法是什么?看来Powershell没有内置的块/连接器,所以我想知道什么是可能的。或者也许通过类似的操作来运行z CLI命令可能更容易

3 个答案:

答案 0 :(得分:1)

当前,azure逻辑似乎不支持运行powershell和cli脚本,这里是a voice in azure feedback,您可以投票。

解决方法

如果要启动和停止网络作业,可以在逻辑应用程序中调用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

除非您reset the publish profile,否则令牌将永远不会更改,因此您只需执行一次此步骤。

2。在逻辑应用程序中,特定于方法,URI,标头(标头应类似于  Authorization: Basic JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j注释使用空格分隔Basic和令牌),例如,我在Web应用程序中启动了触发的Webjob。

enter image description here

触发结果:

enter image description here

因此,您只需按照上述步骤操作,有关问题,请参阅APIS:

  1. Start a continuous job
  2. Stop a continuous job

答案 1 :(得分:0)

最后,我得到了一个利用 Azure Automation 的解决方案。从Azure门户,我们可以在Automation中输入新的资源:

enter image description here

创建资源后,我们可以在Runbooks标签下添加新的 Runbook

enter image description here

Runbook可以运行Powershell Workflow并使用AzureRunAsConnection选项获得授权(详细信息here)。我的示例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 中运行它。

enter image description here

答案 2 :(得分:0)

使用http触发器以Powershell作为函数语言(或任何其他受支持的语言)创建Azure函数。然后,您可以通过调用Http端点在Logic应用程序中轻松调用Function。