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

x6yk4ghg  于 2022-12-27  发布在  Shell
关注(0)|答案(5)|浏览(195)

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

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

问题是:在Azure Logic Apps中调用此类脚本的最简单方法是什么?Powershell似乎没有内置块/连接器,因此我想知道可能性有多大。或者,使用类似操作运行az CLI命令可能更简单

dgsult0t

dgsult0t1#

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

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

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

yxyvkwin

yxyvkwin2#

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

解决方法

如果要启动和停止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一样。
除了您reset the publish profile之外,令牌永远不会更改,因此您只需要执行一次此步骤。
2.在逻辑应用中,指定方法、URI、头(头应该像Authorization: Basic JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j注意使用空格分隔Basic和token),例如,我在Web应用中启动了一个触发的Web作业。

触发结果:

因此,您只需要按照上述步骤操作,对于您的问题,请参阅APIS:
1.启动连续作业
1.停止连续作业

mf98qq94

mf98qq943#

使用Powershell作为函数语言(或任何其他受支持的语言),创建一个包含http触发器的Azure函数。然后,通过调用Http终结点,在Logic应用中轻松调用该函数。

j2cgzkjk

j2cgzkjk4#

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

kokeuurv

kokeuurv5#

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

相关问题