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

8
我正在构建我的Azure逻辑应用工作流程,它需要检查一些条件并运行以下PowerShell代码:
Stop-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob
Start-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob -JobType Continuous

问题是:在Azure Logic Apps中调用这样的脚本最简单的方法是什么?似乎没有Powershell的内置块/连接器,因此我想知道有哪些可能性。或者可能更容易通过类似操作运行az CLI命令。
5个回答

11

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

enter image description here

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

enter image description here

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运行它。

输入图像描述


7

目前,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。

enter image description here

触发结果:

enter image description here

所以您只需要按照上述步骤操作,针对您的问题,请参考以下API:

  1. 启动连续作业
  2. 停止连续作业

与此同时,我已经使用了Azure自动化和Runbooks,但是您的答案是一个很好的选择,绝对值得采纳,非常感谢! - mickl
@mickl 很高兴知道它有帮助。;-) - Joy Wang

4
使用PowerShell或任何其他支持的语言创建具有http触发器的Azure Function。然后通过调用Http端点在逻辑应用中轻松调用函数。

2
实际上,现在Azure提供了这个选项,无需创建运行簿和自动化帐户。它仍处于预览模式,但似乎正在工作!

enter image description here

1
这个解决方案似乎需要从第三方 Ultima 购买付费许可证。请参阅 Microsoft 文档:https://learn.microsoft.com/en-us/connectors/iaconnectdynamiccode/ - L Robin

0

您还可以让您的PowerShell代码在支持PowerShell的Azure容器实例中运行,并从Logic App工作流创建一个新的容器组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接