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

Azure Logic Apps: how to run Powershell script or Azure CLI?

我正在构建我的 Azure Logic Apps 工作流,它应该检查一些条件并且 运行 遵循 Powershell:

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

问题是:在 Azure 逻辑应用程序中调用此类脚本的最简单方法是什么? Powershell 似乎没有内置 block/connector,所以我想知道有哪些可能性。或者可能更容易 运行 具有类似操作的 az CLI 命令

目前,azure logic 似乎不支持 运行 powershell 和 cli 脚本,这里是 a voice in azure feedback,你可以投票。

解决方法

如果要启动和停止webjob,可以在逻辑应用中调用Kudu WebJobs API

您可以按照以下步骤操作。

1.Run 在本地使用 powershell 命令生成您的网络应用程序的授权令牌。

$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.In 逻辑应用程序,具体方法,URI,Headers(header 应该是 Authorization: Basic JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j注意 使用 space 来分隔 Basic 和令牌),例如,我在我的网络应用程序中启动了一个触发的网络作业。

触发结果:

所以你只需要按照上面的步骤,你的问题,参考APIS:

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

最后我找到了一个利用 Azure 自动化 的解决方案。从 Azure 门户我们可以创建新的资源,输入 Automation:

创建资源后,我们可以在 运行books 选项卡下添加新的 Runbook

Runbook 可以 运行Powershell Workflow and get authorized using AzureRunAsConnection option (details 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 逻辑应用程序 运行 它。

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

实际上现在 Azure 提供了此选项,而无需创建运行手册和自动化帐户。它仍处于预览模式,但似乎可以正常工作!